WordPress.org

Make WordPress Core

Ticket #39693: 39693-tests.2.diff

File 39693-tests.2.diff, 9.7 KB (added by obenland, 9 months ago)

Updated tests for original retrieve_widgets().

  • tests/phpunit/tests/widgets.php

     
    678678
    679679        }
    680680
     681        /**
     682         * Register nav menu sidebars.
     683         *
     684         * @param array $sidebars Sidebar slugs.
     685         */
     686        function register_sidebars( $sidebars ) {
     687                foreach ( $sidebars as $sidebar ) {
     688                        register_sidebar( array( 'id' => $sidebar ) );
     689                }
     690        }
     691
     692        /**
     693         * Tests for when 'sidebars_widgets' theme mod is populated.
     694         *
     695         * @covers retrieve_widgets()
     696         */
     697        function test_retrieve_widgets_with_theme_mod() {
     698                global $sidebars_widgets, $_wp_sidebars_widgets;
     699
     700                wp_widgets_init();
     701                $this->register_sidebars( array( 'sidebar-1', 'sidebar-2','sidebar-3', 'wp_inactive_widgets' ) );
     702
     703                set_theme_mod( 'sidebars_widgets', array(
     704                        'time' => time(),
     705                        'data' => array(
     706                                'sidebar-1' => array( 'tag_cloud-1' ),
     707                                'sidebar-2' => array( 'text-1' ),
     708                                'sidebar-3' => array( 'unregistered_widget-1' ),
     709                                'fantasy'   => array( 'archives-2' ),
     710                                'wp_inactive_widgets' => array(),
     711                        ),
     712                ) );
     713
     714                $result = retrieve_widgets( true );
     715
     716                $_wp_sidebars_widgets = array();
     717                $this->assertInternalType( 'array', $result );
     718                $this->assertNotEmpty( $result );
     719
     720                foreach ( $sidebars_widgets as $widgets ) {
     721                        $this->assertInternalType( 'array', $widgets );
     722                }
     723
     724                $this->assertContains( 'tag_cloud-1', $sidebars_widgets['sidebar-1'] );
     725                $this->assertContains( 'text-1', $sidebars_widgets['sidebar-2'] );
     726                $this->assertContains( 'archives-2', $sidebars_widgets['orphaned_widgets_1'] );
     727
     728                // Unregistered widget should be filtered out.
     729                $this->assertEmpty( $sidebars_widgets['sidebar-3'] );
     730
     731                // 6 default widgets - 1 active text widget = 5.
     732                $this->assertCount( 5, $sidebars_widgets['wp_inactive_widgets'] );
     733                $this->assertContains( 'meta-2',            $sidebars_widgets['wp_inactive_widgets'] );
     734                $this->assertContains( 'search-2',          $sidebars_widgets['wp_inactive_widgets'] );
     735                $this->assertContains( 'categories-2',      $sidebars_widgets['wp_inactive_widgets'] );
     736                $this->assertContains( 'recent-posts-2',    $sidebars_widgets['wp_inactive_widgets'] );
     737                $this->assertContains( 'recent-comments-2', $sidebars_widgets['wp_inactive_widgets'] );
     738
     739                // Theme mode with previous widgets was removed.
     740                $this->assertFalse( get_theme_mod( 'sidebars_widgets' ) );
     741
     742                // Sidebar_widgets option was updated.
     743                $this->assertEquals( $sidebars_widgets, wp_get_sidebars_widgets() );
     744        }
     745
     746        /**
     747         * Tests for when sidebars widgets matches registered sidebars.
     748         *
     749         * @covers retrieve_widgets()
     750         */
     751        function test_retrieve_widgets_with_sidebars_widgets_matching_registered_sidebars() {
     752                global $sidebars_widgets;
     753
     754                wp_widgets_init();
     755                $this->register_sidebars( array( 'sidebar-1', 'sidebar-2','sidebar-3', 'wp_inactive_widgets' ) );
     756
     757                $sidebars_widgets = array(
     758                        'sidebar-1' => array( 'tag_cloud-1' ),
     759                        'sidebar-2' => array( 'text-1' ),
     760                        'sidebar-3' => array( 'custom_widget-1' ),
     761                        'wp_inactive_widgets' => array(),
     762                );
     763
     764                $result = retrieve_widgets( true );
     765
     766                // $sidebars_widgets matches registered sidebars.
     767                $this->assertNull( $result );
     768
     769                foreach ( $sidebars_widgets as $widgets ) {
     770                        $this->assertInternalType( 'array', $widgets );
     771                }
     772
     773                $this->assertContains( 'tag_cloud-1', $sidebars_widgets['sidebar-1'] );
     774                $this->assertContains( 'text-1', $sidebars_widgets['sidebar-2'] );
     775
     776                // No widget validity check when $sidebars_widgets matches registered sidebars.
     777                $this->assertContains( 'custom_widget-1', $sidebars_widgets['sidebar-3'] );
     778
     779                // No lost widgets when $sidebars_widgets matches registered sidebars.
     780                $this->assertEmpty( $sidebars_widgets['wp_inactive_widgets'] );
     781        }
     782
     783        /**
     784         * Tests for when sidebars widgets doesn't match registered sidebars.
     785         *
     786         * @covers retrieve_widgets()
     787         */
     788        function test_retrieve_widgets_with_sidebars_widgets_not_matching_registered_sidebars() {
     789                global $sidebars_widgets, $_wp_sidebars_widgets;
     790
     791                wp_widgets_init();
     792                $this->register_sidebars( array( 'sidebar-1', 'sidebar-2','sidebar-3', 'wp_inactive_widgets' ) );
     793
     794                $sidebars_widgets = array(
     795                        'sidebar-1' => array( 'tag_cloud-1' ),
     796                        'sidebar-2' => array( 'text-1' ),
     797                        'fantasy'   => array( 'unregistered_widget-1' ),
     798                        'wp_inactive_widgets' => array(),
     799                );
     800
     801                // Theme changed.
     802                $result = retrieve_widgets( true );
     803
     804                $_wp_sidebars_widgets = array();
     805                $this->assertInternalType( 'array', $result );
     806                $this->assertNotEmpty( $result );
     807
     808                foreach ( $sidebars_widgets as $widgets ) {
     809                        $this->assertInternalType( 'array', $widgets );
     810                }
     811
     812                // Current theme doesn't have a fantasy-sidebar.
     813                $this->assertArrayNotHasKey( 'fantasy', $sidebars_widgets );
     814                $this->assertArrayHasKey( 'sidebar-3', $sidebars_widgets );
     815
     816                $this->assertContains( 'tag_cloud-1', $sidebars_widgets['sidebar-1'] );
     817                $this->assertContains( 'text-1', $sidebars_widgets['sidebar-2'] );
     818                $this->assertEmpty( $sidebars_widgets['sidebar-3'] );
     819
     820                // We should not have orphaned widgets, because widget was not registered.
     821                $this->assertArrayNotHasKey( 'orphaned_widgets_1', $sidebars_widgets );
     822
     823                // 6 default widgets.
     824                $this->assertCount( 6, $sidebars_widgets['wp_inactive_widgets'] );
     825
     826                $this->assertContains( 'archives-2',        $sidebars_widgets['wp_inactive_widgets'] );
     827                $this->assertContains( 'meta-2',            $sidebars_widgets['wp_inactive_widgets'] );
     828                $this->assertContains( 'search-2',          $sidebars_widgets['wp_inactive_widgets'] );
     829                $this->assertContains( 'categories-2',      $sidebars_widgets['wp_inactive_widgets'] );
     830                $this->assertContains( 'recent-posts-2',    $sidebars_widgets['wp_inactive_widgets'] );
     831                $this->assertContains( 'recent-comments-2', $sidebars_widgets['wp_inactive_widgets'] );
     832
     833                // Sidebar_widgets option was updated.
     834                $this->assertEquals( $sidebars_widgets, wp_get_sidebars_widgets() );
     835
     836                // Reset.
     837                $sidebars_widgets = array(
     838                        'sidebar-1' => array( 'tag_cloud-1' ),
     839                        'sidebar-2' => array( 'text-1' ),
     840                        'fantasy'   => array( 'archives-2' ),
     841                        'wp_inactive_widgets' => array(),
     842                );
     843
     844                // Theme did not change.
     845                $result = retrieve_widgets();
     846
     847                $_wp_sidebars_widgets = array();
     848                $this->assertInternalType( 'array', $result );
     849                $this->assertNotEmpty( $result );
     850
     851                foreach ( $sidebars_widgets as $widgets ) {
     852                        $this->assertInternalType( 'array', $widgets );
     853                }
     854
     855                /*
     856                 * Only returns intersection of registered sidebars and saved sidebars,
     857                 * so neither fantasy-sidebar nor sidebar-3 will make the cut.
     858                 */
     859                $this->assertArrayNotHasKey( 'fantasy', $sidebars_widgets );
     860                $this->assertArrayNotHasKey( 'sidebar-3', $sidebars_widgets );
     861
     862                // archives-2 ends up as an orphan because of the above behavior.
     863                $this->assertContains( 'archives-2', $sidebars_widgets['orphaned_widgets_1'] );
     864                $this->assertContains( 'tag_cloud-1', $sidebars_widgets['sidebar-1'] );
     865                $this->assertContains( 'text-1', $sidebars_widgets['sidebar-2'] );
     866
     867                // 6 default widgets - 1 active text widget = 5.
     868                $this->assertCount( 5, $sidebars_widgets['wp_inactive_widgets'] );
     869
     870                $this->assertContains( 'meta-2',            $sidebars_widgets['wp_inactive_widgets'] );
     871                $this->assertContains( 'search-2',          $sidebars_widgets['wp_inactive_widgets'] );
     872                $this->assertContains( 'categories-2',      $sidebars_widgets['wp_inactive_widgets'] );
     873                $this->assertContains( 'recent-posts-2',    $sidebars_widgets['wp_inactive_widgets'] );
     874                $this->assertContains( 'recent-comments-2', $sidebars_widgets['wp_inactive_widgets'] );
     875
     876                // Sidebar_widgets option was updated.
     877                $this->assertEquals( $sidebars_widgets, wp_get_sidebars_widgets() );
     878        }
     879
     880        /**
     881         * Tests for Customizer mode.
     882         *
     883         * @covers retrieve_widgets()
     884         */
     885        function test_retrieve_widgets_for_customizer() {
     886                global $sidebars_widgets, $_wp_sidebars_widgets;
     887
     888                wp_widgets_init();
     889                $this->register_sidebars( array( 'sidebar-1', 'sidebar-2','sidebar-3', 'wp_inactive_widgets' ) );
     890
     891                $old_sidebars_widgets = array(
     892                        'time' => time(),
     893                        'data' => array(
     894                                'sidebar-1' => array( 'tag_cloud-1' ),
     895                                'sidebar-2' => array( 'text-1' ),
     896                                'sidebar-3' => array( 'unregistered_widget-1' ),
     897                                'fantasy'   => array( 'archives-2' ),
     898                                'wp_inactive_widgets' => array(),
     899                        ),
     900                );
     901                set_theme_mod( 'sidebars_widgets', $old_sidebars_widgets );
     902
     903                $result = retrieve_widgets( 'customize' );
     904
     905                $_wp_sidebars_widgets = array();
     906                $this->assertInternalType( 'array', $result );
     907                $this->assertNotEmpty( $result );
     908
     909                foreach ( $sidebars_widgets as $widgets ) {
     910                        $this->assertInternalType( 'array', $widgets );
     911                }
     912
     913                $this->assertContains( 'tag_cloud-1', $sidebars_widgets['sidebar-1'] );
     914                $this->assertContains( 'text-1', $sidebars_widgets['sidebar-2'] );
     915                $this->assertContains( 'archives-2', $sidebars_widgets['orphaned_widgets_1'] );
     916                $this->assertArrayHasKey( 'sidebar-3', $sidebars_widgets );
     917                $this->assertEmpty( $sidebars_widgets['sidebar-3'] );
     918                $this->assertCount( 5, $sidebars_widgets['wp_inactive_widgets'] );
     919
     920                $this->assertContains( 'meta-2',            $sidebars_widgets['wp_inactive_widgets'] );
     921                $this->assertContains( 'search-2',          $sidebars_widgets['wp_inactive_widgets'] );
     922                $this->assertContains( 'categories-2',      $sidebars_widgets['wp_inactive_widgets'] );
     923                $this->assertContains( 'recent-posts-2',    $sidebars_widgets['wp_inactive_widgets'] );
     924                $this->assertContains( 'recent-comments-2', $sidebars_widgets['wp_inactive_widgets'] );
     925
     926                // Theme mod with previous widgets was not removed.
     927                $this->assertEqualSets( $old_sidebars_widgets, get_theme_mod( 'sidebars_widgets' ) );
     928
     929                // Sidebar_widgets option was not updated.
     930                $this->assertNotEquals( $sidebars_widgets, wp_get_sidebars_widgets() );
     931        }
    681932}