Skip to content
Snippets Groups Projects
Verified Commit ed1baed5 authored by Lee Rowlands's avatar Lee Rowlands
Browse files

Issue #3488835 by mcdruid, atul_ghate, benjifisher, catch, cilefen,...

Issue #3488835 by mcdruid, atul_ghate, benjifisher, catch, cilefen, zengenuity, larowlan, poker10, longwave, damienmckenna, greggles, kristiaanvandeneynde: Status report confuses null email with duplicate email

(cherry picked from commit 9ed8a79f)
parent 8638abca
No related branches found
No related tags found
1 merge request!11185Issue #3477324 by andypost, alexpott: Fix usage of str_getcsv() and fgetcsv() for PHP 8.4
Pipeline #373373 passed with warnings
Pipeline: drupal

#373417

    Pipeline: drupal

    #373413

      Pipeline: drupal

      #373408

        +7
        <?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);
        }
        }
        ...@@ -137,6 +137,14 @@ public function testValidation(): void { ...@@ -137,6 +137,14 @@ public function testValidation(): void {
        $this->assertCount(1, $violations, 'Violation found when email already exists.'); $this->assertCount(1, $violations, 'Violation found when email already exists.');
        $this->assertEquals('mail', $violations[0]->getPropertyPath()); $this->assertEquals('mail', $violations[0]->getPropertyPath());
        $this->assertEquals('The email address existing@example.com is already taken.', $violations[0]->getMessage()); $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); $user->set('mail', NULL);
        $violations = $user->validate(); $violations = $user->validate();
        $this->assertCount(1, $violations, 'Email addresses may not be removed'); $this->assertCount(1, $violations, 'Email addresses may not be removed');
        ......
        ...@@ -120,6 +120,7 @@ function user_requirements($phase): array { ...@@ -120,6 +120,7 @@ function user_requirements($phase): array {
        $query = \Drupal::database()->select('users_field_data'); $query = \Drupal::database()->select('users_field_data');
        $query->addExpression('LOWER(mail)', 'lower_mail'); $query->addExpression('LOWER(mail)', 'lower_mail');
        $query->isNotNull('mail');
        $query->groupBy('lower_mail'); $query->groupBy('lower_mail');
        $query->having('COUNT(uid) > :matches', [':matches' => 1]); $query->having('COUNT(uid) > :matches', [':matches' => 1]);
        $conflicts = $query->countQuery()->execute()->fetchField(); $conflicts = $query->countQuery()->execute()->fetchField();
        ......
        0% Loading or .
        You are about to add 0 people to the discussion. Proceed with caution.
        Finish editing this message first!
        Please register or to comment