WordPress.org

Make WordPress Core

Ticket #17689: 17689.8.diff

File 17689.8.diff, 3.9 KB (added by wonderboymusic, 6 years ago)
  • src/wp-includes/taxonomy.php

     
    24362436
    24372437        $slug_provided = ! empty( $args['slug'] );
    24382438        if ( ! $slug_provided ) {
    2439                 $slug = sanitize_title($name);
     2439                $_name = trim( $name );
     2440                $existing_term = get_term_by( 'name', $_name, $taxonomy );
     2441                if ( $existing_term ) {
     2442                        $slug = $existing_term->slug;
     2443                } else {
     2444                        $slug = sanitize_title( $name );
     2445                }
    24402446        } else {
    24412447                $slug = $args['slug'];
    24422448        }
  • tests/phpunit/tests/taxonomy.php

     
    232232                );
    233233                $this->assertEquals( 0, wp_insert_category( $cat, false ) );
    234234        }
     235
     236        /**
     237         * @ticket 17689
     238         */
     239        function test_duplicate_name() {
     240                $term = $this->factory->tag->create_and_get( array( 'name' => 'Bozo' ) );
     241                $this->assertFalse( is_wp_error( $term ) );
     242                $this->assertTrue( empty( $term->errors ) );
     243
     244                // Test existing term name with unique slug
     245                $term1 = $this->factory->tag->create( array( 'name' => 'Bozo', 'slug' => 'bozo1' ) );
     246                $this->assertFalse( is_wp_error( $term1 ) );
     247                $this->assertTrue( empty($term1->errors ) );
     248
     249                // Test an existing term name
     250                $term2 = $this->factory->tag->create( array( 'name' => 'Bozo' ) );
     251                $this->assertTrue( is_wp_error( $term2 ) );
     252                $this->assertNotEmpty( $term2->errors );
     253
     254                // Test named terms ending in special characters
     255                $term3 = $this->factory->tag->create( array( 'name' => 'T$' ) );
     256                $term4 = $this->factory->tag->create( array( 'name' => 'T$$' ) );
     257                $term5 = $this->factory->tag->create( array( 'name' => 'T$$$' ) );
     258                $term6 = $this->factory->tag->create( array( 'name' => 'T$$$$' ) );
     259                $term7 = $this->factory->tag->create( array( 'name' => 'T$$$$' ) );
     260                $this->assertTrue( is_wp_error( $term7 ) );
     261                $this->assertNotEmpty( $term7->errors );
     262                $this->assertEquals( $term6, $term7->error_data['term_exists'] );
     263
     264                $terms = array_map( 'get_tag', array( $term3, $term4, $term5, $term6 ) );
     265                $this->assertCount( 4, array_unique( wp_list_pluck( $terms, 'slug' ) ) );
     266
     267                // Test named terms with only special characters
     268                $term8 = $this->factory->tag->create( array( 'name' => '$' ) );
     269                $term9 = $this->factory->tag->create( array( 'name' => '$$' ) );
     270                $term10 = $this->factory->tag->create( array( 'name' => '$$$' ) );
     271                $term11 = $this->factory->tag->create( array( 'name' => '$$$$' ) );
     272                $term12 = $this->factory->tag->create( array( 'name' => '$$$$' ) );
     273                $this->assertTrue( is_wp_error( $term12 ) );
     274                $this->assertNotEmpty( $term12->errors );
     275                $this->assertEquals( $term11, $term12->error_data['term_exists'] );
     276
     277                $terms = array_map( 'get_tag', array( $term8, $term9, $term10, $term11 ) );
     278                $this->assertCount( 4, array_unique( wp_list_pluck( $terms, 'slug' ) ) );
     279
     280                $term13 = $this->factory->tag->create( array( 'name' => 'A' ) );
     281                $this->assertFalse( is_wp_error( $term13 ) );
     282                $term14 = $this->factory->tag->create( array( 'name' => 'A' ) );
     283                $this->assertTrue( is_wp_error( $term14 ) );
     284                $term15 = $this->factory->tag->create( array( 'name' => 'A+', 'slug' => 'a' ) );
     285                $this->assertFalse( is_wp_error( $term15 ) );
     286                $term16 = $this->factory->tag->create( array( 'name' => 'A+' ) );
     287                $this->assertTrue( is_wp_error( $term16 ) );
     288                $term17 = $this->factory->tag->create( array( 'name' => 'A++' ) );
     289                $this->assertFalse( is_wp_error( $term17 ) );
     290                $term18 = $this->factory->tag->create( array( 'name' => 'A-', 'slug' => 'a' ) );
     291                $this->assertFalse( is_wp_error( $term18 ) );
     292                $term19 = $this->factory->tag->create( array( 'name' => 'A-' ) );
     293                $this->assertTrue( is_wp_error( $term19 ) );
     294                $term20 = $this->factory->tag->create( array( 'name' => 'A--' ) );
     295                $this->assertFalse( is_wp_error( $term20 ) );
     296        }
    235297}