Skip to:
Content

bbPress.org

Changeset 7761


Ignore:
Timestamp:
09/30/2026 10:05:18 AM (4 weeks ago)
Author:
johnjamesjacoby
Message:

Tests: Cover core abstraction contracts.

Replace six incomplete helper tests and add coverage for pagination, site switching, interception, setup reuse, and date and version behavior.

In trunk, for 2.7.
See #3695.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tests/phpunit/testcases/core/abstraction.php

    r7467 r7761  
    1010
    1111        /**
     12         * @covers ::bbp_setup_admin
     13         * @covers ::bbp_setup_converter
     14         */
     15        public function test_bbp_setup_admin_and_converter_are_reused() {
     16                $admin = bbp_setup_admin();
     17
     18                $this->assertInstanceOf( 'BBP_Admin', $admin );
     19                $this->assertSame( $admin, bbpress()->admin );
     20                $this->assertSame( $admin, bbp_setup_admin() );
     21
     22                $converter = bbp_setup_converter();
     23                $this->assertInstanceOf( 'BBP_Converter', $converter );
     24                $this->assertSame( $converter, $admin->converter );
     25                $this->assertSame( $converter, bbp_setup_converter() );
     26        }
     27
     28        /**
    1229         * @covers ::bbp_get_global_object
    13          * @todo   Implement test_bbp_get_global_object().
    1430         */
    1531        public function test_bbp_get_global_object() {
    16                 // Remove the following lines when you implement this test.
    17                 $this->markTestIncomplete(
    18                         'This test has not been implemented yet.'
    19                 );
     32                $name   = 'bbp_test_global_object';
     33                $object = new stdClass();
     34                $filter = function( $value, $global_name, $type, $default ) use ( $name, $object ) {
     35                        $this->assertSame( $name, $global_name );
     36                        $this->assertSame( 'stdClass', $type );
     37                        $this->assertSame( 'fallback', $default );
     38                        $this->assertSame( $object, $value );
     39                        return 'filtered';
     40                };
     41
     42                try {
     43                        $this->assertSame( 'fallback', bbp_get_global_object( '', '', 'fallback' ) );
     44                        $this->assertSame( 'fallback', bbp_get_global_object( $name, '', 'fallback' ) );
     45
     46                        $GLOBALS[ $name ] = null;
     47                        $this->assertSame( 'fallback', bbp_get_global_object( $name, '', 'fallback' ) );
     48
     49                        $GLOBALS[ $name ] = $object;
     50                        $this->assertSame( $object, bbp_get_global_object( $name ) );
     51                        $this->assertSame( 'fallback', bbp_get_global_object( $name, 'WP_Query', 'fallback' ) );
     52
     53                        add_filter( 'bbp_get_global_object', $filter, 10, 4 );
     54                        $this->assertSame( 'filtered', bbp_get_global_object( $name, 'stdClass', 'fallback' ) );
     55                } finally {
     56                        remove_filter( 'bbp_get_global_object', $filter, 10 );
     57                        unset( $GLOBALS[ $name ] );
     58                }
     59        }
     60
     61        /**
     62         * @covers ::bbp_get_wp_query
     63         */
     64        public function test_bbp_get_wp_query() {
     65                $this->assertSame( $GLOBALS['wp_query'], bbp_get_wp_query() );
     66        }
     67
     68        /**
     69         * @covers ::bbp_get_wp_roles
     70         */
     71        public function test_bbp_get_wp_roles() {
     72                $this->assertSame( $GLOBALS['wp_roles'], bbp_get_wp_roles() );
    2073        }
    2174
    2275        /**
    2376         * @covers ::bbp_db
    24          * @todo   Implement test_bbp_db().
    2577         */
    2678        public function test_bbp_db() {
    27                 // Remove the following lines when you implement this test.
    28                 $this->markTestIncomplete(
    29                         'This test has not been implemented yet.'
    30                 );
     79                $this->assertSame( $GLOBALS['wpdb'], bbp_db() );
    3180        }
    3281
    … …  
    110159                $this->assertTrue( bbp_bump_count_meta( 'user', $user_id, '_bbp_test_count', 1 ) );
    111160                $this->assertSame( 1, (int) get_user_meta( $user_id, '_bbp_test_count', true ) );
     161                $this->assertTrue( bbp_bump_count_meta( 'user', $user_id, '_bbp_test_count', 1 ) );
     162                $this->assertSame( 2, (int) get_user_meta( $user_id, '_bbp_test_count', true ) );
    112163                $this->assertTrue( bbp_bump_count_meta( 'term', $term_id, '_bbp_test_count', 2 ) );
    113164                $this->assertSame( 2, (int) get_term_meta( $term_id, '_bbp_test_count', true ) );
     165                $this->assertTrue( bbp_bump_count_meta( 'term', $term_id, '_bbp_test_count', 2 ) );
     166                $this->assertSame( 4, (int) get_term_meta( $term_id, '_bbp_test_count', true ) );
    114167                $this->assertTrue( bbp_bump_count_meta( 'comment', $comment_id, '_bbp_test_count', 3 ) );
    115168                $this->assertSame( 3, (int) get_comment_meta( $comment_id, '_bbp_test_count', true ) );
     169                $this->assertTrue( bbp_bump_count_meta( 'comment', $comment_id, '_bbp_test_count', 3 ) );
     170                $this->assertSame( 6, (int) get_comment_meta( $comment_id, '_bbp_test_count', true ) );
    116171        }
    117172
    … …  
    375430        /**
    376431         * @covers ::bbp_rewrite
    377          * @todo   Implement test_bbp_rewrite().
    378432         */
    379433        public function test_bbp_rewrite() {
    380                 // Remove the following lines when you implement this test.
    381                 $this->markTestIncomplete(
    382                         'This test has not been implemented yet.'
    383                 );
     434                $filter = function( $value, $name, $type, $default ) {
     435                        if ( 'wp_rewrite' === $name ) {
     436                                $this->assertSame( 'WP_Rewrite', $type );
     437                                $this->assertSame( '', $default->root );
     438                                $this->assertSame( 'page', $default->pagination_base );
     439                        }
     440
     441                        return $value;
     442                };
     443
     444                add_filter( 'bbp_get_global_object', $filter, 10, 4 );
     445                try {
     446                        $this->assertSame( $GLOBALS['wp_rewrite'], bbp_rewrite() );
     447
     448                        $rewrite = $GLOBALS['wp_rewrite'];
     449                        unset( $GLOBALS['wp_rewrite'] );
     450                        try {
     451                                $fallback = bbp_rewrite();
     452                                $this->assertSame( '', $fallback->root );
     453                                $this->assertSame( 'page', $fallback->pagination_base );
     454                        } finally {
     455                                $GLOBALS['wp_rewrite'] = $rewrite;
     456                        }
     457                } finally {
     458                        remove_filter( 'bbp_get_global_object', $filter, 10 );
     459                }
    384460        }
    385461
    386462        /**
    387463         * @covers ::bbp_get_root_url
    388          * @todo   Implement test_bbp_get_root_url().
    389464         */
    390465        public function test_bbp_get_root_url() {
    391                 // Remove the following lines when you implement this test.
    392                 $this->markTestIncomplete(
    393                         'This test has not been implemented yet.'
    394                 );
     466                $this->assertSame( '', bbp_get_root_url() );
     467
     468                $rewrite_filter = function() {
     469                        return new stdClass();
     470                };
     471
     472                add_filter( 'bbp_get_global_object', $rewrite_filter );
     473                try {
     474                        $this->assertSame( '', bbp_get_root_url() );
     475                } finally {
     476                        remove_filter( 'bbp_get_global_object', $rewrite_filter );
     477                }
     478
     479                $filter = function() {
     480                        return '/filtered/';
     481                };
     482
     483                add_filter( 'bbp_get_root_url', $filter );
     484                try {
     485                        $this->assertSame( '/filtered/', bbp_get_root_url() );
     486                } finally {
     487                        remove_filter( 'bbp_get_root_url', $filter );
     488                }
    395489        }
    396490
    397491        /**
    398492         * @covers ::bbp_get_paged_slug
    399          * @todo   Implement test_bbp_get_paged_slug().
    400493         */
    401494        public function test_bbp_get_paged_slug() {
    402                 // Remove the following lines when you implement this test.
    403                 $this->markTestIncomplete(
    404                         'This test has not been implemented yet.'
    405                 );
     495                $this->assertSame( 'page', bbp_get_paged_slug() );
     496
     497                $rewrite_filter = function() {
     498                        return new stdClass();
     499                };
     500
     501                add_filter( 'bbp_get_global_object', $rewrite_filter );
     502                try {
     503                        $this->assertSame( 'page', bbp_get_paged_slug() );
     504                } finally {
     505                        remove_filter( 'bbp_get_global_object', $rewrite_filter );
     506                }
     507
     508                $filter = function() {
     509                        return 'filtered-page';
     510                };
     511
     512                add_filter( 'bbp_get_paged_slug', $filter );
     513                try {
     514                        $this->assertSame( 'filtered-page', bbp_get_paged_slug() );
     515                } finally {
     516                        remove_filter( 'bbp_get_paged_slug', $filter );
     517                }
    406518        }
    407519
    408520        /**
    409521         * @covers ::bbp_use_pretty_urls
    410          * @todo   Implement test_bbp_use_pretty_urls().
    411522         */
    412523        public function test_bbp_use_pretty_urls() {
    413                 // Remove the following lines when you implement this test.
    414                 $this->markTestIncomplete(
    415                         'This test has not been implemented yet.'
    416                 );
     524                $this->assertFalse( bbp_use_pretty_urls() );
     525
     526                $this->set_permalink_structure( '/%postname%/' );
     527                $this->assertTrue( bbp_use_pretty_urls() );
     528                $this->set_permalink_structure();
     529
     530                $rewrite_filter = function() {
     531                        return new stdClass();
     532                };
     533
     534                add_filter( 'bbp_get_global_object', $rewrite_filter );
     535                try {
     536                        $this->assertFalse( bbp_use_pretty_urls() );
     537                } finally {
     538                        remove_filter( 'bbp_get_global_object', $rewrite_filter );
     539                }
     540
     541                add_filter( 'bbp_pretty_urls', '__return_true' );
     542                try {
     543                        $this->assertTrue( bbp_use_pretty_urls() );
     544                } finally {
     545                        remove_filter( 'bbp_pretty_urls', '__return_true' );
     546                }
     547
     548                add_filter( 'bbp_pretty_urls', '__return_false' );
     549                try {
     550                        $this->assertFalse( bbp_use_pretty_urls() );
     551                } finally {
     552                        remove_filter( 'bbp_pretty_urls', '__return_false' );
     553                }
     554        }
     555
     556        /**
     557         * @covers ::bbp_make_first_page_canonical
     558         */
     559        public function test_bbp_make_first_page_canonical() {
     560                add_filter( 'bbp_pretty_urls', '__return_true' );
     561                try {
     562                        $this->assertSame( '/forums/', bbp_make_first_page_canonical( '/forums/page/1/' ) );
     563                        $this->assertSame( '/forums/page/10/', bbp_make_first_page_canonical( '/forums/page/10/' ) );
     564                } finally {
     565                        remove_filter( 'bbp_pretty_urls', '__return_true' );
     566                }
     567
     568                add_filter( 'bbp_pretty_urls', '__return_false' );
     569                try {
     570                        $this->assertSame( '/forums/?foo=1&bar=2', bbp_make_first_page_canonical( '/forums/?foo=1&paged=1&bar=2' ) );
     571                        $this->assertSame( '/forums/?foo=1&paged=10', bbp_make_first_page_canonical( '/forums/?foo=1&paged=10' ) );
     572                } finally {
     573                        remove_filter( 'bbp_pretty_urls', '__return_false' );
     574                }
     575
     576                $this->assertSame( '', bbp_make_first_page_canonical() );
     577
     578                $filter = function( $canonical, $original ) {
     579                        $this->assertSame( '/forums/', $canonical );
     580                        $this->assertSame( '/forums/page/1/', $original );
     581                        return '/filtered/';
     582                };
     583
     584                add_filter( 'bbp_pretty_urls', '__return_true' );
     585                add_filter( 'bbp_make_first_page_canonical', $filter, 10, 2 );
     586                try {
     587                        $this->assertSame( '/filtered/', bbp_make_first_page_canonical( '/forums/page/1/' ) );
     588                } finally {
     589                        remove_filter( 'bbp_make_first_page_canonical', $filter );
     590                        remove_filter( 'bbp_pretty_urls', '__return_true' );
     591                }
     592        }
     593
     594        /**
     595         * @covers ::bbp_paginate_links
     596         */
     597        public function test_bbp_paginate_links_returns_requested_link_type() {
     598                $links = bbp_paginate_links( array(
     599                        'base'      => 'https://example.org/forums/%_%',
     600                        'format'    => '?paged=%#%',
     601                        'total'     => 3,
     602                        'current'   => 2,
     603                        'prev_next' => false,
     604                        'type'      => 'array',
     605                ) );
     606
     607                $this->assertIsArray( $links );
     608                $this->assertCount( 3, $links );
     609                $this->assertStringContainsString( 'paged=3', implode( ' ', $links ) );
     610        }
     611
     612        /**
     613         * @covers ::bbp_paginate_links
     614         */
     615        public function test_bbp_paginate_links_canonicalizes_the_first_page() {
     616                add_filter( 'bbp_pretty_urls', '__return_true' );
     617                try {
     618                        $links = bbp_paginate_links( array(
     619                                'base'      => 'https://example.org/forums/page/%#%/',
     620                                'total'     => 2,
     621                                'current'   => 2,
     622                                'prev_next' => false,
     623                        ) );
     624
     625                        $this->assertStringContainsString( 'href="https://example.org/forums/"', $links );
     626                        $this->assertStringNotContainsString( '/page/1/', $links );
     627                } finally {
     628                        remove_filter( 'bbp_pretty_urls', '__return_true' );
     629                }
     630        }
     631
     632        /**
     633         * @covers ::bbp_paginate_links
     634         */
     635        public function test_bbp_paginate_links_adds_view_all_when_requested() {
     636                $view_all = function() {
     637                        return true;
     638                };
     639
     640                add_filter( 'bbp_get_view_all', $view_all );
     641                try {
     642                        $links = bbp_paginate_links( array(
     643                                'base'      => 'https://example.org/forums/%_%',
     644                                'format'    => '?paged=%#%',
     645                                'total'     => 2,
     646                                'current'   => 1,
     647                                'prev_next' => false,
     648                        ) );
     649
     650                        $this->assertStringContainsString( 'view=all', $links );
     651                } finally {
     652                        remove_filter( 'bbp_get_view_all', $view_all );
     653                }
     654        }
     655
     656        /**
     657         * @covers ::bbp_get_major_wp_version
     658         */
     659        public function test_bbp_get_major_wp_version() {
     660                $version = $GLOBALS['wp_version'];
     661
     662                try {
     663                        $GLOBALS['wp_version'] = '7.1.2';
     664                        $this->assertSame( 7.1, bbp_get_major_wp_version() );
     665                } finally {
     666                        $GLOBALS['wp_version'] = $version;
     667                }
     668        }
     669
     670        /**
     671         * @covers ::bbp_switch_to_site
     672         * @covers ::bbp_restore_current_site
     673         */
     674        public function test_bbp_switch_to_site_and_restore_current_site() {
     675                $original_site = get_current_blog_id();
     676
     677                if ( is_multisite() ) {
     678                        $site_id = self::factory()->blog->create();
     679                        bbp_switch_to_site( $site_id );
     680                        try {
     681                                $this->assertSame( $site_id, get_current_blog_id() );
     682                        } finally {
     683                                bbp_restore_current_site();
     684                        }
     685                } else {
     686                        bbp_switch_to_site( 999 );
     687                        bbp_restore_current_site();
     688                }
     689
     690                $this->assertSame( $original_site, get_current_blog_id() );
     691                if ( is_multisite() ) {
     692                        $this->assertFalse( ms_is_switched() );
     693                }
     694        }
     695
     696        /**
     697         * @covers ::bbp_default_intercept
     698         * @covers ::bbp_is_intercepted
     699         */
     700        public function test_bbp_default_intercept_and_is_intercepted() {
     701                $default = bbp_default_intercept();
     702
     703                $this->assertIsString( $default );
     704                $this->assertNotSame( '', $default );
     705                $this->assertSame( $default, bbp_default_intercept() );
     706                $this->assertFalse( bbp_is_intercepted( $default ) );
     707                $this->assertTrue( bbp_is_intercepted( 'other' ) );
     708        }
     709
     710        /**
     711         * @covers ::bbp_maybe_intercept
     712         */
     713        public function test_bbp_maybe_intercept() {
     714                $default = bbp_default_intercept();
     715                $filter  = function( $value ) {
     716                        return 'intercepted';
     717                };
     718
     719                $this->assertSame( $default, bbp_maybe_intercept( 'bbp_test_action' ) );
     720                $this->assertSame( $default, bbp_maybe_intercept( 'bbp_test_action', array( 'original' ) ) );
     721
     722                add_filter( 'pre_bbp_test_action', $filter );
     723                try {
     724                        $this->assertSame( 'intercepted', bbp_maybe_intercept( 'bbp_test_action', array( 'original' ) ) );
     725                        $this->assertSame( 'intercepted', bbp_maybe_intercept( 'pre_bbp_test_action', array( 'original' ) ) );
     726                } finally {
     727                        remove_filter( 'pre_bbp_test_action', $filter );
     728                }
     729        }
     730
     731        /**
     732         * @covers ::bbp_get_empty_datetime
     733         */
     734        public function test_bbp_get_empty_datetime() {
     735                $filter = function( $value, $db_version ) {
     736                        $this->assertSame( '0000-00-00 00:00:00', $value );
     737                        $this->assertSame( bbp_db()->db_version(), $db_version );
     738                        return '1970-01-01 00:00:00';
     739                };
     740
     741                $this->assertSame( '0000-00-00 00:00:00', bbp_get_empty_datetime() );
     742                add_filter( 'bbp_get_default_zero_date', $filter, 10, 2 );
     743                try {
     744                        $this->assertSame( '1970-01-01 00:00:00', bbp_get_empty_datetime() );
     745                } finally {
     746                        remove_filter( 'bbp_get_default_zero_date', $filter );
     747                }
    417748        }
    418749}
Note: See TracChangeset for help on using the changeset viewer.