WordPress.org

Make WordPress Core

Ticket #43985: 43985.9.diff

File 43985.9.diff, 22.7 KB (added by earnjam, 16 months ago)

Hurray for passing unit tests

  • src/wp-admin/includes/file.php

    diff --git src/wp-admin/includes/file.php src/wp-admin/includes/file.php
    index 3c8f9c221a..4fd93e2e60 100644
    function wp_privacy_send_personal_data_export_email( $request_id ) { 
    21962196        $request = wp_get_user_request_data( $request_id );
    21972197
    21982198        if ( ! $request || 'export_personal_data' !== $request->action_name ) {
    2199                 return new WP_Error( 'invalid', __( 'Invalid request ID when sending personal data export email.' ) );
     2199                return new WP_Error( 'invalid_request', __( 'Invalid request ID when sending personal data export email.' ) );
    22002200        }
    22012201
    22022202        /** This filter is documented in wp-includes/functions.php */
    All at ###SITENAME### 
    22562256        );
    22572257
    22582258        if ( ! $mail_success ) {
    2259                 return new WP_Error( 'error', __( 'Unable to send personal data export email.' ) );
     2259                return new WP_Error( 'privacy_email_error', __( 'Unable to send personal data export email.' ) );
    22602260        }
    22612261
    22622262        return true;
  • src/wp-includes/user.php

    diff --git src/wp-includes/user.php src/wp-includes/user.php
    index 4ebcf822a9..91b04e31aa 100644
    function wp_user_request_action_description( $action_name ) { 
    33573357 * @since 4.9.6
    33583358 *
    33593359 * @param string $request_id ID of the request created via wp_create_user_request().
    3360  * @return WP_Error|bool Will return true/false based on the success of sending the email, or a WP_Error object.
     3360 * @return bool|WP_Error true on success or `WP_Error` on failure.
    33613361 */
    33623362function wp_send_user_request( $request_id ) {
    33633363        $request_id = absint( $request_id );
    33643364        $request    = wp_get_user_request_data( $request_id );
    33653365
    33663366        if ( ! $request ) {
    3367                 return new WP_Error( 'user_request_error', __( 'Invalid request.' ) );
     3367                return new WP_Error( 'invalid_request', __( 'Invalid user request.' ) );
    33683368        }
    33693369
     3370        // Localize message content for user; fallback to site default for visitors.
     3371        if ( ! empty( $request->user_id ) ) {
     3372                $locale = get_user_locale( $request->user_id );
     3373        } else {
     3374                $locale = get_locale();
     3375        }
     3376
     3377        $switched_locale = switch_to_locale( $locale );
     3378
    33703379        $email_data = array(
    33713380                'request'     => $request,
    33723381                'email'       => $request->email,
    All at ###SITENAME### 
    34543463         */
    34553464        $subject = apply_filters( 'user_request_action_email_subject', $subject, $email_data['sitename'], $email_data );
    34563465
    3457         return wp_mail( $email_data['email'], $subject, $content );
     3466        $email_sent = wp_mail( $email_data['email'], $subject, $content );
     3467
     3468        if ( $switched_locale ) {
     3469                restore_current_locale();
     3470        }
     3471
     3472        if ( ! $email_sent ) {
     3473                return new WP_Error( 'privacy_email_error', __( 'Unable to send personal data export confirmation email.' ) );
     3474        }
     3475
     3476        return true;
    34583477}
    34593478
    34603479/**
    function wp_validate_user_request_key( $request_id, $key ) { 
    35043523        $request    = wp_get_user_request_data( $request_id );
    35053524
    35063525        if ( ! $request ) {
    3507                 return new WP_Error( 'user_request_error', __( 'Invalid request.' ) );
     3526                return new WP_Error( 'invalid_request', __( 'Invalid request.' ) );
    35083527        }
    35093528
    35103529        if ( ! in_array( $request->status, array( 'request-pending', 'request-failed' ), true ) ) {
    final class WP_User_Request { 
    35913610         *
    35923611         * @var int
    35933612         */
    3594 
    35953613        public $user_id = 0;
    35963614
    35973615        /**
    final class WP_User_Request { 
    36663684         */
    36673685        public function __construct( $post ) {
    36683686                $this->ID                  = $post->ID;
    3669                 $this->user_id             = $post->post_author;
     3687                $this->user_id             = (int) $post->post_author;
    36703688                $this->email               = $post->post_title;
    36713689                $this->action_name         = $post->post_name;
    36723690                $this->status              = $post->post_status;
  • tests/phpunit/data/languages/de_DE.po

    diff --git tests/phpunit/data/languages/de_DE.mo tests/phpunit/data/languages/de_DE.mo
    index f2c48b4b40..3f9030531f 100644
    Binary files tests/phpunit/data/languages/de_DE.mo and tests/phpunit/data/languages/de_DE.mo differ
    diff --git tests/phpunit/data/languages/de_DE.po tests/phpunit/data/languages/de_DE.po
    index cd556ed401..93d2c17e7c 100644
     
    1 # Translation of 4.6.x in German
    2 # This file is distributed under the same license as the 4.6.x package.
     1# Translation of 4.9.x in German
     2# This file is distributed under the same license as the 4.9.x package.
    33msgid ""
    44msgstr ""
    5 "PO-Revision-Date: 2016-10-25 18:27+0200\n"
     5"PO-Revision-Date: 2018-08-01 17:08-0400\n"
    66"MIME-Version: 1.0\n"
    77"Content-Type: text/plain; charset=UTF-8\n"
    88"Content-Transfer-Encoding: 8bit\n"
    99"Plural-Forms: nplurals=2; plural=n != 1;\n"
    10 "X-Generator: Poedit 1.8.10\n"
    11 "Project-Id-Version: 4.6.x\n"
     10"X-Generator: Poedit 2.1\n"
     11"Project-Id-Version: Development (4.9.x)\n"
    1212"Language: de_DE\n"
    1313
    1414#. translators: Translate this to the correct language tag for your locale, see
    msgstr "." 
    4040#: wp-includes/script-loader.php:620
    4141msgid "Update %s now"
    4242msgstr "Jetzt %s aktualisieren"
     43
     44#. translators: Privacy data request subject. 1: Site name, 2: Name of the action
     45#: wp-includes/user.php:3445
     46msgid "[%1$s] Confirm Action: %2$s"
     47msgstr "[%1$s] Aktion bestätigen: %2$s"
  • tests/phpunit/data/languages/es_ES.po

    diff --git tests/phpunit/data/languages/es_ES.mo tests/phpunit/data/languages/es_ES.mo
    index 068d37a710..3d0416d840 100644
    Binary files tests/phpunit/data/languages/es_ES.mo and tests/phpunit/data/languages/es_ES.mo differ
    diff --git tests/phpunit/data/languages/es_ES.po tests/phpunit/data/languages/es_ES.po
    index 0736e9ba8a..18a0333392 100644
     
    1 # Translation of Development (4.4.x) in Spanish (Spain)
    2 # This file is distributed under the same license as the Development (4.4.x) package.
     1# Translation of Development (4.9.x) in Spanish (Spain)
     2# This file is distributed under the same license as the Development (4.9.x) package.
    33msgid ""
    44msgstr ""
    5 "PO-Revision-Date: 2016-10-25 18:28+0200\n"
     5"PO-Revision-Date: 2018-08-01 17:08-0400\n"
    66"MIME-Version: 1.0\n"
    77"Content-Type: text/plain; charset=UTF-8\n"
    88"Content-Transfer-Encoding: 8bit\n"
    99"Plural-Forms: nplurals=2; plural=n != 1;\n"
    10 "X-Generator: Poedit 1.8.10\n"
    11 "Project-Id-Version: Development (4.4.x)\n"
     10"X-Generator: Poedit 2.1\n"
     11"Project-Id-Version: Development (4.9.x)\n"
    1212"Language: es_ES\n"
    1313
    1414#. translators: 'rtl' or 'ltr'. This sets the text direction for WordPress.
    msgstr "(Actual: %s)" 
    3636msgctxt "menu"
    3737msgid "(Currently set to: %s)"
    3838msgstr "(Actualmente fijado en: %s)"
     39
     40#. translators: Privacy data request subject. 1: Site name, 2: Name of the action
     41#: wp-includes/user.php:3445
     42msgid "[%1$s] Confirm Action: %2$s"
     43msgstr "[%1$s] Confirma la acción: %2$s"
  • tests/phpunit/tests/privacy/wpPrivacySendPersonalDataExportEmail.php

    diff --git tests/phpunit/tests/privacy/wpPrivacySendPersonalDataExportEmail.php tests/phpunit/tests/privacy/wpPrivacySendPersonalDataExportEmail.php
    index 3e8ae840db..5e3feb5258 100644
    class Tests_Privacy_WpPrivacySendPersonalDataExportEmail extends WP_UnitTestCase 
    9595                $request_id = 0;
    9696                $email_sent = wp_privacy_send_personal_data_export_email( $request_id );
    9797                $this->assertWPError( $email_sent );
    98                 $this->assertSame( 'invalid', $email_sent->get_error_code() );
     98                $this->assertSame( 'invalid_request', $email_sent->get_error_code() );
    9999
    100100                $request_id = PHP_INT_MAX;
    101101                $email_sent = wp_privacy_send_personal_data_export_email( $request_id );
    102102                $this->assertWPError( $email_sent );
    103                 $this->assertSame( 'invalid', $email_sent->get_error_code() );
     103                $this->assertSame( 'invalid_request', $email_sent->get_error_code() );
    104104        }
    105105
    106106        /**
    class Tests_Privacy_WpPrivacySendPersonalDataExportEmail extends WP_UnitTestCase 
    111111        public function test_return_wp_error_when_send_fails() {
    112112                add_filter( 'wp_mail_from', '__return_empty_string' ); // Cause `wp_mail()` to return false.
    113113                $email_sent = wp_privacy_send_personal_data_export_email( self::$request_id );
    114                 remove_filter( 'wp_mail_from', '__return_empty_string' );
    115114
    116115                $this->assertWPError( $email_sent );
    117                 $this->assertSame( 'error', $email_sent->get_error_code() );
     116                $this->assertSame( 'privacy_email_error', $email_sent->get_error_code() );
    118117        }
    119118
    120119        /**
    class Tests_Privacy_WpPrivacySendPersonalDataExportEmail extends WP_UnitTestCase 
    125124        public function test_export_expiration_should_be_filterable() {
    126125                add_filter( 'wp_privacy_export_expiration', array( $this, 'modify_export_expiration' ) );
    127126                wp_privacy_send_personal_data_export_email( self::$request_id );
    128                 remove_filter( 'wp_privacy_export_expiration', array( $this, 'modify_export_expiration' ) );
    129127
    130128                $mailer = tests_retrieve_phpmailer_instance();
    131129                $this->assertContains( 'we will automatically delete the file on December 18, 2017,', $mailer->get_sent()->body );
    class Tests_Privacy_WpPrivacySendPersonalDataExportEmail extends WP_UnitTestCase 
    152150        public function test_email_content_should_be_filterable() {
    153151                add_filter( 'wp_privacy_personal_data_email_content', array( $this, 'modify_email_content' ), 10, 2 );
    154152                wp_privacy_send_personal_data_export_email( self::$request_id );
    155                 remove_filter( 'wp_privacy_personal_data_email_content', array( $this, 'modify_email_content' ) );
    156153
    157154                $mailer = tests_retrieve_phpmailer_instance();
    158155                $this->assertContains( 'Custom content for request ID: ' . self::$request_id, $mailer->get_sent()->body );
  • new file tests/phpunit/tests/user/wpSendUserRequest.php

    diff --git tests/phpunit/tests/user/wpSendUserRequest.php tests/phpunit/tests/user/wpSendUserRequest.php
    new file mode 100644
    index 0000000000..fc38182b01
    - +  
     1<?php
     2/**
     3 * Test cases for the `wp_send_user_request()` function.
     4 *
     5 * @package WordPress
     6 * @since 4.9.9
     7 */
     8
     9/**
     10 * Tests_User_WpSendUserRequest class.
     11 *
     12 * @since 4.9.9
     13 *
     14 * @group privacy
     15 * @group user
     16 * @covers wp_send_user_request
     17 */
     18class Tests_User_WpSendUserRequest extends WP_UnitTestCase {
     19        /**
     20         * Reset the mocked phpmailer instance before each test method.
     21         *
     22         * @since 4.9.9
     23         */
     24        public function setUp() {
     25                parent::setUp();
     26                unset( $GLOBALS['locale'] );
     27                set_current_screen( 'dashboard' );
     28                reset_phpmailer_instance();
     29        }
     30
     31        /**
     32         * Reset the mocked phpmailer instance after each test method.
     33         *
     34         * @since 4.9.9
     35         */
     36        public function tearDown() {
     37                reset_phpmailer_instance();
     38                parent::tearDown();
     39        }
     40
     41        /**
     42         * The function should error when the request ID is invalid.
     43         *
     44         * @ticket 43985
     45         */
     46        public function test_should_error_when_invalid_request_id() {
     47                $result = wp_send_user_request( null );
     48
     49                $this->assertWPError( $result );
     50                $this->assertSame( 'invalid_request', $result->get_error_code() );
     51        }
     52
     53        /**
     54         * The function should send a user request export email when the requester is a registered user.
     55         *
     56         * @ticket 43985
     57         */
     58        public function test_should_send_user_request_export_email_when_requester_registered_user() {
     59                $email      = 'export.request.from.user@example.com';
     60                $user_id    = $this->factory->user->create(
     61                        array(
     62                                'user_email' => $email,
     63                                'role'       => 'administrator',
     64                        )
     65                );
     66                $request_id = wp_create_user_request( $email, 'export_personal_data' );
     67
     68                $result = wp_send_user_request( $request_id );
     69                $mailer = tests_retrieve_phpmailer_instance();
     70
     71                $this->assertTrue( $result );
     72                $this->assertSame( $email, $mailer->get_recipient( 'to' )->address );
     73                $this->assertContains( 'Confirm Action: Export Personal Data', $mailer->get_sent()->subject );
     74                $this->assertContains( 'action=confirmaction&request_id=', $mailer->get_sent()->body );
     75                $this->assertContains( 'Export Personal Data', $mailer->get_sent()->body );
     76        }
     77
     78        /**
     79         * The function should send a user request erase email when the requester is a registered user.
     80         *
     81         * @ticket 43985
     82         */
     83        public function test_should_send_user_request_erase_email_when_requester_registered_user() {
     84                $email      = 'erase.request.from.user@example.com';
     85                $user_id    = $this->factory->user->create(
     86                        array(
     87                                'user_email' => $email,
     88                                'role'       => 'author',
     89                        )
     90                );
     91                $request_id = wp_create_user_request( $email, 'remove_personal_data' );
     92
     93                $result = wp_send_user_request( $request_id );
     94                $mailer = tests_retrieve_phpmailer_instance();
     95
     96                $this->assertTrue( $result );
     97                $this->assertSame( $email, $mailer->get_recipient( 'to' )->address );
     98                $this->assertContains( 'Confirm Action: Erase Personal Data', $mailer->get_sent()->subject );
     99                $this->assertContains( 'action=confirmaction&request_id=', $mailer->get_sent()->body );
     100                $this->assertContains( 'Erase Personal Data', $mailer->get_sent()->body );
     101        }
     102
     103        /**
     104         * The function should send a user request export email when the requester is an un-registered user.
     105         *
     106         * @ticket 43985
     107         */
     108        public function test_should_send_user_request_export_email_when_user_not_registered() {
     109                $email      = 'export.request.from.unregistered.user@example.com';
     110                $request_id = wp_create_user_request( $email, 'export_personal_data' );
     111
     112                $result = wp_send_user_request( $request_id );
     113                $mailer = tests_retrieve_phpmailer_instance();
     114
     115                $this->assertTrue( $result );
     116                $this->assertSame( $email, $mailer->get_recipient( 'to' )->address );
     117                $this->assertContains( 'Confirm Action: Export Personal Data', $mailer->get_sent()->subject );
     118                $this->assertContains( 'action=confirmaction&request_id=', $mailer->get_sent()->body );
     119                $this->assertContains( 'Export Personal Data', $mailer->get_sent()->body );
     120        }
     121
     122        /**
     123         * The function should send a user request erase email when the requester is an un-registered user.
     124         *
     125         * @ticket 43985
     126         */
     127        public function test_should_send_user_request_erase_email_when_user_not_registered() {
     128                $email      = 'erase.request.from.unregistered.user@example.com';
     129                $request_id = wp_create_user_request( $email, 'remove_personal_data' );
     130
     131                $result = wp_send_user_request( $request_id );
     132                $mailer = tests_retrieve_phpmailer_instance();
     133
     134                $this->assertTrue( $result );
     135                $this->assertSame( $email, $mailer->get_recipient( 'to' )->address );
     136                $this->assertContains( 'Confirm Action: Erase Personal Data', $mailer->get_sent()->subject );
     137                $this->assertContains( 'action=confirmaction&request_id=', $mailer->get_sent()->body );
     138                $this->assertContains( 'Erase Personal Data', $mailer->get_sent()->body );
     139        }
     140
     141        /**
     142         * The email subject should be filterable.
     143         *
     144         * @ticket 43985
     145         */
     146        public function test_email_subject_should_be_filterable() {
     147                $email      = 'erase.request.from.user@example.com';
     148                $user_id    = $this->factory->user->create(
     149                        array(
     150                                'user_email' => $email,
     151                        )
     152                );
     153                $request_id = wp_create_user_request( $email, 'remove_personal_data' );
     154
     155                add_filter( 'user_request_action_email_subject', array( $this, 'modify_email_subject' ) );
     156                $result = wp_send_user_request( $request_id );
     157                $mailer = tests_retrieve_phpmailer_instance();
     158
     159                $this->assertTrue( $result );
     160                $this->assertSame( 'Custom Email Subject', $mailer->get_sent()->subject );
     161        }
     162
     163        /**
     164         * Filter callback to modify the subject of the email sent when an account action is attempted.
     165         *
     166         * @since 4.9.9
     167         *
     168         * @param string $subject The email subject.
     169         * @return string Filtered email subject.
     170         */
     171        public function modify_email_subject( $subject ) {
     172                return 'Custom Email Subject';
     173        }
     174
     175        /**
     176         * The email content should be filterable.
     177         *
     178         * @ticket 43985
     179         */
     180        public function test_email_content_should_be_filterable() {
     181                $email      = 'erase.request.from.user@example.com';
     182                $user_id    = $this->factory->user->create(
     183                        array(
     184                                'user_email' => $email,
     185                        )
     186                );
     187                $request_id = wp_create_user_request( $email, 'remove_personal_data' );
     188
     189                add_filter( 'user_request_action_email_content', array( $this, 'modify_email_content' ), 10, 2 );
     190                $result = wp_send_user_request( $request_id );
     191                $mailer = tests_retrieve_phpmailer_instance();
     192
     193                $this->assertTrue( $result );
     194                $this->assertContains( 'Custom Email Content.', $mailer->get_sent()->body );
     195        }
     196
     197        /**
     198         * Filter callback to modify the content of the email sent when an account action is attempted.
     199         *
     200         * @since 4.9.9
     201         *
     202         * @param string $email_text Confirmation email text.
     203         * @return string $email_text Filtered email text.
     204         */
     205        public function modify_email_content( $email_text ) {
     206                return 'Custom Email Content.';
     207        }
     208
     209        /**
     210         * The function should error when the email was not sent.
     211         *
     212         * @since 4.9.9
     213         *
     214         * @ticket 43985
     215         */
     216        public function test_return_wp_error_when_sending_fails() {
     217                $request_id = wp_create_user_request( 'erase.request.from.unergistered.user@example.com', 'remove_personal_data' );
     218
     219                add_filter( 'wp_mail_from', '__return_empty_string' ); // Cause `wp_mail()` to return false.
     220                $result = wp_send_user_request( $request_id );
     221
     222                $this->assertWPError( $result );
     223                $this->assertSame( 'privacy_email_error', $result->get_error_code() );
     224        }
     225
     226        /**
     227         * The function should respect the user locale settings when the site uses the default locale.
     228         *
     229         * @ticket 43985
     230         */
     231        public function test_should_send_user_request_email_in_user_locale() {
     232                delete_option( 'WPLANG' );
     233
     234                $email         = 'export.request.from.user@example.com';
     235                $admin_user_id = $this->factory->user->create(
     236                        array(
     237                                'user_email' => 'admin@local.test',
     238                                'role'       => 'administrator',
     239                        )
     240                );
     241                $user_id       = $this->factory->user->create(
     242                        array(
     243                                'user_email' => $email,
     244                                'locale'     => 'es_ES',
     245                                'role'       => 'author',
     246                        )
     247                );
     248
     249                wp_set_current_user( $admin_user_id );
     250                $request_id = wp_create_user_request( $email, 'export_personal_data' );
     251
     252                $result = wp_send_user_request( $request_id );
     253                $mailer = tests_retrieve_phpmailer_instance();
     254
     255                $this->assertContains( 'Confirma la', $mailer->get_sent()->subject );
     256        }
     257
     258        /**
     259         * The function should respect the user locale settings when the site has a default locale and the administrator
     260         * uses the site default.
     261         *
     262         * @ticket 43985
     263         */
     264        public function test_should_send_user_request_email_in_user_locale_when_site_has_non_default_locale() {
     265                update_option( 'WPLANG', 'es_ES' );
     266                switch_to_locale( 'es_ES' );
     267
     268                $email         = 'remove.request.from.user@example.com';
     269                $admin_user_id = $this->factory->user->create(
     270                        array(
     271                                'user_email' => 'admin@local.test',
     272                                'role'       => 'administrator',
     273                        )
     274                );
     275                $user_id       = $this->factory->user->create(
     276                        array(
     277                                'user_email' => $email,
     278                                'locale'     => 'de_DE',
     279                                'role'       => 'author',
     280                        )
     281                );
     282
     283                wp_set_current_user( $admin_user_id );
     284                $request_id = wp_create_user_request( $email, 'remove_personal_data' );
     285
     286                $result = wp_send_user_request( $request_id );
     287                $mailer = tests_retrieve_phpmailer_instance();
     288
     289                $this->assertContains( 'Aktion bestätigen', $mailer->get_sent()->subject );
     290
     291                restore_current_locale();
     292                delete_option( 'WPLANG' );
     293        }
     294
     295        /**
     296         * The function should respect the user locale settings when the site has a default locale, the administrator
     297         * has a different locale, and the user uses the site's default.
     298         *
     299         * @ticket 43985
     300         */
     301        public function test_should_send_user_request_email_in_user_locale_when_admin_has_different_locale_than_site() {
     302                update_option( 'WPLANG', 'es_ES' );
     303                switch_to_locale( 'es_ES' );
     304
     305                $email         = 'export.request.from.user@example.com';
     306                $admin_user_id = $this->factory->user->create(
     307                        array(
     308                                'user_email' => 'admin@local.test',
     309                                'locale'     => 'de_DE',
     310                                'role'       => 'administrator',
     311                        )
     312                );
     313                $user_id       = $this->factory->user->create(
     314                        array(
     315                                'user_email' => $email,
     316                                'role'       => 'author',
     317                        )
     318                );
     319
     320                wp_set_current_user( $admin_user_id );
     321
     322                $request_id = wp_create_user_request( $email, 'export_personal_data' );
     323
     324                $result = wp_send_user_request( $request_id );
     325                $mailer = tests_retrieve_phpmailer_instance();
     326
     327                $this->assertContains( 'Confirma la', $mailer->get_sent()->subject );
     328
     329                restore_current_locale();
     330                delete_option( 'WPLANG' );
     331        }
     332
     333        /**
     334         * The function should respect the user locale settings when the site has a default locale and both the
     335         * administrator and the user use different locales.
     336         *
     337         * @ticket 43985
     338         */
     339        public function test_should_send_user_request_email_in_user_locale_when_admin_and_site_have_different_locales() {
     340                update_option( 'WPLANG', 'es_ES' );
     341                switch_to_locale( 'es_ES' );
     342
     343                $email         = 'export.request.from.user@example.com';
     344                $admin_user_id = $this->factory->user->create(
     345                        array(
     346                                'user_email' => 'admin@local.test',
     347                                'locale'     => 'de_DE',
     348                                'role'       => 'administrator',
     349                        )
     350                );
     351                $user_id       = $this->factory->user->create(
     352                        array(
     353                                'user_email' => $email,
     354                                'role'       => 'author',
     355                                'locale'     => 'en_US',
     356                        )
     357                );
     358
     359                wp_set_current_user( $admin_user_id );
     360
     361                $request_id = wp_create_user_request( $email, 'export_personal_data' );
     362
     363                $result = wp_send_user_request( $request_id );
     364                $mailer = tests_retrieve_phpmailer_instance();
     365
     366                $this->assertContains( 'Confirm Action', $mailer->get_sent()->subject );
     367
     368                restore_current_locale();
     369                delete_option( 'WPLANG' );
     370        }
     371
     372        /**
     373         * The function should respect the site's locale when the request is for an unregistered user and the
     374         * administrator does not use the site's locale.
     375         *
     376         * @ticket 43985
     377         */
     378        public function test_should_send_user_request_email_in_site_locale() {
     379                delete_option( 'WPLANG' );
     380
     381                $email         = 'erase-user-not-registered@example.com';
     382                $admin_user_id = $this->factory->user->create(
     383                        array(
     384                                'user_email' => 'admin@local.test',
     385                                'role'       => 'administrator',
     386                                'locale'     => 'es_ES',
     387                        )
     388                );
     389
     390                wp_set_current_user( $admin_user_id );
     391                $request_id = wp_create_user_request( $email, 'erase_personal_data' );
     392
     393                $result = wp_send_user_request( $request_id );
     394                $mailer = tests_retrieve_phpmailer_instance();
     395
     396                $this->assertContains( 'Confirm Action', $mailer->get_sent()->subject );
     397        }
     398
     399        /**
     400         * The function should respect the site's locale when it is not the default (en_US), the request is for an
     401         * unregistered user and the administrator does not use the site's locale.
     402         *
     403         * @ticket 43985
     404         */
     405        public function test_should_send_user_request_email_in_site_locale_not_default() {
     406                update_option( 'WPLANG', 'es_ES' );
     407                switch_to_locale( 'es_ES' );
     408
     409                $email         = 'export-user-not-registered@example.com';
     410                $admin_user_id = $this->factory->user->create(
     411                        array(
     412                                'user_email' => 'admin@local.test',
     413                                'role'       => 'administrator',
     414                                'locale'     => 'de_DE',
     415                        )
     416                );
     417
     418                wp_set_current_user( $admin_user_id );
     419                $request_id = wp_create_user_request( $email, 'export_personal_data' );
     420
     421                $result = wp_send_user_request( $request_id );
     422                $mailer = tests_retrieve_phpmailer_instance();
     423
     424                $this->assertContains( 'Confirma la', $mailer->get_sent()->subject );
     425
     426                restore_current_locale();
     427                delete_option( 'WPLANG' );
     428        }
     429
     430}