Issue #2765437 by gambry, alexpott: _user_mail_notify() always sends emails even if is FALSE
parent
24343f970b
commit
98889d33d1
|
@ -0,0 +1,76 @@
|
|||
<?php
|
||||
|
||||
namespace Drupal\user\Tests;
|
||||
|
||||
use Drupal\Core\Test\AssertMailTrait;
|
||||
use Drupal\KernelTests\Core\Entity\EntityKernelTestBase;
|
||||
|
||||
/**
|
||||
* Tests _user_mail_notify() use of user.settings.notify.*.
|
||||
*
|
||||
* @group user
|
||||
*/
|
||||
class UserMailNotifyTest extends EntityKernelTestBase {
|
||||
|
||||
use AssertMailTrait {
|
||||
getMails as drupalGetMails;
|
||||
}
|
||||
|
||||
/**
|
||||
* Data provider for user mail testing.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function userMailsProvider() {
|
||||
return [
|
||||
['cancel_confirm', ['cancel_confirm']],
|
||||
['password_reset', ['password_reset']],
|
||||
['status_activated', ['status_activated']],
|
||||
['status_blocked', ['status_blocked']],
|
||||
['status_canceled', ['status_canceled']],
|
||||
['register_admin_created', ['register_admin_created']],
|
||||
['register_no_approval_required', ['register_no_approval_required']],
|
||||
['register_pending_approval', ['register_pending_approval', 'register_pending_approval_admin']]
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests mails are sent when notify.$op is TRUE.
|
||||
*
|
||||
* @param string $op
|
||||
* The operation being performed on the account.
|
||||
* @param array $mail_keys
|
||||
* The mail keys to test for.
|
||||
*
|
||||
* @dataProvider userMailsProvider
|
||||
*/
|
||||
public function testUserMailsSent($op, array $mail_keys) {
|
||||
$this->config('user.settings')->set('notify.' . $op, TRUE)->save();
|
||||
$return = _user_mail_notify($op, $this->createUser());
|
||||
$this->assertTrue($return, '_user_mail_notify() returns TRUE.');
|
||||
foreach ($mail_keys as $key) {
|
||||
$filter = array('key' => $key);
|
||||
$this->assertNotEmpty($this->getMails($filter), "Mails with $key exists.");
|
||||
}
|
||||
$this->assertCount(count($mail_keys), $this->getMails(), 'The expected number of emails sent.');
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests mails are not sent when notify.$op is FALSE.
|
||||
*
|
||||
* @param string $op
|
||||
* The operation being performed on the account.
|
||||
* @param array $mail_keys
|
||||
* The mail keys to test for. Ignored by this test because we assert that no
|
||||
* mails at all are sent.
|
||||
*
|
||||
* @dataProvider userMailsProvider
|
||||
*/
|
||||
public function testUserMailsNotSent($op, array $mail_keys) {
|
||||
$this->config('user.settings')->set('notify.' . $op, FALSE)->save();
|
||||
$return = _user_mail_notify($op, $this->createUser());
|
||||
$this->assertFalse($return, '_user_mail_notify() returns FALSE.');
|
||||
$this->assertEmpty($this->getMails(), 'No emails sent by _user_mail_notify().');
|
||||
}
|
||||
|
||||
}
|
|
@ -1197,9 +1197,7 @@ function user_role_revoke_permissions($rid, array $permissions = array()) {
|
|||
* @see user_mail_tokens()
|
||||
*/
|
||||
function _user_mail_notify($op, $account, $langcode = NULL) {
|
||||
// By default, we always notify except for canceled and blocked.
|
||||
$notify = \Drupal::config('user.settings')->get('notify.' . $op);
|
||||
if ($notify || ($op != 'status_canceled' && $op != 'status_blocked')) {
|
||||
if (\Drupal::config('user.settings')->get('notify.' . $op)) {
|
||||
$params['account'] = $account;
|
||||
$langcode = $langcode ? $langcode : $account->getPreferredLangcode();
|
||||
// Get the custom site notification email to use as the from email address
|
||||
|
|
Loading…
Reference in New Issue