Loading core/modules/user/tests/src/Kernel/UserRequirementsTest.php 0 → 100644 +65 −0 Original line number Diff line number Diff line <?php declare(strict_types=1); namespace Drupal\Tests\user\Kernel; use Drupal\KernelTests\KernelTestBase; use Drupal\Tests\user\Traits\UserCreationTrait; /** * Tests user_requirements(). * * @group user */ class UserRequirementsTest extends KernelTestBase { use UserCreationTrait; /** * {@inheritdoc} */ protected static $modules = ['user']; /** * {@inheritdoc} */ protected function setUp(): void { parent::setUp(); $this->container->get('module_handler')->loadInclude('user', 'install'); $this->installEntitySchema('user'); } /** * Tests that the requirements check can detect conflicting user emails. * * @see \Drupal\Tests\user\Kernel\UserValidationTest::testValidation */ public function testConflictingUserEmails(): void { $output = \user_requirements('runtime'); $this->assertArrayNotHasKey('conflicting emails', $output); $this->createUser([], 'User A', FALSE, ['mail' => 'unique@example.com']); $this->createUser([], 'User B', FALSE, ['mail' => 'UNIQUE@example.com']); $output = \user_requirements('runtime'); $this->assertArrayHasKey('conflicting emails', $output); } /** * Tests that the requirements check does not incorrectly flag blank emails. */ public function testBlankUserEmails(): void { $output = \user_requirements('runtime'); $this->assertArrayNotHasKey('conflicting emails', $output); $this->createUser([], 'User A', FALSE, ['mail' => '']); $this->createUser([], 'User B', FALSE, ['mail' => '']); $output = \user_requirements('runtime'); $this->assertArrayNotHasKey('conflicting emails', $output); } } core/modules/user/tests/src/Kernel/UserValidationTest.php +8 −0 Original line number Diff line number Diff line Loading @@ -137,6 +137,14 @@ public function testValidation(): void { $this->assertCount(1, $violations, 'Violation found when email already exists.'); $this->assertEquals('mail', $violations[0]->getPropertyPath()); $this->assertEquals('The email address existing@example.com is already taken.', $violations[0]->getMessage()); // Ensure case-insensitive uniqueness of email. $user->set('mail', 'EXISTING@example.com'); $violations = $user->validate(); $this->assertCount(1, $violations, 'Violation found when email already exists.'); $this->assertEquals('mail', $violations[0]->getPropertyPath()); $this->assertEquals('The email address EXISTING@example.com is already taken.', $violations[0]->getMessage()); $user->set('mail', NULL); $violations = $user->validate(); $this->assertCount(1, $violations, 'Email addresses may not be removed'); Loading core/modules/user/user.install +1 −0 Original line number Diff line number Diff line Loading @@ -118,6 +118,7 @@ function user_requirements($phase): array { $query = \Drupal::database()->select('users_field_data'); $query->addExpression('LOWER(mail)', 'lower_mail'); $query->isNotNull('mail'); $query->groupBy('lower_mail'); $query->having('COUNT(uid) > :matches', [':matches' => 1]); $conflicts = $query->countQuery()->execute()->fetchField(); Loading Loading
core/modules/user/tests/src/Kernel/UserRequirementsTest.php 0 → 100644 +65 −0 Original line number Diff line number Diff line <?php declare(strict_types=1); namespace Drupal\Tests\user\Kernel; use Drupal\KernelTests\KernelTestBase; use Drupal\Tests\user\Traits\UserCreationTrait; /** * Tests user_requirements(). * * @group user */ class UserRequirementsTest extends KernelTestBase { use UserCreationTrait; /** * {@inheritdoc} */ protected static $modules = ['user']; /** * {@inheritdoc} */ protected function setUp(): void { parent::setUp(); $this->container->get('module_handler')->loadInclude('user', 'install'); $this->installEntitySchema('user'); } /** * Tests that the requirements check can detect conflicting user emails. * * @see \Drupal\Tests\user\Kernel\UserValidationTest::testValidation */ public function testConflictingUserEmails(): void { $output = \user_requirements('runtime'); $this->assertArrayNotHasKey('conflicting emails', $output); $this->createUser([], 'User A', FALSE, ['mail' => 'unique@example.com']); $this->createUser([], 'User B', FALSE, ['mail' => 'UNIQUE@example.com']); $output = \user_requirements('runtime'); $this->assertArrayHasKey('conflicting emails', $output); } /** * Tests that the requirements check does not incorrectly flag blank emails. */ public function testBlankUserEmails(): void { $output = \user_requirements('runtime'); $this->assertArrayNotHasKey('conflicting emails', $output); $this->createUser([], 'User A', FALSE, ['mail' => '']); $this->createUser([], 'User B', FALSE, ['mail' => '']); $output = \user_requirements('runtime'); $this->assertArrayNotHasKey('conflicting emails', $output); } }
core/modules/user/tests/src/Kernel/UserValidationTest.php +8 −0 Original line number Diff line number Diff line Loading @@ -137,6 +137,14 @@ public function testValidation(): void { $this->assertCount(1, $violations, 'Violation found when email already exists.'); $this->assertEquals('mail', $violations[0]->getPropertyPath()); $this->assertEquals('The email address existing@example.com is already taken.', $violations[0]->getMessage()); // Ensure case-insensitive uniqueness of email. $user->set('mail', 'EXISTING@example.com'); $violations = $user->validate(); $this->assertCount(1, $violations, 'Violation found when email already exists.'); $this->assertEquals('mail', $violations[0]->getPropertyPath()); $this->assertEquals('The email address EXISTING@example.com is already taken.', $violations[0]->getMessage()); $user->set('mail', NULL); $violations = $user->validate(); $this->assertCount(1, $violations, 'Email addresses may not be removed'); Loading
core/modules/user/user.install +1 −0 Original line number Diff line number Diff line Loading @@ -118,6 +118,7 @@ function user_requirements($phase): array { $query = \Drupal::database()->select('users_field_data'); $query->addExpression('LOWER(mail)', 'lower_mail'); $query->isNotNull('mail'); $query->groupBy('lower_mail'); $query->having('COUNT(uid) > :matches', [':matches' => 1]); $conflicts = $query->countQuery()->execute()->fetchField(); Loading