Update @wordpress packages

Update packages to include these bug fixes from Gutenberg:

- Update Pattern block category and add documentation
- Fix non existent menu handling in nav block
- Make Reusable blocks available in the Site Editor
- Add caching to WP_Theme_JSON_Resolver_Gutenberg::get_user_data_from_custom_post_type()
- theme.json: add appearanceTools flag to opt-in into appearance UI controls
- Update the block theme folders to templates and parts
- Remove reference to gutenberg_, swap with wp_
- Use table layout in templates list screen
- Update featured image placeholder graphic.
- [Inserter]: Adjust order of theme blocks and reorder inserter items
- Implement suitable fallback for Nav block on front end of site when no menu selected
- Toggle Group Control: add tooltip
- Use first non-empty Nav post as primary fallback for Nav block
- Change .nvmrc and documentation for Node.js version (LTS to 14.18.1)
- Update: Migrate global styles user database data on the rest endpoint
- Update global styles public API
- Update: Rename user preset origin to custom
- Try always generating navigation post title
- Show all templates and template parts on the site editor list screens
- Highlight "Site" in the navigation panel
- Fix template part slug generation when creating through the block placeholder
- [Block Library - Post Title]: Fix render error when setting Page to homepage
- Add 'Clear customizations' button to template list page
- Gallery v1: Allow clicks within replace media placeholder state
- Site Editor: Set the <title> on the list page to be same as the CPT name
- Gallery: Fix stuck image size options loader
- Cover: Fix undo trap
- Add success and error snackbars to the templates list page
- Fix: theme colors cannot override defaults
- Fix: Color palette is not being stored
- Add elements support to the typography panel in global styles
- Make links plural in global styles
- Add: Gradient palette editor
- Update some small style regressions in the template list
- Add: Transparency support on global styles colors
- Fix: apply by slug on all origins
- Render empty Nav block if no fallback block can be utilised
- Allow filtering of Nav block fallback
- Fix Nav block fallback DB query to match on full block grammar start tag
- Remove unstable max pages attribute from Nav block
- DateTimePicker: set PM hours correctly
- Update delete template button
- Site Editor: Template list add rename action
- Fix Nav block editing wrong entity on creation of new Menu
- [REST] Restore the missing double slash in the ID received by /templates
- Add icons to navigation sidebar items
- Update function names for the public global styles API functions
- Templates Controller: Add missing 'is_custom' prop
- Rename gutenberg_ to wp_ for some functions that land in WordPress 5.9
- [Block Library - Template Part]:Remove support for conversion to Reusable block
- Global Styles: Call "palettes" and not "color palettes" on panel label
- Add button text when no colors found
- Update: Global Styes: Count all color palette origins on the palette counter
- Rename navigationMenuId to ref
- Offset the parent iframe when computing Popover position 
- Fix: Failing PHPUnit test
- Show theme, plugin or author in Added By column with appropriate icon or avatar
- Add origin and author to template rest api

See #54487.
Props talldanwp, mamaduka, oandregal.


git-svn-id: https://develop.svn.wordpress.org/trunk@52275 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Robert Anderson
2021-11-30 00:22:30 +00:00
parent 8f1c5493da
commit 080596e01c
37 changed files with 1155 additions and 336 deletions

View File

