/** * Test WP_Customize_Manager::import_theme_starter_content(). * * @covers WP_Customize_Manager::import_theme_starter_content() * @covers WP_Customize_Manager::_save_starter_content_changeset() */ function test_import_theme_starter_content() { wp_set_current_user(self::$admin_user_id); register_nav_menu('top', 'Top'); add_theme_support('custom-logo'); add_theme_support('custom-header'); add_theme_support('custom-background'); $canola_file = DIR_TESTDATA . '/images/canola.jpg'; $existing_canola_attachment_id = self::factory()->attachment->create_object($canola_file, 0, array('post_mime_type' => 'image/jpeg', 'post_type' => 'attachment', 'post_name' => 'canola')); $existing_published_home_page_id = $this->factory()->post->create(array('post_name' => 'home', 'post_type' => 'page', 'post_status' => 'publish')); $existing_auto_draft_about_page_id = $this->factory()->post->create(array('post_name' => 'about', 'post_type' => 'page', 'post_status' => 'auto-draft')); global $wp_customize; $wp_customize = new WP_Customize_Manager(); $starter_content_config = array('widgets' => array('sidebar-1' => array('text_business_info', 'meta_custom' => array('meta', array('title' => 'Pre-hydrated meta widget.')))), 'nav_menus' => array('top' => array('name' => 'Menu Name', 'items' => array('link_home', 'page_about', 'page_blog', 'link_email', 'link_facebook', 'link_custom' => array('title' => 'Custom', 'url' => 'https://custom.example.com/')))), 'posts' => array('home', 'about' => array('template' => 'sample-page-template.php'), 'blog', 'custom' => array('post_type' => 'post', 'post_title' => 'Custom', 'thumbnail' => '{{waffles}}')), 'attachments' => array('waffles' => array('post_title' => 'Waffles', 'post_content' => 'Waffles Attachment Description', 'post_excerpt' => 'Waffles Attachment Caption', 'file' => DIR_TESTDATA . '/images/waffles.jpg'), 'canola' => array('post_title' => 'Canola', 'post_content' => 'Canola Attachment Description', 'post_excerpt' => 'Canola Attachment Caption', 'file' => DIR_TESTDATA . '/images/canola.jpg')), 'options' => array('blogname' => 'Starter Content Title', 'blogdescription' => 'Starter Content Tagline', 'show_on_front' => 'page', 'page_on_front' => '{{home}}', 'page_for_posts' => '{{blog}}'), 'theme_mods' => array('custom_logo' => '{{canola}}', 'header_image' => '{{waffles}}', 'background_image' => '{{waffles}}')); update_option('posts_per_page', 1); // To check #39022. add_theme_support('starter-content', $starter_content_config); $this->assertEmpty($wp_customize->unsanitized_post_values()); $wp_customize->import_theme_starter_content(); $changeset_values = $wp_customize->unsanitized_post_values(); $expected_setting_ids = array('blogname', 'blogdescription', 'custom_logo', 'header_image_data', 'background_image', 'widget_text[2]', 'widget_meta[3]', 'sidebars_widgets[sidebar-1]', 'nav_menus_created_posts', 'nav_menu[-1]', 'nav_menu_item[-1]', 'nav_menu_item[-2]', 'nav_menu_item[-3]', 'nav_menu_item[-4]', 'nav_menu_item[-5]', 'nav_menu_item[-6]', 'nav_menu_locations[top]', 'show_on_front', 'page_on_front', 'page_for_posts'); $this->assertEqualSets($expected_setting_ids, array_keys($changeset_values)); foreach (array('widget_text[2]', 'widget_meta[3]') as $setting_id) { $this->assertInternalType('array', $changeset_values[$setting_id]); $instance_data = $wp_customize->widgets->sanitize_widget_instance($changeset_values[$setting_id]); $this->assertInternalType('array', $instance_data); $this->assertArrayHasKey('title', $instance_data); } $this->assertEquals(array('text-2', 'meta-3'), $changeset_values['sidebars_widgets[sidebar-1]']); $posts_by_name = array(); $this->assertCount(6, $changeset_values['nav_menus_created_posts']); $this->assertContains($existing_published_home_page_id, $changeset_values['nav_menus_created_posts'], 'Expected reuse of non-auto-draft posts.'); $this->assertContains($existing_canola_attachment_id, $changeset_values['nav_menus_created_posts'], 'Expected reuse of non-auto-draft attachment.'); $this->assertNotContains($existing_auto_draft_about_page_id, $changeset_values['nav_menus_created_posts'], 'Expected non-reuse of auto-draft posts.'); foreach ($changeset_values['nav_menus_created_posts'] as $post_id) { $post = get_post($post_id); if ($post->ID === $existing_published_home_page_id) { $this->assertEquals('publish', $post->post_status); } elseif ($post->ID === $existing_canola_attachment_id) { $this->assertEquals('inherit', $post->post_status); } else { $this->assertEquals('auto-draft', $post->post_status); $this->assertEmpty($post->post_name); } $post_name = $post->post_name; if (empty($post_name)) { $post_name = get_post_meta($post->ID, '_customize_draft_post_name', true); } $posts_by_name[$post_name] = $post->ID; } $this->assertEquals(array('waffles', 'canola', 'home', 'about', 'blog', 'custom'), array_keys($posts_by_name)); $this->assertEquals('Custom', get_post($posts_by_name['custom'])->post_title); $this->assertEquals('sample-page-template.php', get_page_template_slug($posts_by_name['about'])); $this->assertEquals('', get_page_template_slug($posts_by_name['blog'])); $this->assertEquals($posts_by_name['waffles'], get_post_thumbnail_id($posts_by_name['custom'])); $this->assertEquals('', get_post_thumbnail_id($posts_by_name['blog'])); $attachment_metadata = wp_get_attachment_metadata($posts_by_name['waffles']); $this->assertEquals('Waffles', get_post($posts_by_name['waffles'])->post_title); $this->assertEquals('waffles', get_post_meta($posts_by_name['waffles'], '_customize_draft_post_name', true)); $this->assertArrayHasKey('file', $attachment_metadata); $this->assertContains('waffles', $attachment_metadata['file']); $this->assertEquals('page', $changeset_values['show_on_front']); $this->assertEquals($posts_by_name['home'], $changeset_values['page_on_front']); $this->assertEquals($posts_by_name['blog'], $changeset_values['page_for_posts']); $this->assertEquals(-1, $changeset_values['nav_menu_locations[top]']); $this->assertEquals(0, $changeset_values['nav_menu_item[-1]']['object_id']); $this->assertEquals('custom', $changeset_values['nav_menu_item[-1]']['type']); $this->assertEquals(home_url(), $changeset_values['nav_menu_item[-1]']['url']); $this->assertEmpty($wp_customize->changeset_data()); $this->assertNull($wp_customize->changeset_post_id()); $this->assertEquals(1000, has_action('customize_register', array($wp_customize, '_save_starter_content_changeset'))); do_action('customize_register', $wp_customize); // This will trigger the changeset save. $this->assertInternalType('int', $wp_customize->changeset_post_id()); $this->assertNotEmpty($wp_customize->changeset_data()); foreach ($wp_customize->changeset_data() as $setting_id => $setting_params) { $this->assertArrayHasKey('starter_content', $setting_params); $this->assertTrue($setting_params['starter_content']); } // Ensure that re-importing doesn't cause auto-drafts to balloon. $wp_customize->import_theme_starter_content(); $changeset_data = $wp_customize->changeset_data(); $this->assertEqualSets(array_values($posts_by_name), $changeset_data['nav_menus_created_posts']['value']); // Auto-drafts should not get re-created and amended with each import. // Test that saving non-starter content on top of the changeset clears the starter_content flag. $wp_customize->save_changeset_post(array('data' => array('blogname' => array('value' => 'Starter Content Modified')))); $changeset_data = $wp_customize->changeset_data(); $this->assertArrayNotHasKey('starter_content', $changeset_data['blogname']); $this->assertArrayHasKey('starter_content', $changeset_data['blogdescription']); // Test that adding blogname starter content is ignored now that it is modified, but updating a non-modified starter content blog description passes. $previous_blogname = $changeset_data['blogname']['value']; $previous_blogdescription = $changeset_data['blogdescription']['value']; $wp_customize->import_theme_starter_content(array('options' => array('blogname' => 'Newer Starter Content Title', 'blogdescription' => 'Newer Starter Content Description'))); $changeset_data = $wp_customize->changeset_data(); $this->assertEquals($previous_blogname, $changeset_data['blogname']['value']); $this->assertArrayNotHasKey('starter_content', $changeset_data['blogname']); $this->assertNotEquals($previous_blogdescription, $changeset_data['blogdescription']['value']); $this->assertArrayHasKey('starter_content', $changeset_data['blogdescription']); // Publish. $this->assertEmpty(get_custom_logo()); $this->assertEmpty(get_header_image()); $this->assertEmpty(get_background_image()); $this->assertEmpty(get_theme_mod('custom_logo')); $this->assertEmpty(get_theme_mod('header_image')); $this->assertEmpty(get_theme_mod('background_image')); $this->assertEquals('auto-draft', get_post($posts_by_name['about'])->post_status); $this->assertEquals('auto-draft', get_post($posts_by_name['waffles'])->post_status); $this->assertNotEquals($changeset_data['blogname']['value'], get_option('blogname')); $r = $wp_customize->save_changeset_post(array('status' => 'publish')); $this->assertInternalType('array', $r); $this->assertEquals('publish', get_post($posts_by_name['about'])->post_status); $this->assertEquals('inherit', get_post($posts_by_name['waffles'])->post_status); $this->assertEquals($changeset_data['blogname']['value'], get_option('blogname')); $this->assertNotEmpty(get_theme_mod('custom_logo')); $this->assertNotEmpty(get_theme_mod('header_image')); $this->assertNotEmpty(get_theme_mod('background_image')); $this->assertNotEmpty(get_custom_logo()); $this->assertNotEmpty(get_header_image()); $this->assertNotEmpty(get_background_image()); $this->assertContains('canola', get_custom_logo()); $this->assertContains('waffles', get_header_image()); $this->assertContains('waffles', get_background_image()); $this->assertEquals('waffles', get_post($posts_by_name['waffles'])->post_name); $this->assertEmpty(get_post_meta($posts_by_name['waffles'], '_customize_draft_post_name', true)); }
/** * Test WP_Customize_Manager::changeset_data(). * * @ticket 30937 * @covers WP_Customize_Manager::changeset_data() */ function test_changeset_data() { $uuid = wp_generate_uuid4(); $wp_customize = new WP_Customize_Manager(array('changeset_uuid' => $uuid)); $this->assertEquals(array(), $wp_customize->changeset_data()); $uuid = wp_generate_uuid4(); $data = array('blogname' => array('value' => 'Hello World')); $this->factory()->post->create(array('post_name' => $uuid, 'post_type' => 'customize_changeset', 'post_status' => 'auto-draft', 'post_content' => wp_json_encode($data))); $wp_customize = new WP_Customize_Manager(array('changeset_uuid' => $uuid)); $this->assertEquals($data, $wp_customize->changeset_data()); }