mirror of
https://github.com/gosticks/wordpress-develop.git
synced 2025-10-16 12:05:38 +00:00
Editor: Add PHPUnit tests for 5.9.0 new functions.
During the 5.9.0 cycle, tests were missed during the porting from Gutenberg to Core for the following functions: * `_disable_block_editor_for_navigation_post_type()` * `_disable_content_editor_for_navigation_post_type()` * `_enable_content_editor_for_navigation_post_type()` * `wp_filter_global_styles_post()` This commit adds new test classes for these functions. Reference: * [https://github.com/WordPress/gutenberg/blob/release/13.6/phpunit/global-styles-test.php Gutenberg v13.6] for `WP_Global_Styles_Test` * [https://github.com/WordPress/gutenberg/blob/release/13.6/phpunit/navigation-test.php Gutenberg v13.6] for `WP_Navigation_Test` Follow-up to [52298], [52145], [52052]. Props antonvlasenko, costdev, ironprogrammer, robinwpdeveloper, hellofromTonya. Fixes #56266. git-svn-id: https://develop.svn.wordpress.org/trunk@54382 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
parent
c819764c81
commit
7e25b96f06
@ -0,0 +1,105 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @group editor
|
||||
*
|
||||
* @covers ::_disable_block_editor_for_navigation_post_type
|
||||
*/
|
||||
class Tests_Editor_DisableBlockEditorForNavigationPostType extends WP_UnitTestCase {
|
||||
const NAVIGATION_POST_TYPE = 'wp_navigation';
|
||||
|
||||
/**
|
||||
* @dataProvider data_should_return_false_when_wp_navigation
|
||||
* @ticket 56266
|
||||
*
|
||||
* @param bool $supports Whether the CPT supports block editor or not.
|
||||
*/
|
||||
public function test_should_return_false_when_wp_navigation( $supports ) {
|
||||
$this->assertFalse( _disable_block_editor_for_navigation_post_type( $supports, static::NAVIGATION_POST_TYPE ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Data provider.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function data_should_return_false_when_wp_navigation() {
|
||||
return array(
|
||||
'support value: true' => array( true ),
|
||||
'support value: false' => array( false ),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider data_should_return_given_value_for_non_wp_navigation_post_types
|
||||
* @ticket 56266
|
||||
*
|
||||
* @param bool $supports Whether the CPT supports block editor or not.
|
||||
* @param string $post_type The post type
|
||||
*/
|
||||
public function test_should_return_given_value_for_non_wp_navigation_post_types( $supports, $post_type ) {
|
||||
$this->assertSame( $supports, _disable_block_editor_for_navigation_post_type( $supports, $post_type ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Data provider.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function data_should_return_given_value_for_non_wp_navigation_post_types() {
|
||||
return array(
|
||||
'post' => array(
|
||||
'post_type' => 'post',
|
||||
'supports' => true,
|
||||
),
|
||||
'page' => array(
|
||||
'post_type' => 'page',
|
||||
'supports' => true,
|
||||
),
|
||||
'attachments' => array(
|
||||
'post_type' => 'attachments',
|
||||
'supports' => false,
|
||||
),
|
||||
'revision' => array(
|
||||
'post_type' => 'revision',
|
||||
'supports' => false,
|
||||
),
|
||||
'custom_css' => array(
|
||||
'post_type' => 'custom_css',
|
||||
'supports' => false,
|
||||
),
|
||||
'customize_changeset' => array(
|
||||
'post_type' => 'customize_changeset',
|
||||
'supports' => false,
|
||||
),
|
||||
'nav_menu_item' => array(
|
||||
'post_type' => 'nav_menu_item',
|
||||
'supports' => true,
|
||||
),
|
||||
'oembed_cache' => array(
|
||||
'post_type' => 'oembed_cache',
|
||||
'supports' => true,
|
||||
),
|
||||
'user_request' => array(
|
||||
'post_type' => 'user_request',
|
||||
'supports' => true,
|
||||
),
|
||||
'wp_block' => array(
|
||||
'post_type' => 'wp_block',
|
||||
'supports' => true,
|
||||
),
|
||||
'wp_template' => array(
|
||||
'post_type' => 'wp_template',
|
||||
'supports' => true,
|
||||
),
|
||||
'wp_template_part' => array(
|
||||
'post_type' => 'wp_template_part',
|
||||
'supports' => true,
|
||||
),
|
||||
'wp_global_styles' => array(
|
||||
'post_type' => 'wp_global_styles',
|
||||
'supports' => true,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,113 @@
|
||||
<?php
|
||||
/**
|
||||
* @group editor
|
||||
*
|
||||
* @covers ::_disable_content_editor_for_navigation_post_type
|
||||
*/
|
||||
class Tests_Editor_DisableContentEditorForNavigationPostType extends WP_UnitTestCase {
|
||||
const NAVIGATION_POST_TYPE = 'wp_navigation';
|
||||
|
||||
public function tear_down() {
|
||||
add_post_type_support( static::NAVIGATION_POST_TYPE, 'editor' );
|
||||
parent::tear_down();
|
||||
}
|
||||
|
||||
/**
|
||||
* @ticket 56266
|
||||
*/
|
||||
public function test_should_disable() {
|
||||
$post = $this->create_post( static::NAVIGATION_POST_TYPE );
|
||||
|
||||
$this->assertTrue( post_type_supports( static::NAVIGATION_POST_TYPE, 'editor' ) );
|
||||
|
||||
_disable_content_editor_for_navigation_post_type( $post );
|
||||
|
||||
$this->assertFalse( post_type_supports( static::NAVIGATION_POST_TYPE, 'editor' ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider data_should_not_disable
|
||||
* @ticket 56266
|
||||
*
|
||||
* @param string $post_type Post type to test.
|
||||
*/
|
||||
public function test_should_not_disable( $post_type ) {
|
||||
$post = $this->create_post( $post_type );
|
||||
|
||||
_disable_content_editor_for_navigation_post_type( $post );
|
||||
|
||||
$this->assertTrue( post_type_supports( $post_type, 'editor' ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Data provider.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function data_should_not_disable() {
|
||||
return array(
|
||||
'post' => array( 'post' ),
|
||||
'page' => array( 'page' ),
|
||||
'nav_menu_item' => array( 'nav_menu_item' ),
|
||||
'oembed_cache' => array( 'oembed_cache' ),
|
||||
'user_request' => array( 'user_request' ),
|
||||
'wp_block' => array( 'wp_block' ),
|
||||
'wp_template' => array( 'wp_template' ),
|
||||
'wp_template_part' => array( 'wp_template_part' ),
|
||||
'wp_global_styles' => array( 'wp_global_styles' ),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider data_should_not_change_post_type_support
|
||||
* @ticket 56266
|
||||
*
|
||||
* @param string $post_type Post type to test.
|
||||
*/
|
||||
public function test_should_not_change_post_type_support( $post_type ) {
|
||||
$post = $this->create_post( $post_type );
|
||||
|
||||
// Capture the original support.
|
||||
$before = post_type_supports( $post_type, 'editor' );
|
||||
|
||||
_disable_content_editor_for_navigation_post_type( $post );
|
||||
|
||||
// Ensure it did not change.
|
||||
$this->assertSame( $before, post_type_supports( $post_type, 'editor' ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Data provider.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function data_should_not_change_post_type_support() {
|
||||
return array(
|
||||
'post' => array( 'post' ),
|
||||
'page' => array( 'page' ),
|
||||
'attachments' => array( 'attachments' ),
|
||||
'revision' => array( 'revision' ),
|
||||
'custom_css' => array( 'custom_css' ),
|
||||
'customize_changeset' => array( 'customize_changeset' ),
|
||||
'nav_menu_item' => array( 'nav_menu_item' ),
|
||||
'oembed_cache' => array( 'oembed_cache' ),
|
||||
'user_request' => array( 'user_request' ),
|
||||
'wp_block' => array( 'wp_block' ),
|
||||
'wp_template' => array( 'wp_template' ),
|
||||
'wp_template_part' => array( 'wp_template_part' ),
|
||||
'wp_global_styles' => array( 'wp_global_styles' ),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a post.
|
||||
*
|
||||
* @param string $post_type Post type to create.
|
||||
* @return int
|
||||
*/
|
||||
private function create_post( $post_type ) {
|
||||
return $this->factory()->post->create(
|
||||
array( 'post_type' => $post_type )
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,130 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @group editor
|
||||
*
|
||||
* @covers ::_enable_content_editor_for_navigation_post_type
|
||||
*/
|
||||
class Tests_Editor_EnableContentEditorForNavigationPostType extends WP_UnitTestCase {
|
||||
const NAVIGATION_POST_TYPE = 'wp_navigation';
|
||||
|
||||
public function tear_down() {
|
||||
add_post_type_support( static::NAVIGATION_POST_TYPE, 'editor' );
|
||||
parent::tear_down();
|
||||
}
|
||||
|
||||
/**
|
||||
* @ticket 56266
|
||||
*/
|
||||
public function test_should_be_enabled_by_default() {
|
||||
$this->assertTrue( post_type_supports( static::NAVIGATION_POST_TYPE, 'editor' ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* @ticket 56266
|
||||
*/
|
||||
public function test_should_enable() {
|
||||
$post = $this->create_post( static::NAVIGATION_POST_TYPE );
|
||||
|
||||
_enable_content_editor_for_navigation_post_type( $post );
|
||||
|
||||
$this->assertTrue( post_type_supports( static::NAVIGATION_POST_TYPE, 'editor' ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* @ticket 56266
|
||||
*/
|
||||
public function test_should_reenable_when_disabled() {
|
||||
$post = $this->create_post( static::NAVIGATION_POST_TYPE );
|
||||
|
||||
// Set up the test by removing the 'editor' post type support.
|
||||
remove_post_type_support( static::NAVIGATION_POST_TYPE, 'editor' );
|
||||
$this->assertFalse( post_type_supports( static::NAVIGATION_POST_TYPE, 'editor' ) );
|
||||
|
||||
_enable_content_editor_for_navigation_post_type( $post );
|
||||
|
||||
$this->assertTrue( post_type_supports( static::NAVIGATION_POST_TYPE, 'editor' ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider data_should_not_enable
|
||||
* @ticket 56266
|
||||
*
|
||||
* @param string $post_type Post type to test.
|
||||
*/
|
||||
public function test_should_not_enable( $post_type ) {
|
||||
$post = $this->create_post( $post_type );
|
||||
|
||||
_enable_content_editor_for_navigation_post_type( $post );
|
||||
|
||||
$this->assertFalse( post_type_supports( $post_type, 'editor' ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Data provider.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function data_should_not_enable() {
|
||||
return array(
|
||||
'invalid post type' => array( 'book' ),
|
||||
'attachments' => array( 'attachments' ),
|
||||
'revision' => array( 'revision' ),
|
||||
'custom_css' => array( 'custom_css' ),
|
||||
'customize_changeset' => array( 'customize_changeset' ),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider data_should_not_change_post_type_support
|
||||
* @ticket 56266
|
||||
*
|
||||
* @param string $post_type Post type to test.
|
||||
*/
|
||||
public function test_should_not_change_post_type_support( $post_type ) {
|
||||
$post = $this->create_post( $post_type );
|
||||
|
||||
// Capture the original support.
|
||||
$before = post_type_supports( $post_type, 'editor' );
|
||||
|
||||
_enable_content_editor_for_navigation_post_type( $post );
|
||||
|
||||
// Ensure it did not change.
|
||||
$this->assertSame( $before, post_type_supports( $post_type, 'editor' ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Data provider.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function data_should_not_change_post_type_support() {
|
||||
return array(
|
||||
'post' => array( 'post' ),
|
||||
'page' => array( 'page' ),
|
||||
'attachments' => array( 'attachments' ),
|
||||
'revision' => array( 'revision' ),
|
||||
'custom_css' => array( 'custom_css' ),
|
||||
'customize_changeset' => array( 'customize_changeset' ),
|
||||
'nav_menu_item' => array( 'nav_menu_item' ),
|
||||
'oembed_cache' => array( 'oembed_cache' ),
|
||||
'user_request' => array( 'user_request' ),
|
||||
'wp_block' => array( 'wp_block' ),
|
||||
'wp_template' => array( 'wp_template' ),
|
||||
'wp_template_part' => array( 'wp_template_part' ),
|
||||
'wp_global_styles' => array( 'wp_global_styles' ),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a post.
|
||||
*
|
||||
* @param string $post_type Post type to create.
|
||||
* @return int
|
||||
*/
|
||||
private function create_post( $post_type ) {
|
||||
return $this->factory()->post->create(
|
||||
array( 'post_type' => $post_type )
|
||||
);
|
||||
}
|
||||
}
|
||||
83
tests/phpunit/tests/kses/wpFilterGlobalStylesPost.php
Normal file
83
tests/phpunit/tests/kses/wpFilterGlobalStylesPost.php
Normal file
@ -0,0 +1,83 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @group kses
|
||||
*
|
||||
* @covers ::wp_filter_global_styles_post
|
||||
*/
|
||||
class Tests_Kses_WpFilterGlobalStylesPost extends WP_UnitTestCase {
|
||||
|
||||
/**
|
||||
* Theme data.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
private $user_theme_data = array(
|
||||
'isGlobalStylesUserThemeJSON' => 1,
|
||||
'version' => 1,
|
||||
'styles' => array(
|
||||
'blocks' => array(
|
||||
'core/button' => array(
|
||||
'border' => array(
|
||||
'radius' => '0',
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
/**
|
||||
* @dataProvider data_should_not_remove_safe_global_style_rules
|
||||
* @ticket 56266
|
||||
*
|
||||
* @param string $rule A rule to test.
|
||||
*/
|
||||
public function test_should_not_remove_safe_global_style_rules( $rule ) {
|
||||
$theme_data = wp_parse_args( $this->user_theme_data, array( $rule => 'someValue' ) );
|
||||
$filtered_user_theme_json = $this->filter_global_styles( $theme_data );
|
||||
$safe_rules = array_keys( $theme_data );
|
||||
foreach ( $safe_rules as $safe_rule ) {
|
||||
$this->assertArrayHasKey( $safe_rule, $filtered_user_theme_json, sprintf( 'wp_filter_global_styles_post() must not remove the "%s" rule as it\'s considered safe.', $safe_rule ) );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Data provider.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function data_should_not_remove_safe_global_style_rules() {
|
||||
$result = array();
|
||||
foreach ( WP_Theme_JSON::VALID_TOP_LEVEL_KEYS as $safe_rule ) {
|
||||
$result[ $safe_rule ] = array( $safe_rule );
|
||||
}
|
||||
|
||||
// Settings always get removed.
|
||||
unset( $result['settings'] );
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* @ticket 56266
|
||||
*/
|
||||
public function test_should_remove_unsafe_global_style_rules() {
|
||||
$filtered_user_theme_json = $this->filter_global_styles( $this->user_theme_data );
|
||||
$this->assertArrayNotHasKey( 'nonSchemaRule', $filtered_user_theme_json, 'Filtered json data must not contain unsafe global style rules.' );
|
||||
}
|
||||
|
||||
/**
|
||||
* This is a helper method.
|
||||
* It filters JSON theme data and returns it as an array.
|
||||
*
|
||||
* @param array $theme_data Theme data to filter.
|
||||
*
|
||||
* @return array Filtered theme data.
|
||||
*/
|
||||
private function filter_global_styles( $theme_data ) {
|
||||
$user_theme_json = wp_slash( wp_json_encode( $theme_data ) );
|
||||
$filtered_user_theme_json = wp_filter_global_styles_post( $user_theme_json );
|
||||
|
||||
return json_decode( wp_unslash( $filtered_user_theme_json ), true );
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user