summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNathaniel Catchpole2016-08-15 08:39:21 +0100
committerNathaniel Catchpole2016-08-15 08:39:50 +0100
commitaab484ce07a6b0fa411acf31880fa14b4178bb2c (patch)
treed9875a9cc3857e0ae29b38284a6f268b2c7e2187
parent94becf07e5beaabf36c610e8e016b4db5ff86d14 (diff)
Issue #2765437 by gambry, alexpott: _user_mail_notify() always sends emails even if is FALSE
(cherry picked from commit 98889d33d16163a252ea5bb182615256082a8a0e)
-rw-r--r--core/modules/user/src/Tests/UserMailNotifyTest.php76
-rw-r--r--core/modules/user/user.module4
2 files changed, 77 insertions, 3 deletions
diff --git a/core/modules/user/src/Tests/UserMailNotifyTest.php b/core/modules/user/src/Tests/UserMailNotifyTest.php
new file mode 100644
index 0000000..9943c5b
--- /dev/null
+++ b/core/modules/user/src/Tests/UserMailNotifyTest.php
@@ -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().');
+ }
+
+}
diff --git a/core/modules/user/user.module b/core/modules/user/user.module
index 12adb4a..04992a0 100644
--- a/core/modules/user/user.module
+++ b/core/modules/user/user.module
@@ -1195,9 +1195,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