Make WordPress Core


Ignore:
Timestamp:
12/03/2016 04:04:05 AM (9 years ago)
Author:
dd32
Message:

Revert [38677] from the 4.7 branch.
This avoids fatal errors caused with recursive calling of term functions within the get_terms filter.

See #21760.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/4.7/tests/phpunit/tests/term/cache.php

    r38776 r39454  
    222222
    223223    /**
    224      * @ticket 21760
    225      */
    226     function test_get_term_by_slug_cache() {
    227         global $wpdb;
    228 
    229         $term_id = $this->factory->term->create( array( 'slug' => 'burrito', 'name' => 'Taco', 'taxonomy' => 'post_tag' ) );
    230 
    231         clean_term_cache( $term_id, 'post_tag' );
    232         $num_queries = $wpdb->num_queries;
    233 
    234         $term = get_term_by( 'slug', 'burrito', 'post_tag' );
    235         $num_queries++;
    236         $this->assertEquals( 'Taco', $term->name );
    237         $this->assertEquals( $num_queries, $wpdb->num_queries );
    238 
    239         // This should now hit cache.
    240         $term = get_term_by( 'slug', 'burrito', 'post_tag' );
    241         $this->assertEquals( 'Taco', $term->name );
    242         $this->assertEquals( $num_queries, $wpdb->num_queries );
    243 
    244         $this->assertEquals( get_term( $term_id, 'post_tag' ), $term );
    245         $this->assertEquals( $num_queries, $wpdb->num_queries );
    246     }
    247 
    248     /**
    249      * @ticket 21760
    250      */
    251     function test_get_term_by_slug_cache_update() {
    252         global $wpdb;
    253 
    254         $term_id = $this->factory->term->create( array( 'slug' => 'burrito', 'name' => 'Taco', 'taxonomy' => 'post_tag' ) );
    255 
    256         clean_term_cache( $term_id, 'post_tag' );
    257         $num_queries = $wpdb->num_queries;
    258 
    259         $term = get_term_by( 'slug', 'burrito', 'post_tag' );
    260         $num_queries++;
    261         $this->assertEquals( 'Taco', $term->name );
    262         $this->assertEquals( $num_queries, $wpdb->num_queries );
    263 
    264         // This should now hit cache.
    265         $term = get_term_by( 'slug', 'burrito', 'post_tag' );
    266         $this->assertEquals( 'Taco', $term->name );
    267         $this->assertEquals( $num_queries, $wpdb->num_queries );
    268 
    269         // Update the tag which invalidates the cache.
    270         wp_update_term( $term_id, 'post_tag', array( 'name' => 'No Taco' ) );
    271         $num_queries = $wpdb->num_queries;
    272 
    273         // This should not hit cache.
    274         $term = get_term_by( 'slug', 'burrito', 'post_tag' );
    275         $num_queries++;
    276         $this->assertEquals( 'No Taco', $term->name );
    277         $this->assertEquals( $num_queries, $wpdb->num_queries );
    278     }
    279 
    280     /**
    281      * @ticket 21760
    282      */
    283     function test_get_term_by_name_cache() {
    284         global $wpdb;
    285 
    286         $term_id = $this->factory->term->create( array( 'name' => 'Burrito', 'slug' => 'noburrito', 'taxonomy' => 'post_tag' ) );
    287 
    288         clean_term_cache( $term_id, 'post_tag' );
    289         $num_queries = $wpdb->num_queries;
    290 
    291         get_term_by( 'name', 'Burrito', 'post_tag' );
    292         $num_queries++;
    293         $this->assertEquals( $num_queries, $wpdb->num_queries );
    294 
    295         // This should now hit cache.
    296         $term = get_term_by( 'name', 'Burrito', 'post_tag' );
    297         $this->assertEquals( $num_queries, $wpdb->num_queries );
    298 
    299         $this->assertEquals( get_term( $term_id, 'post_tag' ), $term );
    300         $this->assertEquals( $num_queries, $wpdb->num_queries );
    301     }
    302 
    303     /**
    304      * @ticket 21760
    305      */
    306     function test_get_term_by_name_cache_update() {
    307         global $wpdb;
    308 
    309         $term_id = $this->factory->term->create( array( 'name' => 'Burrito', 'slug' => 'noburrito', 'taxonomy' => 'post_tag' ) );
    310 
    311         clean_term_cache( $term_id, 'post_tag' );
    312         $num_queries = $wpdb->num_queries;
    313 
    314         get_term_by( 'name', 'Burrito', 'post_tag' );
    315         $num_queries++;
    316         $this->assertEquals( $num_queries, $wpdb->num_queries );
    317 
    318         // This should now hit cache.
    319         get_term_by( 'name', 'Burrito', 'post_tag' );
    320         $this->assertEquals( $num_queries, $wpdb->num_queries );
    321 
    322         // Update the tag which invalidates the cache.
    323         wp_update_term( $term_id, 'post_tag', array( 'slug' => 'taco' ) );
    324         $num_queries = $wpdb->num_queries;
    325 
    326         // This should not hit cache.
    327         get_term_by( 'name', 'burrito', 'post_tag' );
    328         $num_queries++;
    329         $this->assertEquals( $num_queries, $wpdb->num_queries );
    330     }
    331 
    332     /**
    333      * @ticket 21760
    334      */
    335     function test_invalidating_term_caches_should_fail_when_invalidation_is_suspended() {
    336         global $wpdb;
    337 
    338         $term_id = $this->factory->term->create( array( 'name' => 'Burrito', 'taxonomy' => 'post_tag' ) );
    339 
    340         clean_term_cache( $term_id, 'post_tag' );
    341         $num_queries = $wpdb->num_queries;
    342         $last_changed = wp_cache_get( 'last_changed', 'terms' );
    343 
    344         $term1 = get_term_by( 'name', 'Burrito', 'post_tag' );
    345         $num_queries++;
    346 
    347         // Verify the term is cached.
    348         $term2 = get_term_by( 'name', 'Burrito', 'post_tag' );
    349         $this->assertEquals( $num_queries, $wpdb->num_queries );
    350         $this->assertEquals( $term1, $term2 );
    351 
    352         $suspend = wp_suspend_cache_invalidation();
    353 
    354         // Update the tag.
    355         wp_update_term( $term_id, 'post_tag', array( 'name' => 'Taco' ) );
    356         $num_queries = $wpdb->num_queries;
    357 
    358         // Verify that the cached term still matches the initial cached term.
    359         $term3 = get_term_by( 'name', 'Burrito', 'post_tag' );
    360         $this->assertEquals( $num_queries, $wpdb->num_queries );
    361         $this->assertEquals( $term1, $term3 );
    362 
    363         // Verify that last changed has not been updated as part of an invalidation routine.
    364         $this->assertSame( $last_changed, wp_cache_get( 'last_changed', 'terms' ) );
    365 
    366         // Clean up.
    367         wp_suspend_cache_invalidation( $suspend );
    368     }
    369 
    370     /**
    371      * @ticket 21760
    372      */
    373     public function test_get_term_by_does_not_prime_term_meta_cache() {
    374         global $wpdb;
    375 
    376         $term_id = $this->factory->term->create( array( 'name' => 'Burrito', 'taxonomy' => 'post_tag' ) );
    377         add_term_meta( $term_id, 'foo', 'bar' );
    378 
    379         clean_term_cache( $term_id, 'post_tag' );
    380         $num_queries = $wpdb->num_queries;
    381 
    382         $term = get_term_by( 'name', 'Burrito', 'post_tag' );
    383         $num_queries++;
    384         $this->assertTrue( $term instanceof WP_Term );
    385         $this->assertSame( $term_id, $term->term_id );
    386         $this->assertEquals( $num_queries, $wpdb->num_queries );
    387 
    388         $term_meta = get_term_meta( $term_id, 'foo', true );
    389         $num_queries++;
    390         $this->assertSame( $term_meta, 'bar' );
    391         $this->assertEquals( $num_queries, $wpdb->num_queries );
    392     }
    393 
    394     /**
    395224     * @ticket 37291
    396225     */
Note: See TracChangeset for help on using the changeset viewer.