diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php index 7c145e198c..826902a164 100644 --- a/src/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php +++ b/src/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php @@ -405,6 +405,7 @@ class WP_REST_Terms_Controller extends WP_REST_Controller { if ( $term_id = $term->get_error_data( 'term_exists' ) ) { $existing_term = get_term( $term_id, $this->taxonomy ); $term->add_data( $existing_term->term_id, 'term_exists' ); + $term->add_data( array( 'status' => 409 ) ); } return $term; diff --git a/tests/phpunit/tests/rest-api/rest-categories-controller.php b/tests/phpunit/tests/rest-api/rest-categories-controller.php index fbf7d06018..d706e25556 100644 --- a/tests/phpunit/tests/rest-api/rest-categories-controller.php +++ b/tests/phpunit/tests/rest-api/rest-categories-controller.php @@ -602,6 +602,21 @@ class WP_Test_REST_Categories_Controller extends WP_Test_REST_Controller_Testcas $this->assertEquals( 'so-awesome', $data['slug'] ); } + /** + * @ticket 41370 + */ + public function test_create_item_term_already_exists() { + wp_set_current_user( self::$administrator ); + $request = new WP_REST_Request( 'POST', '/wp/v2/categories' ); + $request->set_param( 'name', 'test' ); + $response = $this->server->dispatch( $request ); + $this->assertEquals( 201, $response->get_status() ); + $response = $this->server->dispatch( $request ); + $this->assertEquals( 409, $response->get_status() ); + $data = $response->get_data(); + $this->assertEquals( 'term_exists', $data['code'] ); + } + public function test_create_item_invalid_taxonomy() { wp_set_current_user( self::$administrator ); $request = new WP_REST_Request( 'POST', '/wp/v2/invalid-taxonomy' );