WordPress.org

Make WordPress Core


Ignore:
Timestamp:
11/17/2016 08:17:57 AM (19 months ago)
Author:
westonruter
Message:

Customize: Add unit tests for importing theme starter content.

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tests/phpunit/tests/customize/manager.php

    r39181 r39276  
    164164        $this->assertContains( 'Invalid changeset UUID', $exception->getMessage() );
    165165
     166        update_option( 'fresh_site', 0 );
    166167        $wp_customize = new WP_Customize_Manager();
    167168        $wp_customize->setup_theme();
     169        $this->assertFalse( has_action( 'after_setup_theme', array( $wp_customize, 'import_theme_starter_content' ) ) );
     170
     171        // Make sure that starter content import gets queued on a fresh site.
     172        update_option( 'fresh_site', 1 );
     173        $wp_customize->setup_theme();
     174        $this->assertEquals( 100, has_action( 'after_setup_theme', array( $wp_customize, 'import_theme_starter_content' ) ) );
    168175    }
    169176
     
    297304        $wp_customize = new WP_Customize_Manager( array( 'changeset_uuid' => $uuid ) );
    298305        $this->assertEquals( $data, $wp_customize->changeset_data() );
     306    }
     307
     308    /**
     309     * Test WP_Customize_Manager::import_theme_starter_content().
     310     *
     311     * @covers WP_Customize_Manager::import_theme_starter_content()
     312     * @covers WP_Customize_Manager::_save_starter_content_changeset()
     313     */
     314    function test_import_theme_starter_content() {
     315        wp_set_current_user( self::$admin_user_id );
     316
     317        global $wp_customize;
     318        $wp_customize = new WP_Customize_Manager();
     319        $starter_content_config = array(
     320            'widgets' => array(
     321                'sidebar-1' => array(
     322                    'text_business_info',
     323                    'meta_custom' => array( 'meta', array(
     324                        'title' => 'Pre-hydrated meta widget.',
     325                    ) ),
     326                ),
     327            ),
     328            'nav_menus' => array(
     329                'top' => array(
     330                    'name'  => 'Menu Name',
     331                    'items' => array(
     332                        'page_home',
     333                        'page_about',
     334                        'page_blog',
     335                        'link_email',
     336                        'link_facebook',
     337                        'link_custom' => array(
     338                            'title' => 'Custom',
     339                            'url' => 'https://custom.example.com/',
     340                        ),
     341                    ),
     342                ),
     343            ),
     344            'posts' => array(
     345                'home',
     346                'about',
     347                'blog',
     348                'custom' => array(
     349                    'post_type' => 'post',
     350                    'post_title' => 'Custom',
     351                ),
     352            ),
     353            'options' => array(
     354                'blogname' => 'Starter Content Title',
     355                'blogdescription' => 'Starter Content Tagline',
     356                'show_on_front'  => 'page',
     357                'page_on_front'  => '{{home}}',
     358                'page_for_posts' => '{{blog}}',
     359            ),
     360        );
     361
     362        add_theme_support( 'starter-content', $starter_content_config );
     363        $this->assertEmpty( $wp_customize->unsanitized_post_values() );
     364        $wp_customize->import_theme_starter_content();
     365        $changeset_values = $wp_customize->unsanitized_post_values();
     366        $expected_setting_ids = array(
     367            'blogname',
     368            'blogdescription',
     369            'widget_text[2]',
     370            'widget_meta[3]',
     371            'sidebars_widgets[sidebar-1]',
     372            'nav_menus_created_posts',
     373            'nav_menu[-1]',
     374            'nav_menu_item[-1]',
     375            'nav_menu_item[-2]',
     376            'nav_menu_item[-3]',
     377            'nav_menu_item[-4]',
     378            'nav_menu_item[-5]',
     379            'nav_menu_item[-6]',
     380            'nav_menu_locations[top]',
     381            'show_on_front',
     382            'page_on_front',
     383            'page_for_posts',
     384        );
     385        $this->assertEqualSets( $expected_setting_ids, array_keys( $changeset_values ) );
     386
     387        foreach ( array( 'widget_text[2]', 'widget_meta[3]' ) as $setting_id ) {
     388            $this->assertInternalType( 'array', $changeset_values[ $setting_id ] );
     389            $instance_data = $wp_customize->widgets->sanitize_widget_instance( $changeset_values[ $setting_id ] );
     390            $this->assertInternalType( 'array', $instance_data );
     391            $this->assertArrayHasKey( 'title', $instance_data );
     392        }
     393
     394        $this->assertEquals( array( 'text-2', 'meta-3' ), $changeset_values['sidebars_widgets[sidebar-1]'] );
     395
     396        $posts_by_name = array();
     397        foreach ( $changeset_values['nav_menus_created_posts'] as $post_id ) {
     398            $post = get_post( $post_id );
     399            $this->assertEquals( 'auto-draft', $post->post_status );
     400            $posts_by_name[ $post->post_name ] = $post->ID;
     401        }
     402
     403        $this->assertEquals( 'page', $changeset_values['show_on_front'] );
     404        $this->assertEquals( $posts_by_name['home'], $changeset_values['page_on_front'] );
     405        $this->assertEquals( $posts_by_name['blog'], $changeset_values['page_for_posts'] );
     406
     407        $this->assertEquals( -1, $changeset_values['nav_menu_locations[top]'] );
     408        $this->assertEquals( $posts_by_name['home'], $changeset_values['nav_menu_item[-1]']['object_id'] );
     409
     410        $this->assertEmpty( $wp_customize->changeset_data() );
     411        $this->assertNull( $wp_customize->changeset_post_id() );
     412        $this->assertEquals( 1000, has_action( 'customize_register', array( $wp_customize, '_save_starter_content_changeset' ) ) );
     413        do_action( 'customize_register', $wp_customize ); // This will trigger the changeset save.
     414        $this->assertInternalType( 'int', $wp_customize->changeset_post_id() );
     415        $this->assertNotEmpty( $wp_customize->changeset_data() );
     416        foreach ( $wp_customize->changeset_data() as $setting_id => $setting_params ) {
     417            $this->assertArrayHasKey( 'starter_content', $setting_params );
     418            $this->assertTrue( $setting_params['starter_content'] );
     419        }
     420
     421        // Test that saving non-starter content on top of the changeset clears the starter_content flag.
     422        $wp_customize->save_changeset_post( array(
     423            'data' => array(
     424                'blogname' => array( 'value' => 'Starter Content Modified' ),
     425            ),
     426        ) );
     427        $changeset_data = $wp_customize->changeset_data();
     428        $this->assertArrayNotHasKey( 'starter_content', $changeset_data['blogname'] );
     429        $this->assertArrayHasKey( 'starter_content', $changeset_data['blogdescription'] );
     430
     431        // Test that adding blogname starter content is ignored now that it is modified, but updating a non-modified starter content blog description passes.
     432        $previous_blogname = $changeset_data['blogname']['value'];
     433        $previous_blogdescription = $changeset_data['blogdescription']['value'];
     434        $wp_customize->import_theme_starter_content( array(
     435            'options' => array(
     436                'blogname' => 'Newer Starter Content Title',
     437                'blogdescription' => 'Newer Starter Content Description',
     438            ),
     439        ) );
     440        $changeset_data = $wp_customize->changeset_data();
     441        $this->assertEquals( $previous_blogname, $changeset_data['blogname']['value'] );
     442        $this->assertArrayNotHasKey( 'starter_content', $changeset_data['blogname'] );
     443        $this->assertNotEquals( $previous_blogdescription, $changeset_data['blogdescription']['value'] );
     444        $this->assertArrayHasKey( 'starter_content', $changeset_data['blogdescription'] );
    299445    }
    300446
Note: See TracChangeset for help on using the changeset viewer.