aboutsummaryrefslogtreecommitdiffstats
path: root/apps/user_ldap/tests/Migration/AbstractUUIDFixTestCase.php
diff options
context:
space:
mode:
Diffstat (limited to 'apps/user_ldap/tests/Migration/AbstractUUIDFixTestCase.php')
-rw-r--r--apps/user_ldap/tests/Migration/AbstractUUIDFixTestCase.php167
1 files changed, 167 insertions, 0 deletions
diff --git a/apps/user_ldap/tests/Migration/AbstractUUIDFixTestCase.php b/apps/user_ldap/tests/Migration/AbstractUUIDFixTestCase.php
new file mode 100644
index 00000000000..7a85b885bc1
--- /dev/null
+++ b/apps/user_ldap/tests/Migration/AbstractUUIDFixTestCase.php
@@ -0,0 +1,167 @@
+<?php
+
+declare(strict_types=1);
+/**
+ * SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+namespace OCA\User_LDAP\Tests\Migration;
+
+use OCA\User_LDAP\Access;
+use OCA\User_LDAP\Helper;
+use OCA\User_LDAP\LDAP;
+use OCA\User_LDAP\Mapping\AbstractMapping;
+use OCA\User_LDAP\Migration\UUIDFix;
+use OCA\User_LDAP\Proxy;
+use OCP\AppFramework\Utility\ITimeFactory;
+use OCP\IConfig;
+use PHPUnit\Framework\MockObject\MockObject;
+use Test\TestCase;
+
+abstract class AbstractUUIDFixTestCase extends TestCase {
+ protected Helper&MockObject $helper;
+ protected IConfig&MockObject $config;
+ protected LDAP&MockObject $ldap;
+ protected AbstractMapping $mapper;
+ protected UUIDFix $job;
+ protected Proxy $proxy;
+ protected Access&MockObject $access;
+ protected ITimeFactory&MockObject $time;
+ protected bool $isUser = true;
+
+ protected function setUp(): void {
+ parent::setUp();
+
+ $this->ldap = $this->createMock(LDAP::class);
+ $this->config = $this->createMock(IConfig::class);
+ $this->access = $this->createMock(Access::class);
+ $this->time = $this->createMock(ITimeFactory::class);
+
+ $this->helper = $this->createMock(Helper::class);
+ $this->helper->expects($this->any())
+ ->method('getServerConfigurationPrefixes')
+ ->with(true)
+ ->willReturn(['s01', 's03']);
+ }
+
+ protected function instantiateJob($className) {
+ $this->job = new $className($this->time, $this->mapper, $this->proxy);
+ $this->proxy->expects($this->any())
+ ->method('getLDAPAccess')
+ ->willReturn($this->access);
+ }
+
+ public function testRunSingleRecord(): void {
+ $args = [
+ 'records' => [
+ 0 => [
+ 'name' => 'Someone',
+ 'dn' => 'uid=Someone,dc=Somewhere',
+ 'uuid' => 'kaput'
+ ]
+ ]
+ ];
+ $correctUUID = '4355-AED3-9D73-03AD';
+
+ $this->access->expects($this->once())
+ ->method('getUUID')
+ ->with($args['records'][0]['dn'], $this->isUser)
+ ->willReturn($correctUUID);
+
+ $this->mapper->expects($this->once())
+ ->method('setUUIDbyDN')
+ ->with($correctUUID, $args['records'][0]['dn']);
+
+ $this->job->run($args);
+ }
+
+ public function testRunValidRecord(): void {
+ $correctUUID = '4355-AED3-9D73-03AD';
+ $args = [
+ 'records' => [
+ 0 => [
+ 'name' => 'Someone',
+ 'dn' => 'uid=Someone,dc=Somewhere',
+ 'uuid' => $correctUUID
+ ]
+ ]
+ ];
+
+ $this->access->expects($this->once())
+ ->method('getUUID')
+ ->with($args['records'][0]['dn'], $this->isUser)
+ ->willReturn($correctUUID);
+
+ $this->mapper->expects($this->never())
+ ->method('setUUIDbyDN');
+
+ $this->job->run($args);
+ }
+
+ public function testRunRemovedRecord(): void {
+ $args = [
+ 'records' => [
+ 0 => [
+ 'name' => 'Someone',
+ 'dn' => 'uid=Someone,dc=Somewhere',
+ 'uuid' => 'kaput'
+ ]
+ ]
+ ];
+
+ $this->access->expects($this->once())
+ ->method('getUUID')
+ ->with($args['records'][0]['dn'], $this->isUser)
+ ->willReturn(false);
+
+ $this->mapper->expects($this->never())
+ ->method('setUUIDbyDN');
+
+ $this->job->run($args);
+ }
+
+ public function testRunManyRecords(): void {
+ $args = [
+ 'records' => [
+ 0 => [
+ 'name' => 'Someone',
+ 'dn' => 'uid=Someone,dc=Somewhere',
+ 'uuid' => 'kaput'
+ ],
+ 1 => [
+ 'name' => 'kdslkdsaIdsal',
+ 'dn' => 'uid=kdslkdsaIdsal,dc=Somewhere',
+ 'uuid' => 'AED3-4355-03AD-9D73'
+ ],
+ 2 => [
+ 'name' => 'Paperboy',
+ 'dn' => 'uid=Paperboy,dc=Somewhere',
+ 'uuid' => 'kaput'
+ ]
+ ]
+ ];
+ $correctUUIDs = ['4355-AED3-9D73-03AD', 'AED3-4355-03AD-9D73', 'AED3-9D73-4355-03AD'];
+
+ $this->access->expects($this->exactly(3))
+ ->method('getUUID')
+ ->willReturnMap([
+ [$args['records'][0]['dn'], $this->isUser, null, $correctUUIDs[0]],
+ [$args['records'][1]['dn'], $this->isUser, null, $correctUUIDs[1]],
+ [$args['records'][2]['dn'], $this->isUser, null, $correctUUIDs[2]],
+ ]);
+
+ $calls = [
+ [$correctUUIDs[0], $args['records'][0]['dn']],
+ [$correctUUIDs[2], $args['records'][2]['dn']],
+ ];
+ $this->mapper->expects($this->exactly(2))
+ ->method('setUUIDbyDN')
+ ->willReturnCallback(function ($i, $j) use (&$calls) {
+ $expected = array_shift($calls);
+ $this->assertEquals($expected, func_get_args());
+ return true;
+ });
+
+ $this->job->run($args);
+ }
+}