WordPress.org

Make WordPress Core

Ticket #43985: 43985.4.3.diff

File 43985.4.3.diff, 8.4 KB (added by birgire, 19 months ago)
  • 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 0000000..b752e5e
    - +  
     1<?php
     2/**
     3 * Test cases for the `wp_send_user_request()` function.
     4 *
     5 * @since 4.9.7
     6 */
     7
     8/**
     9 * Tests_User_WpSendUserRequest class.
     10 *
     11 * @since 4.9.7
     12 *
     13 * @group privacy
     14 * @group user
     15 * @covers wp_send_user_request
     16 */
     17class Tests_User_WpSendUserRequest extends WP_UnitTestCase {
     18        /**
     19         * Reset the mocked phpmailer instance before each test method.
     20         *
     21         * @since 4.9.7
     22         */
     23        function setUp() {
     24                parent::setUp();
     25                reset_phpmailer_instance();
     26        }
     27
     28        /**
     29         * Reset the mocked phpmailer instance after each test method.
     30         *
     31         * @since 4.9.7
     32         */
     33        function tearDown() {
     34                reset_phpmailer_instance();
     35                parent::tearDown();
     36        }
     37
     38        /**
     39         * The function should send an user request export email when the requester is a registered user.
     40         *
     41         * @ticket 43985
     42         */
     43        public function test_function_should_send_user_request_export_email_when_requester_registered_user() {
     44                $email      = 'export.request.from.user@example.com';
     45                $user_id    = $this->factory->user->create(
     46                        array(
     47                                'user_email' => $email,
     48                                'role'       => 'administrator',
     49                        )
     50                );
     51                $request_id = wp_create_user_request( $email, 'export_personal_data' );
     52
     53                $email_sent = wp_send_user_request( $request_id );
     54                $mailer     = tests_retrieve_phpmailer_instance();
     55
     56                $this->assertTrue( $email_sent );
     57                $this->assertSame( $email, $mailer->get_recipient( 'to' )->address );
     58                $this->assertContains( 'Confirm Action: Export Personal Data', $mailer->get_sent()->subject );
     59                $this->assertContains( 'action=confirmaction&request_id=', $mailer->get_sent()->body );
     60                $this->assertContains( 'Export Personal Data', $mailer->get_sent()->body );
     61        }
     62
     63        /**
     64         * The function should send an user request erase email when the requester is a registered user.
     65         *
     66         * @ticket 43985
     67         */
     68        public function test_function_should_send_user_request_erease_email_when_requester_registered_user() {
     69                $email      = 'erase.request.from.user@example.com';
     70                $user_id    = $this->factory->user->create(
     71                        array(
     72                                'user_email' => $email,
     73                                'role'       => 'author',
     74                        )
     75                );
     76                $request_id = wp_create_user_request( $email, 'remove_personal_data' );
     77
     78                $email_sent = wp_send_user_request( $request_id );
     79                $mailer     = tests_retrieve_phpmailer_instance();
     80
     81                $this->assertTrue( $email_sent );
     82                $this->assertSame( $email, $mailer->get_recipient( 'to' )->address );
     83                $this->assertContains( 'Confirm Action: Erase Personal Data', $mailer->get_sent()->subject );
     84                $this->assertContains( 'action=confirmaction&request_id=', $mailer->get_sent()->body );
     85                $this->assertContains( 'Erase Personal Data', $mailer->get_sent()->body );
     86        }
     87
     88        /**
     89         * The function should send an user request erase email when the requester is an un-registered user.
     90         *
     91         * @ticket 43985
     92         */
     93        public function test_function_should_send_user_request_erase_email_when_user_not_registered() {
     94                $email      = 'erase.request.from.unregistered.user@example.com';
     95                $request_id = wp_create_user_request( $email, 'remove_personal_data' );
     96
     97                $email_sent = wp_send_user_request( $request_id );
     98                $mailer     = tests_retrieve_phpmailer_instance();
     99
     100                $this->assertTrue( $email_sent );
     101                $this->assertSame( $email, $mailer->get_recipient( 'to' )->address );
     102                $this->assertContains( 'Confirm Action: Erase Personal Data', $mailer->get_sent()->subject );
     103                $this->assertContains( 'action=confirmaction&request_id=', $mailer->get_sent()->body );
     104                $this->assertContains( 'Erase Personal Data', $mailer->get_sent()->body );
     105        }
     106
     107        /**
     108         * The function should respect the user locale settings when the requester is a registered user.
     109         *
     110         * @ticket 43985
     111         */
     112        public function test_function_should_send_user_request_email_in_user_language() {
     113                $email      = 'export.request.from.user@example.com';
     114                $user_id    = $this->factory->user->create(
     115                        array(
     116                                'user_email' => $email,
     117                                'locale'     => 'es_ES',
     118                                'role'       => 'author',
     119                        )
     120                );
     121                $request_id = wp_create_user_request( $email, 'export_personal_data' );
     122
     123                $email_sent = wp_send_user_request( $request_id );
     124                $mailer     = tests_retrieve_phpmailer_instance();
     125
     126                $this->assertContains( 'Confirma la', $mailer->get_sent()->subject );
     127        }
     128
     129        /**
     130         * The function should error when the request ID is invalid.
     131         *
     132         * @ticket 43985
     133         */
     134        public function test_function_should_error_when_invalid_request_id() {
     135                $request_id = null; // Invalid request ID.
     136
     137                $email_sent = wp_send_user_request( $request_id );
     138
     139                $this->assertWPError( $email_sent );
     140                $this->assertSame( 'Invalid request.', $email_sent->get_error_message() );
     141        }
     142
     143        /**
     144         * The email subject should be filterable.
     145         *
     146         * @ticket 43985
     147         */
     148        public function test_email_subject_should_be_filterable() {
     149                $email      = 'erase.request.from.user@example.com';
     150                $user_id    = $this->factory->user->create(
     151                        array(
     152                                'user_email' => $email,
     153                        )
     154                );
     155                $request_id = wp_create_user_request( $email, 'remove_personal_data' );
     156
     157                add_filter( 'user_request_action_email_subject', array( $this, 'modify_email_subject' ), 10, 3 );
     158                $email_sent = wp_send_user_request( $request_id );
     159                $mailer     = tests_retrieve_phpmailer_instance();
     160                remove_filter( 'user_request_action_email_subject', array( $this, 'modify_email_subject' ), 10 );
     161
     162                $this->assertTrue( $email_sent );
     163                $this->assertSame( 'Custom Subject Containing Email:' . $email, $mailer->get_sent()->subject );
     164        }
     165
     166        /**
     167         * Filter callback to modify the subject of the email sent when an account action is attempted.
     168         *
     169         * @since 4.9.7
     170         *
     171         * @param string $subject    The email subject.
     172         * @param string $blogname   The name of the site.
     173         * @param array  $email_data {
     174         *     Data relating to the account action email.
     175         *
     176         *     @type WP_User_Request $request     User request object.
     177         *     @type string          $email       The email address this is being sent to.
     178         *     @type string          $description Description of the action being performed so the user knows what the email is for.
     179         *     @type string          $confirm_url The link to click on to confirm the account action.
     180         *     @type string          $sitename    The site name sending the mail.
     181         *     @type string          $siteurl     The site URL sending the mail.
     182         * }
     183         */
     184        public function modify_email_subject( $subject, $blogname, $emaildata ) {
     185                $subject = 'Custom Subject Containing Email:' . $emaildata['email'];
     186                return $subject;
     187        }
     188
     189        /**
     190         * The email content should be filterable.
     191         *
     192         * @ticket 43985
     193         */
     194        public function test_email_content_should_be_filterable() {
     195                $email      = 'erase.request.from.user@example.com';
     196                $user_id    = $this->factory->user->create(
     197                        array(
     198                                'user_email' => $email,
     199                        )
     200                );
     201                $request_id = wp_create_user_request( $email, 'remove_personal_data' );
     202
     203                add_filter( 'user_request_action_email_content', array( $this, 'modify_email_content' ), 10, 2 );
     204                $email_sent = wp_send_user_request( $request_id );
     205                $mailer     = tests_retrieve_phpmailer_instance();
     206                remove_filter( 'user_request_action_email_content', array( $this, 'modify_email_content' ), 10 );
     207
     208                $this->assertTrue( $email_sent );
     209                $this->assertContains( 'Custom Content Containing Email:' . $email, $mailer->get_sent()->body );
     210        }
     211
     212        /**
     213         * Filter callback to modify the content of the email sent when an account action is attempted.
     214         *
     215         * @since 4.9.7
     216         *
     217         * @param string $email_text Text in the email.
     218         * @param array  $email_data {
     219         *     Data relating to the account action email.
     220         *
     221         *     @type WP_User_Request $request     User request object.
     222         *     @type string          $email       The email address this is being sent to.
     223         *     @type string          $description Description of the action being performed so the user knows what the email is for.
     224         *     @type string          $confirm_url The link to click on to confirm the account action.
     225         *     @type string          $sitename    The site name sending the mail.
     226         *     @type string          $siteurl     The site URL sending the mail.
     227         * }
     228         * @return string $email_text Text in the email.
     229         */
     230        public function modify_email_content( $email_text, $emaildata ) {
     231                $content = 'Custom Content Containing Email:' . $emaildata['email'];
     232                return $content;
     233        }
     234
     235}