summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/private/Accounts/AccountManager.php5
-rw-r--r--tests/lib/Accounts/AccountManagerTest.php39
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]);
+ }
}