@@ -53,7 +53,6 @@ class Tests_REST_WpRestTemplatesController extends WP_Test_REST_Controller_Testc
wp_delete_post( self::$post->ID );
}
public function test_register_routes() {
$routes = rest_get_server()->get_routes();
$this->assertArrayHasKey( '/wp/v2/templates', $routes );
@@ -93,6 +92,7 @@ class Tests_REST_WpRestTemplatesController extends WP_Test_REST_Controller_Testc
'theme' => 'default',
'slug' => 'my_template',
'source' => 'custom',
'origin' => null,
'type' => 'wp_template',
'description' => 'Description of my template.',
'title' => array(
@@ -102,6 +102,8 @@ class Tests_REST_WpRestTemplatesController extends WP_Test_REST_Controller_Testc
'status' => 'publish',
'wp_id' => self::$post->ID,
'has_theme_file' => false,
'is_custom' => true,
'author' => 0,
),
$this->find_and_normalize_template_by_id( $data, 'default//my_template' )
);
@@ -134,6 +136,7 @@ class Tests_REST_WpRestTemplatesController extends WP_Test_REST_Controller_Testc
'theme' => 'default',
'slug' => 'my_template',
'source' => 'custom',
'origin' => null,
'type' => 'wp_template',
'description' => 'Description of my template.',
'title' => array(
@@ -143,11 +146,78 @@ class Tests_REST_WpRestTemplatesController extends WP_Test_REST_Controller_Testc
'status' => 'publish',
'wp_id' => self::$post->ID,
'has_theme_file' => false,
'is_custom' => true,
'author' => 0,
),
$data
);
}
/**
* @ticket 54507
* @dataProvider get_template_endpoint_urls
*/
public function test_get_item_works_with_a_single_slash( $endpoint_url ) {
wp_set_current_user( self::$admin_id );
$request = new WP_REST_Request( 'GET', $endpoint_url );
$response = rest_get_server()->dispatch( $request );
$data = $response->get_data();
unset( $data['content'] );
unset( $data['_links'] );
$this->assertSame(
array(
'id' => 'default//my_template',
'theme' => 'default',
'slug' => 'my_template',
'source' => 'custom',
'origin' => null,
'type' => 'wp_template',
'description' => 'Description of my template.',
'title' => array(
'raw' => 'My Template',
'rendered' => 'My Template',
),
'status' => 'publish',
'wp_id' => self::$post->ID,
'has_theme_file' => false,
'is_custom' => true,
'author' => 0,
),
$data
);
}
public function get_template_endpoint_urls() {
return array(
array( '/wp/v2/templates/default/my_template' ),
array( '/wp/v2/templates/default//my_template' ),
);
}
/**
* @ticket 54507
* @dataProvider get_template_ids_to_sanitize
*/
public function test_sanitize_template_id( $input_id, $sanitized_id ) {
$endpoint = new WP_REST_Templates_Controller( 'wp_template' );
$this->assertEquals(
$sanitized_id,
$endpoint->_sanitize_template_id( $input_id )
);
}
public function get_template_ids_to_sanitize() {
return array(
array( 'tt1-blocks/index', 'tt1-blocks//index' ),
array( 'tt1-blocks//index', 'tt1-blocks//index' ),
array( 'theme-experiments/tt1-blocks/index', 'theme-experiments/tt1-blocks//index' ),
array( 'theme-experiments/tt1-blocks//index', 'theme-experiments/tt1-blocks//index' ),
);
}
/**
* @ticket 54422
* @covers WP_REST_Templates_Controller::create_item
@@ -161,6 +231,7 @@ class Tests_REST_WpRestTemplatesController extends WP_Test_REST_Controller_Testc
'description' => 'Just a description',
'title' => 'My Template',
'content' => 'Content',
'author' => self::$admin_id,
)
);
$response = rest_get_server()->dispatch( $request );
@@ -177,6 +248,7 @@ class Tests_REST_WpRestTemplatesController extends WP_Test_REST_Controller_Testc
),
'slug' => 'my_custom_template',
'source' => 'custom',
'origin' => null,
'type' => 'wp_template',
'description' => 'Just a description',
'title' => array(
@@ -185,6 +257,8 @@ class Tests_REST_WpRestTemplatesController extends WP_Test_REST_Controller_Testc
),
'status' => 'publish',
'has_theme_file' => false,
'is_custom' => true,
'author' => self::$admin_id,
),
$data
);
@@ -207,6 +281,7 @@ class Tests_REST_WpRestTemplatesController extends WP_Test_REST_Controller_Testc
'content' => array(
'raw' => 'Content',
),
'author' => self::$admin_id,
)
);
$response = rest_get_server()->dispatch( $request );
@@ -223,6 +298,7 @@ class Tests_REST_WpRestTemplatesController extends WP_Test_REST_Controller_Testc
),
'slug' => 'my_custom_template_raw',
'source' => 'custom',
'origin' => null,
'type' => 'wp_template',
'description' => 'Just a description',
'title' => array(
@@ -231,11 +307,29 @@ class Tests_REST_WpRestTemplatesController extends WP_Test_REST_Controller_Testc
),
'status' => 'publish',
'has_theme_file' => false,
'is_custom' => true,
'author' => self::$admin_id,
),
$data
);
}
public function test_create_item_invalid_author() {
wp_set_current_user( self::$admin_id );
$request = new WP_REST_Request( 'POST', '/wp/v2/templates' );
$request->set_body_params(
array(
'slug' => 'my_custom_template_invalid_author',
'description' => 'Just a description',
'title' => 'My Template',
'content' => 'Content',
'author' => -1,
)
);
$response = rest_get_server()->dispatch( $request );
$this->assertErrorResponse( 'rest_invalid_author', $response, 400 );
}
/**
* @covers WP_REST_Templates_Controller::update_item
*/
@@ -370,19 +464,22 @@ class Tests_REST_WpRestTemplatesController extends WP_Test_REST_Controller_Testc
$response = rest_get_server()->dispatch( $request );
$data = $response->get_data();
$properties = $data['schema']['properties'];
$this->assertCount( 11, $properties );
$this->assertCount( 14, $properties );
$this->assertArrayHasKey( 'id', $properties );
$this->assertArrayHasKey( 'description', $properties );
$this->assertArrayHasKey( 'slug', $properties );
$this->assertArrayHasKey( 'theme', $properties );
$this->assertArrayHasKey( 'type', $properties );
$this->assertArrayHasKey( 'source', $properties );
$this->assertArrayHasKey( 'origin', $properties );
$this->assertArrayHasKey( 'content', $properties );
$this->assertArrayHasKey( 'title', $properties );
$this->assertArrayHasKey( 'description', $properties );
$this->assertArrayHasKey( 'status', $properties );
$this->assertArrayHasKey( 'wp_id', $properties );
$this->assertArrayHasKey( 'has_theme_file', $properties );
$this->assertArrayHasKey( 'is_custom', $properties );
$this->assertArrayHasKey( 'author', $properties );
}
protected function find_and_normalize_template_by_id( $templates, $id ) {

View File

@@ -200,6 +200,79 @@ class Tests_Theme_wpThemeJson extends WP_UnitTestCase {
$this->assertEqualSetsWithIndex( $expected_no_origin, $actual_no_origin );
}
function test_get_settings_using_opt_in_key() {
$theme_json = new WP_Theme_JSON(
array(
'version' => WP_Theme_JSON::LATEST_SCHEMA,
'settings' => array(
'appearanceTools' => true,
'blocks' => array(
'core/paragraph' => array(
'typography' => array(
'lineHeight' => false,
),
),
'core/group' => array(
'appearanceTools' => true,
'typography' => array(
'lineHeight' => false, // This should override appearanceTools.
),
),
),
),
)
);
$actual = $theme_json->get_settings();
$expected = array(
'border' => array(
'width' => true,
'style' => true,
'radius' => true,
'color' => true,
),
'color' => array(
'link' => true,
),
'spacing' => array(
'blockGap' => true,
'margin' => true,
'padding' => true,
),
'typography' => array(
'lineHeight' => true,
),
'blocks' => array(
'core/paragraph' => array(
'typography' => array(
'lineHeight' => false,
),
),
'core/group' => array(
'border' => array(
'width' => true,
'style' => true,
'radius' => true,
'color' => true,
),
'color' => array(
'link' => true,
),
'spacing' => array(
'blockGap' => true,
'margin' => true,
'padding' => true,
),
'typography' => array(
'lineHeight' => false,
),
),
),
);
$this->assertEqualSetsWithIndex( $expected, $actual );
}
/**
* @ticket 54336
*/
@@ -1060,6 +1133,144 @@ class Tests_Theme_wpThemeJson extends WP_UnitTestCase {
$this->assertEqualSetsWithIndex( $expected, $actual );
}
public function test_merge_incoming_data_removes_theme_presets_with_slugs_as_default_presets() {
$defaults = new WP_Theme_JSON(
array(
'version' => WP_Theme_JSON::LATEST_SCHEMA,
'settings' => array(
'color' => array(
'palette' => array(
array(
'slug' => 'red',
'color' => 'red',
'name' => 'Red',
),
array(
'slug' => 'green',
'color' => 'green',
'name' => 'Green',
),
),
),
'blocks' => array(
'core/paragraph' => array(
'color' => array(
'palette' => array(
array(
'slug' => 'blue',
'color' => 'blue',
'name' => 'Blue',
),
),
),
),
),
),
),
'default'
);
$theme = new WP_Theme_JSON(
array(
'version' => WP_Theme_JSON::LATEST_SCHEMA,
'settings' => array(
'color' => array(
'palette' => array(
array(
'slug' => 'pink',
'color' => 'pink',
'name' => 'Pink',
),
array(
'slug' => 'green',
'color' => 'green',
'name' => 'Greenish',
),
),
),
'blocks' => array(
'core/paragraph' => array(
'color' => array(
'palette' => array(
array(
'slug' => 'blue',
'color' => 'blue',
'name' => 'Bluish',
),
array(
'slug' => 'yellow',
'color' => 'yellow',
'name' => 'Yellow',
),
array(
'slug' => 'green',
'color' => 'green',
'name' => 'Block Green',
),
),
),
),
),
),
)
);
$expected = array(
'version' => WP_Theme_JSON::LATEST_SCHEMA,
'settings' => array(
'color' => array(
'palette' => array(
'default' => array(
array(
'slug' => 'red',
'color' => 'red',
'name' => 'Red',
),
array(
'slug' => 'green',
'color' => 'green',
'name' => 'Green',
),
),
'theme' => array(
array(
'slug' => 'pink',
'color' => 'pink',
'name' => 'Pink',
),
),
),
),
'blocks' => array(
'core/paragraph' => array(
'color' => array(
'palette' => array(
'default' => array(
array(
'slug' => 'blue',
'color' => 'blue',
'name' => 'Blue',
),
),
'theme' => array(
array(
'slug' => 'yellow',
'color' => 'yellow',
'name' => 'Yellow',
),
),
),
),
),
),
),
);
$defaults->merge( $theme );
$actual = $defaults->get_raw_data();
$this->assertEqualSetsWithIndex( $expected, $actual );
}
/**
* @ticket 54336
*/
@@ -1298,7 +1509,7 @@ class Tests_Theme_wpThemeJson extends WP_UnitTestCase {
'color' => array(
'custom' => true,
'palette' => array(
'user' => array(
'custom' => array(
array(
'name' => 'Red',
'slug' => 'red',
@@ -1325,7 +1536,7 @@ class Tests_Theme_wpThemeJson extends WP_UnitTestCase {
'color' => array(
'custom' => true,
'palette' => array(
'user' => array(
'custom' => array(
array(
'name' => 'Yellow',
'slug' => 'yellow',
@@ -1358,7 +1569,7 @@ class Tests_Theme_wpThemeJson extends WP_UnitTestCase {
'settings' => array(
'color' => array(
'palette' => array(
'user' => array(
'custom' => array(
array(
'name' => 'Red',
'slug' => 'red',
@@ -1381,7 +1592,7 @@ class Tests_Theme_wpThemeJson extends WP_UnitTestCase {
'core/group' => array(
'color' => array(
'palette' => array(
'user' => array(
'custom' => array(
array(
'name' => 'Yellow',
'slug' => 'yellow',
@@ -1417,7 +1628,7 @@ class Tests_Theme_wpThemeJson extends WP_UnitTestCase {
'settings' => array(
'color' => array(
'palette' => array(
'user' => array(
'custom' => array(
array(
'name' => 'Red/><b>ok</ok>',
'slug' => 'red',
@@ -1443,7 +1654,7 @@ class Tests_Theme_wpThemeJson extends WP_UnitTestCase {
),
'typography' => array(
'fontFamilies' => array(
'user' => array(
'custom' => array(
array(
'name' => 'Helvetica Arial/><b>test</b>',
'slug' => 'helvetica-arial',
@@ -1471,7 +1682,7 @@ class Tests_Theme_wpThemeJson extends WP_UnitTestCase {
'core/group' => array(
'color' => array(
'palette' => array(
'user' => array(
'custom' => array(
array(
'name' => 'Red/><b>ok</ok>',
'slug' => 'red',
@@ -1506,7 +1717,7 @@ class Tests_Theme_wpThemeJson extends WP_UnitTestCase {
'settings' => array(
'color' => array(
'palette' => array(
'user' => array(
'custom' => array(
array(
'name' => 'Pink',
'slug' => 'pink',
@@ -1517,7 +1728,7 @@ class Tests_Theme_wpThemeJson extends WP_UnitTestCase {
),
'typography' => array(
'fontFamilies' => array(
'user' => array(
'custom' => array(
array(
'name' => 'Cambria',
'slug' => 'cambria',
@@ -1530,7 +1741,7 @@ class Tests_Theme_wpThemeJson extends WP_UnitTestCase {
'core/group' => array(
'color' => array(
'palette' => array(
'user' => array(
'custom' => array(
array(
'name' => 'Pink',
'slug' => 'pink',

View File

@@ -24,6 +24,7 @@ class Tests_Theme_wpThemeJsonResolver extends WP_UnitTestCase {
add_filter( 'theme_root', array( $this, 'filter_set_theme_root' ) );
add_filter( 'stylesheet_root', array( $this, 'filter_set_theme_root' ) );
add_filter( 'template_root', array( $this, 'filter_set_theme_root' ) );
$this->queries = array();
// Clear caches.
wp_clean_themes_cache();
unset( $GLOBALS['wp_themes'] );
@@ -44,6 +45,13 @@ class Tests_Theme_wpThemeJsonResolver extends WP_UnitTestCase {
return 'pl_PL';
}
function filter_db_query( $query ) {
if ( preg_match( '#post_type = \'wp_global_styles\'#', $query ) ) {
$this->queries[] = $query;
}
return $query;
}
/**
* @ticket 52991
* @ticket 54336
@@ -312,4 +320,30 @@ class Tests_Theme_wpThemeJsonResolver extends WP_UnitTestCase {
)
);
}
function test_get_user_data_from_custom_post_type_does_not_use_uncached_queries() {
add_filter( 'query', array( $this, 'filter_db_query' ) );
$query_count = count( $this->queries );
for ( $i = 0; $i < 3; $i++ ) {
WP_Theme_JSON_Resolver::get_user_data_from_custom_post_type( wp_get_theme() );
WP_Theme_JSON_Resolver::clean_cached_data();
}
$query_count = count( $this->queries ) - $query_count;
$this->assertEquals( 1, $query_count, 'Only one SQL query should be peformed for multiple invocations of WP_Theme_JSON_Resolver::get_user_data_from_custom_post_type()' );
$user_cpt = WP_Theme_JSON_Resolver::get_user_data_from_custom_post_type( wp_get_theme() );
$this->assertEmpty( $user_cpt );
$user_cpt = WP_Theme_JSON_Resolver::get_user_data_from_custom_post_type( wp_get_theme(), true );
$this->assertNotEmpty( $user_cpt );
$query_count = count( $this->queries );
for ( $i = 0; $i < 3; $i++ ) {
WP_Theme_JSON_Resolver::get_user_data_from_custom_post_type( wp_get_theme() );
WP_Theme_JSON_Resolver::clean_cached_data();
}
$query_count = count( $this->queries ) - $query_count;
$this->assertEquals( 0, $query_count, 'Unexpected SQL queries detected for the wp_global_style post type' );
remove_filter( 'query', array( $this, 'filter_db_query' ) );
}
}