Customize: Add unit tests for importing theme starter content.

Props welcher, westonruter.
See #38114, #38533, #38615.
Fixes #38540.

Built from https://develop.svn.wordpress.org/trunk@39276


git-svn-id: http://core.svn.wordpress.org/trunk@39216 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
Weston Ruter 2016-11-17 08:18:32 +00:00
parent 7329283f7e
commit 2cabe7aef1
3 changed files with 16 additions and 14 deletions

View File

@ -895,7 +895,7 @@ final class WP_Customize_Manager {
* @access private * @access private
* @var array * @var array
*/ */
protected $starter_content_settings_ids = array(); protected $pending_starter_content_settings_ids = array();
/** /**
* Import theme starter content into the customized state. * Import theme starter content into the customized state.
@ -953,7 +953,7 @@ final class WP_Customize_Manager {
$setting_value = $this->widgets->sanitize_widget_js_instance( $instance ); $setting_value = $this->widgets->sanitize_widget_js_instance( $instance );
if ( empty( $changeset_data[ $setting_id ] ) || ! empty( $changeset_data[ $setting_id ]['starter_content'] ) ) { if ( empty( $changeset_data[ $setting_id ] ) || ! empty( $changeset_data[ $setting_id ]['starter_content'] ) ) {
$this->set_post_value( $setting_id, $setting_value ); $this->set_post_value( $setting_id, $setting_value );
$this->starter_content_settings_ids[] = $setting_id; $this->pending_starter_content_settings_ids[] = $setting_id;
} }
$sidebar_widget_ids[] = $widget_id; $sidebar_widget_ids[] = $widget_id;
} }
@ -961,7 +961,7 @@ final class WP_Customize_Manager {
$setting_id = sprintf( 'sidebars_widgets[%s]', $sidebar_id ); $setting_id = sprintf( 'sidebars_widgets[%s]', $sidebar_id );
if ( empty( $changeset_data[ $setting_id ] ) || ! empty( $changeset_data[ $setting_id ]['starter_content'] ) ) { if ( empty( $changeset_data[ $setting_id ] ) || ! empty( $changeset_data[ $setting_id ]['starter_content'] ) ) {
$this->set_post_value( $setting_id, $sidebar_widget_ids ); $this->set_post_value( $setting_id, $sidebar_widget_ids );
$this->starter_content_settings_ids[] = $setting_id; $this->pending_starter_content_settings_ids[] = $setting_id;
} }
} }
@ -1015,7 +1015,7 @@ final class WP_Customize_Manager {
if ( empty( $changeset_data[ $setting_id ] ) || ! empty( $changeset_data[ $setting_id ]['starter_content'] ) ) { if ( empty( $changeset_data[ $setting_id ] ) || ! empty( $changeset_data[ $setting_id ]['starter_content'] ) ) {
$nav_menus_created_posts = array_unique( array_merge( $nav_menus_created_posts, wp_list_pluck( $posts, 'ID' ) ) ); $nav_menus_created_posts = array_unique( array_merge( $nav_menus_created_posts, wp_list_pluck( $posts, 'ID' ) ) );
$this->set_post_value( $setting_id, array_values( $nav_menus_created_posts ) ); $this->set_post_value( $setting_id, array_values( $nav_menus_created_posts ) );
$this->starter_content_settings_ids[] = $setting_id; $this->pending_starter_content_settings_ids[] = $setting_id;
} }
} }
@ -1056,7 +1056,7 @@ final class WP_Customize_Manager {
$this->set_post_value( $nav_menu_setting_id, array( $this->set_post_value( $nav_menu_setting_id, array(
'name' => isset( $nav_menu['name'] ) ? $nav_menu['name'] : $nav_menu_location, 'name' => isset( $nav_menu['name'] ) ? $nav_menu['name'] : $nav_menu_location,
) ); ) );
$this->starter_content_settings_ids[] = $nav_menu_setting_id; $this->pending_starter_content_settings_ids[] = $nav_menu_setting_id;
// @todo Add support for menu_item_parent. // @todo Add support for menu_item_parent.
$position = 0; $position = 0;
@ -1083,14 +1083,14 @@ final class WP_Customize_Manager {
if ( empty( $changeset_data[ $nav_menu_item_setting_id ] ) || ! empty( $changeset_data[ $nav_menu_item_setting_id ]['starter_content'] ) ) { if ( empty( $changeset_data[ $nav_menu_item_setting_id ] ) || ! empty( $changeset_data[ $nav_menu_item_setting_id ]['starter_content'] ) ) {
$this->set_post_value( $nav_menu_item_setting_id, $nav_menu_item ); $this->set_post_value( $nav_menu_item_setting_id, $nav_menu_item );
$this->starter_content_settings_ids[] = $nav_menu_item_setting_id; $this->pending_starter_content_settings_ids[] = $nav_menu_item_setting_id;
} }
} }
$setting_id = sprintf( 'nav_menu_locations[%s]', $nav_menu_location ); $setting_id = sprintf( 'nav_menu_locations[%s]', $nav_menu_location );
if ( empty( $changeset_data[ $setting_id ] ) || ! empty( $changeset_data[ $setting_id ]['starter_content'] ) ) { if ( empty( $changeset_data[ $setting_id ] ) || ! empty( $changeset_data[ $setting_id ]['starter_content'] ) ) {
$this->set_post_value( $setting_id, $nav_menu_term_id ); $this->set_post_value( $setting_id, $nav_menu_term_id );
$this->starter_content_settings_ids[] = $setting_id; $this->pending_starter_content_settings_ids[] = $setting_id;
} }
} }
@ -1102,7 +1102,7 @@ final class WP_Customize_Manager {
if ( empty( $changeset_data[ $name ] ) || ! empty( $changeset_data[ $name ]['starter_content'] ) ) { if ( empty( $changeset_data[ $name ] ) || ! empty( $changeset_data[ $name ]['starter_content'] ) ) {
$this->set_post_value( $name, $value ); $this->set_post_value( $name, $value );
$this->starter_content_settings_ids[] = $name; $this->pending_starter_content_settings_ids[] = $name;
} }
} }
@ -1114,11 +1114,11 @@ final class WP_Customize_Manager {
if ( empty( $changeset_data[ $name ] ) || ! empty( $changeset_data[ $name ]['starter_content'] ) ) { if ( empty( $changeset_data[ $name ] ) || ! empty( $changeset_data[ $name ]['starter_content'] ) ) {
$this->set_post_value( $name, $value ); $this->set_post_value( $name, $value );
$this->starter_content_settings_ids[] = $name; $this->pending_starter_content_settings_ids[] = $name;
} }
} }
if ( ! empty( $this->starter_content_settings_ids ) ) { if ( ! empty( $this->pending_starter_content_settings_ids ) ) {
if ( did_action( 'customize_register' ) ) { if ( did_action( 'customize_register' ) ) {
$this->_save_starter_content_changeset(); $this->_save_starter_content_changeset();
} else { } else {
@ -1135,14 +1135,16 @@ final class WP_Customize_Manager {
*/ */
public function _save_starter_content_changeset() { public function _save_starter_content_changeset() {
if ( empty( $this->starter_content_settings_ids ) ) { if ( empty( $this->pending_starter_content_settings_ids ) ) {
return; return;
} }
$this->save_changeset_post( array( $this->save_changeset_post( array(
'data' => array_fill_keys( $this->starter_content_settings_ids, array( 'starter_content' => true ) ), 'data' => array_fill_keys( $this->pending_starter_content_settings_ids, array( 'starter_content' => true ) ),
'starter_content' => true, 'starter_content' => true,
) ); ) );
$this->pending_starter_content_settings_ids = array();
} }
/** /**

View File

@ -1824,7 +1824,7 @@ function get_editor_stylesheets() {
*/ */
function get_theme_starter_content() { function get_theme_starter_content() {
$theme_support = get_theme_support( 'starter-content' ); $theme_support = get_theme_support( 'starter-content' );
if ( ! empty( $theme_support ) ) { if ( is_array( $theme_support ) && ! empty( $theme_support[0] ) && is_array( $theme_support[0] ) ) {
$config = $theme_support[0]; $config = $theme_support[0];
} else { } else {
$config = array(); $config = array();

View File

@ -4,7 +4,7 @@
* *
* @global string $wp_version * @global string $wp_version
*/ */
$wp_version = '4.7-beta4-39275'; $wp_version = '4.7-beta4-39276';
/** /**
* Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema. * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.