mirror of
https://github.com/nextcloud/server.git
synced 2025-03-04 20:14:50 +00:00
116 lines
3.4 KiB
PHP
116 lines
3.4 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
/**
|
|
* SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
|
|
* SPDX-License-Identifier: AGPL-3.0-or-later
|
|
*/
|
|
namespace OC\Repair\NC29;
|
|
|
|
use InvalidArgumentException;
|
|
use OCP\Accounts\IAccount;
|
|
use OCP\Accounts\IAccountManager;
|
|
use OCP\Accounts\IAccountProperty;
|
|
use OCP\AppFramework\Utility\ITimeFactory;
|
|
use OCP\IUser;
|
|
use OCP\IUserManager;
|
|
use PHPUnit\Framework\MockObject\MockObject;
|
|
use Psr\Log\LoggerInterface;
|
|
use Test\TestCase;
|
|
|
|
class SanitizeAccountPropertiesJobTest extends TestCase {
|
|
|
|
private IUserManager&MockObject $userManager;
|
|
private IAccountManager&MockObject $accountManager;
|
|
private LoggerInterface&MockObject $logger;
|
|
|
|
private SanitizeAccountPropertiesJob $job;
|
|
|
|
protected function setUp(): void {
|
|
$this->userManager = $this->createMock(IUserManager::class);
|
|
$this->accountManager = $this->createMock(IAccountManager::class);
|
|
$this->logger = $this->createMock(LoggerInterface::class);
|
|
|
|
$this->job = new SanitizeAccountPropertiesJob(
|
|
$this->createMock(ITimeFactory::class),
|
|
$this->userManager,
|
|
$this->accountManager,
|
|
$this->logger,
|
|
);
|
|
}
|
|
|
|
public function testParallel() {
|
|
self::assertFalse($this->job->getAllowParallelRuns());
|
|
}
|
|
|
|
public function testRun(): void {
|
|
$users = [
|
|
$this->createMock(IUser::class),
|
|
$this->createMock(IUser::class),
|
|
$this->createMock(IUser::class),
|
|
];
|
|
$this->userManager
|
|
->expects(self::once())
|
|
->method('callForSeenUsers')
|
|
->willReturnCallback(fn ($fn) => array_map($fn, $users));
|
|
|
|
$property = $this->createMock(IAccountProperty::class);
|
|
$property->expects(self::once())->method('getName')->willReturn(IAccountManager::PROPERTY_PHONE);
|
|
$property->expects(self::once())->method('getScope')->willReturn(IAccountManager::SCOPE_LOCAL);
|
|
|
|
$account1 = $this->createMock(IAccount::class);
|
|
$account1->expects(self::once())
|
|
->method('getProperty')
|
|
->with(IAccountManager::PROPERTY_PHONE)
|
|
->willReturn($property);
|
|
$account1->expects(self::once())
|
|
->method('setProperty')
|
|
->with(IAccountManager::PROPERTY_PHONE, '', IAccountManager::SCOPE_LOCAL, IAccountManager::NOT_VERIFIED);
|
|
$account1->expects(self::once())
|
|
->method('jsonSerialize')
|
|
->willReturn([
|
|
IAccountManager::PROPERTY_DISPLAYNAME => [],
|
|
IAccountManager::PROPERTY_PHONE => [],
|
|
]);
|
|
|
|
$account2 = $this->createMock(IAccount::class);
|
|
$account2->expects(self::never())
|
|
->method('getProperty');
|
|
$account2->expects(self::once())
|
|
->method('jsonSerialize')
|
|
->willReturn([
|
|
IAccountManager::PROPERTY_DISPLAYNAME => [],
|
|
IAccountManager::PROPERTY_PHONE => [],
|
|
]);
|
|
|
|
$account3 = $this->createMock(IAccount::class);
|
|
$account3->expects(self::never())
|
|
->method('getProperty');
|
|
$account3->expects(self::once())
|
|
->method('jsonSerialize')
|
|
->willReturn([
|
|
IAccountManager::PROPERTY_DISPLAYNAME => [],
|
|
]);
|
|
|
|
$this->accountManager
|
|
->expects(self::exactly(3))
|
|
->method('getAccount')
|
|
->willReturnMap([
|
|
[$users[0], $account1],
|
|
[$users[1], $account2],
|
|
[$users[2], $account3],
|
|
]);
|
|
$valid = false;
|
|
$this->accountManager->expects(self::exactly(3))
|
|
->method('updateAccount')
|
|
->willReturnCallback(function (IAccount $account) use (&$account1, &$valid) {
|
|
if (!$valid && $account === $account1) {
|
|
$valid = true;
|
|
throw new InvalidArgumentException(IAccountManager::PROPERTY_PHONE);
|
|
}
|
|
});
|
|
|
|
self::invokePrivate($this->job, 'run', [null]);
|
|
}
|
|
}
|