
| Current Path : /var/www/html/pallets_old/pallets/web/core/modules/user/tests/src/Kernel/ |
Linux ift1.ift-informatik.de 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64 |
| Current File : /var/www/html/pallets_old/pallets/web/core/modules/user/tests/src/Kernel/UserMailNotifyTest.php |
<?php
namespace Drupal\Tests\user\Kernel;
use Drupal\Core\Test\AssertMailTrait;
use Drupal\KernelTests\Core\Entity\EntityKernelTestBase;
use Drupal\language\Entity\ConfigurableLanguage;
use Drupal\locale\Locale;
/**
* Tests _user_mail_notify() use of user.settings.notify.*.
*
* @group user
*/
class UserMailNotifyTest extends EntityKernelTestBase {
/**
* Modules to enable.
*
* @var array
*/
protected static $modules = [
'locale',
'language',
];
use AssertMailTrait {
getMails as drupalGetMails;
}
/**
* Data provider for user mail testing.
*
* @return array
*/
public function userMailsProvider() {
return [
'cancel confirm notification' => [
'cancel_confirm',
['cancel_confirm'],
],
'password reset notification' => [
'password_reset',
['password_reset'],
],
'status activated notification' => [
'status_activated',
['status_activated'],
],
'status blocked notification' => [
'status_blocked',
['status_blocked'],
],
'status canceled notification' => [
'status_canceled',
['status_canceled'],
],
'register admin created notification' => [
'register_admin_created',
['register_admin_created'],
],
'register no approval required notification' => [
'register_no_approval_required',
['register_no_approval_required'],
],
'register pending approval notification' => [
'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->installConfig('user');
$this->config('user.settings')->set('notify.' . $op, TRUE)->save();
$return = _user_mail_notify($op, $this->createUser());
$this->assertTrue($return);
foreach ($mail_keys as $key) {
$filter = ['key' => $key];
$this->assertNotEmpty($this->getMails($filter));
}
$this->assertSameSize($mail_keys, $this->getMails());
}
/**
* Tests mails are not sent when notify.$op is FALSE.
*
* @param string $op
* The operation being performed on the account.
*
* @dataProvider userMailsProvider
*/
public function testUserMailsNotSent($op) {
$this->config('user.settings')->set('notify.' . $op, FALSE)->save();
$return = _user_mail_notify($op, $this->createUser());
$this->assertNull($return);
$this->assertEmpty($this->getMails());
}
/**
* Tests the deprecated $langcode argument to _user_mail_notify().
*
* @group legacy
*/
public function testUserMailNotifyLangcodeDeprecation() {
$account = $this->createUser();
$this->expectDeprecation('Specifying the notification language using the $langcode parameter is deprecated in drupal:9.2.0 and is removed from drupal:10.0.0. Omit the parameter. See https://www.drupal.org/node/3187082');
_user_mail_notify('password_reset', $account, $account->getPreferredLangcode());
}
/**
* Tests recovery email content and token langcode is aligned.
*/
public function testUserRecoveryMailLanguage() {
// Install locale schema.
$this->installSchema('locale', [
'locales_source',
'locales_target',
'locales_location',
]);
// Add new language for translation purpose.
ConfigurableLanguage::createFromLangcode('zh-hant')->save();
ConfigurableLanguage::createFromLangcode('fr')->save();
// Install configs.
$this->installConfig(['language', 'locale', 'user']);
locale_system_set_config_langcodes();
$langcodes = array_keys(\Drupal::languageManager()->getLanguages());
$names = Locale::config()->getComponentNames();
Locale::config()->updateConfigTranslations($names, $langcodes);
$this->config('user.settings')->set('notify.password_reset', TRUE)->save();
// Set language prefix.
$config = $this->config('language.negotiation');
$config->set('url.prefixes', ['en' => 'en', 'zh-hant' => 'zh', 'fr' => 'fr'])->save();
// Reset services to apply change.
\Drupal::service('kernel')->rebuildContainer();
// Update zh-hant password_reset config with custom translation.
$configLanguageOverride = $this->container->get('language_manager')->getLanguageConfigOverride('zh-hant', 'user.mail');
$configLanguageOverride->set('password_reset.subject', 'hant subject [user:display-name]')->save();
$configLanguageOverride->set('password_reset.body', 'hant body [user:display-name] and token link [user:one-time-login-url]')->save();
// Update fr password_reset config with custom translation.
$configLanguageOverride = $this->container->get('language_manager')->getLanguageConfigOverride('fr', 'user.mail');
$configLanguageOverride->set('password_reset.subject', 'fr subject [user:display-name]')->save();
$configLanguageOverride->set('password_reset.body', 'fr body [user:display-name] and token link [user:one-time-login-url]')->save();
// Current language is 'en'.
$currentLanguage = $this->container->get('language_manager')->getCurrentLanguage()->getId();
$this->assertSame('en', $currentLanguage);
// Set preferred_langcode to 'zh-hant'.
$user = $this->createUser();
$user->set('preferred_langcode', 'zh-hant')->save();
$preferredLangcode = $user->getPreferredLangcode();
$this->assertSame('zh-hant', $preferredLangcode);
// Recovery email should respect user preferred langcode by default if
// langcode not set.
$params['account'] = $user;
$default_email = \Drupal::service('plugin.manager.mail')->mail('user', 'password_reset', $user->getEmail(), $preferredLangcode, $params);
$this->assertTrue($default_email['result']);
// Assert for zh.
$this->assertMailString('subject', 'hant subject', 1);
$this->assertMailString('body', 'hant body', 1);
$this->assertMailString('body', 'zh/user/reset', 1);
// Recovery email should be fr when langcode specified.
$french_email = \Drupal::service('plugin.manager.mail')->mail('user', 'password_reset', $user->getEmail(), 'fr', $params);
$this->assertTrue($french_email['result']);
// Assert for fr.
$this->assertMailString('subject', 'fr subject', 1);
$this->assertMailString('body', 'fr body', 1);
$this->assertMailString('body', 'fr/user/reset', 1);
}
}