diff options
-rw-r--r-- | lib/private/Accounts/AccountManager.php | 5 | ||||
-rw-r--r-- | tests/lib/Accounts/AccountManagerTest.php | 39 |
2 files changed, 43 insertions, 1 deletions
diff --git a/lib/private/Accounts/AccountManager.php b/lib/private/Accounts/AccountManager.php index 2c7641243fa..cdfb123179e 100644 --- a/lib/private/Accounts/AccountManager.php +++ b/lib/private/Accounts/AccountManager.php @@ -388,7 +388,10 @@ class AccountManager implements IAccountManager { } catch (PropertyDoesNotExistException $e) { return; } - $oldMail = isset($oldData[self::PROPERTY_EMAIL]) ? $oldData[self::PROPERTY_EMAIL]['value']['value'] : ''; + + $oldMailIndex = array_search(self::PROPERTY_EMAIL, array_column($oldData, 'name'), true); + $oldMail = $oldMailIndex !== false ? $oldData[$oldMailIndex]['value'] : ''; + if ($oldMail !== $property->getValue()) { $this->jobList->add( VerifyUserData::class, diff --git a/tests/lib/Accounts/AccountManagerTest.php b/tests/lib/Accounts/AccountManagerTest.php index 8bb60a1a516..18419d73423 100644 --- a/tests/lib/Accounts/AccountManagerTest.php +++ b/tests/lib/Accounts/AccountManagerTest.php @@ -24,6 +24,7 @@ namespace Test\Accounts; use OC\Accounts\Account; use OC\Accounts\AccountManager; +use OCA\Settings\BackgroundJobs\VerifyUserData; use OCP\Accounts\IAccountManager; use OCP\BackgroundJob\IJobList; use OCP\Defaults; @@ -770,4 +771,42 @@ class AccountManagerTest extends TestCase { ], ]; } + + public function dataCheckEmailVerification(): array { + return [ + [$this->makeUser('steve', 'Steve Smith', 'steve@steve.steve'), null], + [$this->makeUser('emma', 'Emma Morales', 'emma@emma.com'), 'emma@morales.com'], + [$this->makeUser('sarah@web.org', 'Sarah Foster', 'sarah@web.org'), null], + [$this->makeUser('cole@web.org', 'Cole Harrison', 'cole@web.org'), 'cole@example.com'], + [$this->makeUser('8d29e358-cf69-4849-bbf9-28076c0b908b', 'Alice McPherson', 'alice@example.com'), 'alice@mcpherson.com'], + [$this->makeUser('11da2744-3f4d-4c17-8c13-4c057a379237', 'James Loranger', 'james@example.com'), ''], + ]; + } + + /** + * @dataProvider dataCheckEmailVerification + */ + public function testCheckEmailVerification(IUser $user, ?string $newEmail): void { + $account = $this->accountManager->getAccount($user); + $emailUpdated = false; + + if (!empty($newEmail)) { + $account->getProperty(IAccountManager::PROPERTY_EMAIL)->setValue($newEmail); + $emailUpdated = true; + } + + if ($emailUpdated) { + $this->jobList->expects($this->once()) + ->method('add') + ->with(VerifyUserData::class); + } else { + $this->jobList->expects($this->never()) + ->method('add') + ->with(VerifyUserData::class); + } + + /** @var array $oldData */ + $oldData = $this->invokePrivate($this->accountManager, 'getUser', [$user, false]); + $this->invokePrivate($this->accountManager, 'checkEmailVerification', [$account, $oldData]); + } } |