aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorArthur Schiwon <blizzz@arthur-schiwon.de>2021-05-17 21:25:18 +0200
committerArthur Schiwon <blizzz@arthur-schiwon.de>2021-06-03 20:49:49 +0200
commitafea57352bc4690656c1a8a75079d25985fe4aa4 (patch)
tree4486b8e43bada7765bdd1a476b3b13fd74f6c374 /tests
parent839bff1641ba1b2fda6b2658d005d606e04ab00a (diff)
downloadnextcloud-server-afea57352bc4690656c1a8a75079d25985fe4aa4.tar.gz
nextcloud-server-afea57352bc4690656c1a8a75079d25985fe4aa4.zip
update unit tests
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
Diffstat (limited to 'tests')
-rw-r--r--tests/lib/Accounts/AccountManagerTest.php182
1 files changed, 166 insertions, 16 deletions
diff --git a/tests/lib/Accounts/AccountManagerTest.php b/tests/lib/Accounts/AccountManagerTest.php
index 9bce92716ac..86f38b9f6ca 100644
--- a/tests/lib/Accounts/AccountManagerTest.php
+++ b/tests/lib/Accounts/AccountManagerTest.php
@@ -26,6 +26,7 @@ use OC\Accounts\AccountManager;
use OCP\Accounts\IAccountManager;
use OCP\BackgroundJob\IJobList;
use OCP\IConfig;
+use OCP\IDBConnection;
use OCP\IUser;
use PHPUnit\Framework\MockObject\MockObject;
use Psr\Log\LoggerInterface;
@@ -59,13 +60,24 @@ class AccountManagerTest extends TestCase {
/** @var LoggerInterface|MockObject */
private $logger;
+ /** @var AccountManager */
+ private $accountManager;
+
protected function setUp(): void {
parent::setUp();
$this->eventDispatcher = $this->createMock(EventDispatcherInterface::class);
- $this->connection = \OC::$server->getDatabaseConnection();
+ $this->connection = \OC::$server->get(IDBConnection::class);
$this->config = $this->createMock(IConfig::class);
$this->jobList = $this->createMock(IJobList::class);
$this->logger = $this->createMock(LoggerInterface::class);
+
+ $this->accountManager = new AccountManager(
+ $this->connection,
+ $this->config,
+ $this->eventDispatcher,
+ $this->jobList,
+ $this->logger,
+ );
}
protected function tearDown(): void {
@@ -74,6 +86,90 @@ class AccountManagerTest extends TestCase {
$query->delete($this->table)->execute();
}
+ protected function makeUser(string $uid, string $name, string $email = null): IUser {
+ $user = $this->createMock(IUser::class);
+ $user->expects($this->any())
+ ->method('getUid')
+ ->willReturn($uid);
+ $user->expects($this->any())
+ ->method('getDisplayName')
+ ->willReturn($name);
+ if ($email !== null) {
+ $user->expects($this->any())
+ ->method('getEMailAddress')
+ ->willReturn($email);
+ }
+
+ return $user;
+ }
+
+ protected function populateOrUpdate(): void {
+ $users = [
+ [
+ 'user' => $this->makeUser('j.doe', 'Jane Doe', 'jane.doe@acme.com'),
+ 'data' => [
+ IAccountManager::PROPERTY_DISPLAYNAME => ['value' => 'Jane Doe', 'scope' => IAccountManager::SCOPE_PUBLISHED],
+ IAccountManager::PROPERTY_EMAIL => ['value' => 'jane.doe@acme.com', 'scope' => IAccountManager::SCOPE_LOCAL],
+ IAccountManager::PROPERTY_TWITTER => ['value' => '@sometwitter', 'scope' => IAccountManager::SCOPE_PUBLISHED],
+ IAccountManager::PROPERTY_PHONE => ['value' => '+491601231212', 'scope' => IAccountManager::SCOPE_FEDERATED],
+ IAccountManager::PROPERTY_ADDRESS => ['value' => 'some street', 'scope' => IAccountManager::SCOPE_LOCAL],
+ IAccountManager::PROPERTY_WEBSITE => ['value' => 'https://acme.com', 'scope' => IAccountManager::SCOPE_PRIVATE],
+ ],
+ ],
+ [
+ 'user' => $this->makeUser('a.allison', 'Alice Allison', 'a.allison@example.org'),
+ 'data' => [
+ IAccountManager::PROPERTY_DISPLAYNAME => ['value' => 'Alice Allison', 'scope' => IAccountManager::SCOPE_LOCAL],
+ IAccountManager::PROPERTY_EMAIL => ['value' => 'a.allison@example.org', 'scope' => IAccountManager::SCOPE_LOCAL],
+ IAccountManager::PROPERTY_TWITTER => ['value' => '@a_alice', 'scope' => IAccountManager::SCOPE_FEDERATED],
+ IAccountManager::PROPERTY_PHONE => ['value' => '+491602312121', 'scope' => IAccountManager::SCOPE_LOCAL],
+ IAccountManager::PROPERTY_ADDRESS => ['value' => 'Dundee Road 45', 'scope' => IAccountManager::SCOPE_LOCAL],
+ IAccountManager::PROPERTY_WEBSITE => ['value' => 'https://example.org', 'scope' => IAccountManager::SCOPE_LOCAL],
+ ],
+ ],
+ [
+ 'user' => $this->makeUser('b32c5a5b-1084-4380-8856-e5223b16de9f', 'Armel Oliseh', 'oliseh@example.com'),
+ 'data' => [
+ IAccountManager::PROPERTY_DISPLAYNAME => ['value' => 'Armel Oliseh', 'scope' => IAccountManager::SCOPE_PUBLISHED],
+ IAccountManager::PROPERTY_EMAIL => ['value' => 'oliseh@example.com', 'scope' => IAccountManager::SCOPE_PUBLISHED],
+ IAccountManager::PROPERTY_TWITTER => ['value' => '', 'scope' => IAccountManager::SCOPE_LOCAL],
+ IAccountManager::PROPERTY_PHONE => ['value' => '+491603121212', 'scope' => IAccountManager::SCOPE_PUBLISHED],
+ IAccountManager::PROPERTY_ADDRESS => ['value' => 'Sunflower Blvd. 77', 'scope' => IAccountManager::SCOPE_PUBLISHED],
+ IAccountManager::PROPERTY_WEBSITE => ['value' => 'https://example.com', 'scope' => IAccountManager::SCOPE_PUBLISHED],
+ ],
+ ],
+ [
+ 'user' => $this->makeUser('31b5316a-9b57-4b17-970a-315a4cbe73eb', 'K. Cheng', 'cheng@emca.com'),
+ 'data' => [
+ IAccountManager::PROPERTY_DISPLAYNAME => ['value' => 'K. Cheng', 'scope' => IAccountManager::SCOPE_FEDERATED],
+ IAccountManager::PROPERTY_EMAIL => ['value' => 'cheng@emca.com', 'scope' => IAccountManager::SCOPE_FEDERATED],
+ IAccountManager::PROPERTY_TWITTER => ['value' => '', 'scope' => IAccountManager::SCOPE_LOCAL],
+ IAccountManager::PROPERTY_PHONE => ['value' => '+71601212123', 'scope' => IAccountManager::SCOPE_LOCAL],
+ IAccountManager::PROPERTY_ADDRESS => ['value' => 'Pinapple Street 22', 'scope' => IAccountManager::SCOPE_LOCAL],
+ IAccountManager::PROPERTY_WEBSITE => ['value' => 'https://emca.com', 'scope' => IAccountManager::SCOPE_FEDERATED],
+ IAccountManager::COLLECTION_EMAIL => [
+ ['value' => 'k.cheng@emca.com', 'scope' => IAccountManager::SCOPE_LOCAL],
+ ['value' => 'kai.cheng@emca.com', 'scope' => IAccountManager::SCOPE_LOCAL],
+ ],
+ ],
+ ],
+ [
+ 'user' => $this->makeUser('goodpal@elpmaxe.org', 'Goodpal, Kim', 'goodpal@elpmaxe.org'),
+ 'data' => [
+ IAccountManager::PROPERTY_DISPLAYNAME => ['value' => 'Goodpal, Kim', 'scope' => IAccountManager::SCOPE_PUBLISHED],
+ IAccountManager::PROPERTY_EMAIL => ['value' => 'goodpal@elpmaxe.org', 'scope' => IAccountManager::SCOPE_PUBLISHED],
+ IAccountManager::PROPERTY_TWITTER => ['value' => '', 'scope' => IAccountManager::SCOPE_LOCAL],
+ IAccountManager::PROPERTY_PHONE => ['value' => '+71602121231', 'scope' => IAccountManager::SCOPE_FEDERATED],
+ IAccountManager::PROPERTY_ADDRESS => ['value' => 'Octopus Ave 17', 'scope' => IAccountManager::SCOPE_FEDERATED],
+ IAccountManager::PROPERTY_WEBSITE => ['value' => 'https://elpmaxe.org', 'scope' => IAccountManager::SCOPE_PUBLISHED],
+ ],
+ ],
+ ];
+ foreach ($users as $userInfo) {
+ $this->accountManager->updateUser($userInfo['user'], $userInfo['data'], false);
+ }
+ }
+
/**
* get a instance of the accountManager
*
@@ -340,9 +436,8 @@ class AccountManagerTest extends TestCase {
$oldData = ['key' => ['value' => 'value']];
$newData = ['newKey' => ['value' => 'newValue']];
- $accountManager = $this->getInstance();
$this->addDummyValuesToTable('uid', $oldData);
- $this->invokePrivate($accountManager, 'updateExistingUser', [$user, $newData]);
+ $this->invokePrivate($this->accountManager, 'updateExistingUser', [$user, $newData]);
$newDataFromTable = $this->getDataFromTable('uid');
$this->assertEquals($newData, $newDataFromTable);
}
@@ -352,18 +447,15 @@ class AccountManagerTest extends TestCase {
$uid = 'uid';
$data = ['key' => ['value' => 'value']];
- $accountManager = $this->getInstance();
$user->expects($this->atLeastOnce())->method('getUID')->willReturn($uid);
$this->assertNull($this->getDataFromTable($uid));
- $this->invokePrivate($accountManager, 'insertNewUser', [$user, $data]);
+ $this->invokePrivate($this->accountManager, 'insertNewUser', [$user, $data]);
$dataFromDb = $this->getDataFromTable($uid);
$this->assertEquals($data, $dataFromDb);
}
public function testAddMissingDefaultValues() {
- $accountManager = $this->getInstance();
-
$input = [
'key1' => ['value' => 'value1', 'verified' => '0'],
'key2' => ['value' => 'value1'],
@@ -374,7 +466,7 @@ class AccountManagerTest extends TestCase {
'key2' => ['value' => 'value1', 'verified' => '0'],
];
- $result = $this->invokePrivate($accountManager, 'addMissingDefaultValues', [$input]);
+ $result = $this->invokePrivate($this->accountManager, 'addMissingDefaultValues', [$input]);
$this->assertSame($expected, $result);
}
@@ -461,13 +553,11 @@ class AccountManagerTest extends TestCase {
$this->config->method('getSystemValueString')
->willReturn($defaultRegion);
- $instance = $this->getInstance();
-
if ($phoneNumber === null) {
$this->expectException(\InvalidArgumentException::class);
- self::invokePrivate($instance, 'parsePhoneNumber', [$phoneInput]);
+ self::invokePrivate($this->accountManager, 'parsePhoneNumber', [$phoneInput]);
} else {
- self::assertEquals($phoneNumber, self::invokePrivate($instance, 'parsePhoneNumber', [$phoneInput]));
+ self::assertEquals($phoneNumber, self::invokePrivate($this->accountManager, 'parsePhoneNumber', [$phoneInput]));
}
}
@@ -487,13 +577,73 @@ class AccountManagerTest extends TestCase {
* @param string|null $websiteOutput
*/
public function testParseWebsite(string $websiteInput, ?string $websiteOutput): void {
- $instance = $this->getInstance();
-
if ($websiteOutput === null) {
$this->expectException(\InvalidArgumentException::class);
- self::invokePrivate($instance, 'parseWebsite', [$websiteInput]);
+ self::invokePrivate($this->accountManager, 'parseWebsite', [$websiteInput]);
} else {
- self::assertEquals($websiteOutput, self::invokePrivate($instance, 'parseWebsite', [$websiteInput]));
+ self::assertEquals($websiteOutput, self::invokePrivate($this->accountManager, 'parseWebsite', [$websiteInput]));
}
}
+
+ /**
+ * @dataProvider searchDataProvider
+ */
+ public function testSearchUsers(string $property, array $values, array $expected): void {
+ $this->populateOrUpdate();
+
+ $matchedUsers = $this->accountManager->searchUsers($property, $values);
+ $this->assertSame($expected, $matchedUsers);
+ }
+
+ public function searchDataProvider(): array {
+ return [
+ [ #0 Search for an existing name
+ IAccountManager::PROPERTY_DISPLAYNAME,
+ ['Jane Doe'],
+ ['Jane Doe' => 'j.doe']
+ ],
+ [ #1 Search for part of a name (no result)
+ IAccountManager::PROPERTY_DISPLAYNAME,
+ ['Jane'],
+ []
+ ],
+ [ #2 Search for part of a name (no result, test wildcard)
+ IAccountManager::PROPERTY_DISPLAYNAME,
+ ['Jane%'],
+ []
+ ],
+ [ #3 Search for phone
+ IAccountManager::PROPERTY_PHONE,
+ ['+491603121212'],
+ ['+491603121212' => 'b32c5a5b-1084-4380-8856-e5223b16de9f'],
+ ],
+ [ #4 Search for twitter handles
+ IAccountManager::PROPERTY_TWITTER,
+ ['@sometwitter', '@a_alice', '@unseen'],
+ ['@sometwitter' => 'j.doe', '@a_alice' => 'a.allison'],
+ ],
+ [ #5 Search for email
+ IAccountManager::PROPERTY_EMAIL,
+ ['cheng@emca.com'],
+ ['cheng@emca.com' => '31b5316a-9b57-4b17-970a-315a4cbe73eb'],
+ ],
+ [ #6 Search for email by additional email
+ IAccountManager::PROPERTY_EMAIL,
+ ['kai.cheng@emca.com'],
+ ['kai.cheng@emca.com' => '31b5316a-9b57-4b17-970a-315a4cbe73eb'],
+ ],
+ [ #7 Search for additional email
+ IAccountManager::COLLECTION_EMAIL,
+ ['kai.cheng@emca.com', 'cheng@emca.com'],
+ ['kai.cheng@emca.com' => '31b5316a-9b57-4b17-970a-315a4cbe73eb'],
+ ],
+ [ #8 Search for email by additional email (two valid search values, but the same user)
+ IAccountManager::PROPERTY_EMAIL,
+ ['kai.cheng@emca.com', 'cheng@emca.com'],
+ [
+ 'kai.cheng@emca.com' => '31b5316a-9b57-4b17-970a-315a4cbe73eb',
+ ],
+ ],
+ ];
+ }
}