WordPress.org

Make WordPress Core

Ticket #44672: 44672.2.diff

File 44672.2.diff, 2.5 KB (added by desrosj, 3 years ago)
  • src/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php

     
    641641                        return new WP_Error( 'rest_user_invalid_id', __( 'Invalid user ID.' ), array( 'status' => 404 ) );
    642642                }
    643643
    644                 if ( email_exists( $request['email'] ) && $request['email'] !== $user->user_email ) {
     644                if ( ( $owner_id = email_exists( $request['email'] ) ) && $owner_id !== $id ) {
    645645                        return new WP_Error( 'rest_user_invalid_email', __( 'Invalid email address.' ), array( 'status' => 400 ) );
    646646                }
    647647
  • tests/phpunit/tests/rest-api/rest-users-controller.php

     
    14931493                $this->assertEquals( 'rest_user_invalid_email', $response->as_error()->get_error_code() );
    14941494        }
    14951495
     1496        /**
     1497         * @ticket 44672
     1498         */
     1499        public function test_update_item_existing_email_case() {
     1500                wp_set_current_user( self::$editor );
     1501
     1502                $user = get_userdata( self::$editor );
     1503
     1504                $updated_email_with_case_change = ucwords( $user->user_email, '@' );
     1505
     1506                $request = new WP_REST_Request( 'PUT', sprintf( '/wp/v2/users/%d', self::$editor ) );
     1507                $request->set_param( 'email', $updated_email_with_case_change );
     1508                $response = rest_get_server()->dispatch( $request );
     1509                $data     = $response->get_data();
     1510
     1511                $this->assertEquals( 200, $response->get_status() );
     1512                $this->assertEquals( $updated_email_with_case_change, $data['email'] );
     1513        }
     1514
     1515        /**
     1516         * @ticket 44672
     1517         */
     1518        public function test_update_item_existing_email_case_not_own() {
     1519                wp_set_current_user( self::$editor );
     1520
     1521                $user       = get_userdata( self::$editor );
     1522                $subscriber = get_userdata( self::$subscriber );
     1523
     1524                $updated_email_with_case_change = ucwords( $subscriber->user_email, '@' );
     1525
     1526                $request = new WP_REST_Request( 'PUT', sprintf( '/wp/v2/users/%d', self::$editor ) );
     1527                $request->set_param( 'email', $updated_email_with_case_change );
     1528                $response = rest_get_server()->dispatch( $request );
     1529                $data     = $response->get_data();
     1530
     1531                $this->assertEquals( 400, $response->get_status() );
     1532        }
     1533
    14961534        public function test_update_item_invalid_locale() {
    14971535                $user1 = $this->factory->user->create(
    14981536                        array(