diff options
Diffstat (limited to 'tests/Core/Controller/AutoCompleteControllerTest.php')
-rw-r--r-- | tests/Core/Controller/AutoCompleteControllerTest.php | 173 |
1 files changed, 173 insertions, 0 deletions
diff --git a/tests/Core/Controller/AutoCompleteControllerTest.php b/tests/Core/Controller/AutoCompleteControllerTest.php new file mode 100644 index 00000000000..c5574f78fc1 --- /dev/null +++ b/tests/Core/Controller/AutoCompleteControllerTest.php @@ -0,0 +1,173 @@ +<?php + +/** + * SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +namespace Tests\Core\Controller; + +use OC\Core\Controller\AutoCompleteController; +use OCP\Collaboration\AutoComplete\IManager; +use OCP\Collaboration\Collaborators\ISearch; +use OCP\EventDispatcher\IEventDispatcher; +use OCP\IRequest; +use PHPUnit\Framework\MockObject\MockObject; +use Test\TestCase; + +class AutoCompleteControllerTest extends TestCase { + /** @var ISearch|MockObject */ + protected $collaboratorSearch; + /** @var IManager|MockObject */ + protected $autoCompleteManager; + /** @var IEventDispatcher|MockObject */ + protected $dispatcher; + /** @var AutoCompleteController */ + protected $controller; + + protected function setUp(): void { + parent::setUp(); + + /** @var IRequest $request */ + $request = $this->createMock(IRequest::class); + $this->collaboratorSearch = $this->createMock(ISearch::class); + $this->autoCompleteManager = $this->createMock(IManager::class); + $this->dispatcher = $this->createMock(IEventDispatcher::class); + + $this->controller = new AutoCompleteController( + 'core', + $request, + $this->collaboratorSearch, + $this->autoCompleteManager, + $this->dispatcher + ); + } + + public static function searchDataProvider(): array { + return [ + [ #0 – regular search + // searchResults + [ + 'exact' => [ + 'users' => [], + 'robots' => [], + ], + 'users' => [ + ['label' => 'Alice A.', 'value' => ['shareWith' => 'alice']], + ['label' => 'Bob Y.', 'value' => ['shareWith' => 'bob']], + ], + ], + // expected + [ + [ 'id' => 'alice', 'label' => 'Alice A.', 'icon' => '', 'source' => 'users', 'status' => '', 'subline' => '', 'shareWithDisplayNameUnique' => ''], + [ 'id' => 'bob', 'label' => 'Bob Y.', 'icon' => '', 'source' => 'users', 'status' => '', 'subline' => '', 'shareWithDisplayNameUnique' => ''], + ], + '', + 'files', + '42', + null + ], + [ #1 – missing itemtype and id + [ + 'exact' => [ + 'users' => [], + 'robots' => [], + ], + 'users' => [ + ['label' => 'Alice A.', 'value' => ['shareWith' => 'alice']], + ['label' => 'Bob Y.', 'value' => ['shareWith' => 'bob']], + ], + ], + // expected + [ + [ 'id' => 'alice', 'label' => 'Alice A.', 'icon' => '', 'source' => 'users', 'status' => '', 'subline' => '', 'shareWithDisplayNameUnique' => ''], + [ 'id' => 'bob', 'label' => 'Bob Y.', 'icon' => '', 'source' => 'users', 'status' => '', 'subline' => '', 'shareWithDisplayNameUnique' => ''], + ], + '', + null, + null, + null + ], + [ #2 – with sorter + [ + 'exact' => [ + 'users' => [], + 'robots' => [], + ], + 'users' => [ + ['label' => 'Alice A.', 'value' => ['shareWith' => 'alice']], + ['label' => 'Bob Y.', 'value' => ['shareWith' => 'bob']], + ], + ], + // expected + [ + [ 'id' => 'alice', 'label' => 'Alice A.', 'icon' => '', 'source' => 'users', 'status' => '', 'subline' => '', 'shareWithDisplayNameUnique' => ''], + [ 'id' => 'bob', 'label' => 'Bob Y.', 'icon' => '', 'source' => 'users', 'status' => '', 'subline' => '', 'shareWithDisplayNameUnique' => ''], + ], + '', + 'files', + '42', + 'karma|bus-factor' + ], + [ #3 – exact Match + [ + 'exact' => [ + 'users' => [ + ['label' => 'Bob Y.', 'value' => ['shareWith' => 'bob']], + ], + 'robots' => [], + ], + 'users' => [ + ['label' => 'Robert R.', 'value' => ['shareWith' => 'bobby']], + ], + ], + [ + [ 'id' => 'bob', 'label' => 'Bob Y.', 'icon' => '', 'source' => 'users', 'status' => '', 'subline' => '', 'shareWithDisplayNameUnique' => ''], + [ 'id' => 'bobby', 'label' => 'Robert R.', 'icon' => '', 'source' => 'users', 'status' => '', 'subline' => '', 'shareWithDisplayNameUnique' => ''], + ], + 'bob', + 'files', + '42', + null + ], + [ #4 – with unique name + [ + 'exact' => [ + 'users' => [], + 'robots' => [], + ], + 'users' => [ + ['label' => 'Alice A.', 'value' => ['shareWith' => 'alice'], 'shareWithDisplayNameUnique' => 'alica@nextcloud.com'], + ['label' => 'Alice A.', 'value' => ['shareWith' => 'alicea'], 'shareWithDisplayNameUnique' => 'alicaa@nextcloud.com'], + ], + ], + // expected + [ + [ 'id' => 'alice', 'label' => 'Alice A.', 'icon' => '', 'source' => 'users', 'status' => '', 'subline' => '', 'shareWithDisplayNameUnique' => 'alica@nextcloud.com'], + [ 'id' => 'alicea', 'label' => 'Alice A.', 'icon' => '', 'source' => 'users', 'status' => '', 'subline' => '', 'shareWithDisplayNameUnique' => 'alicaa@nextcloud.com'], + ], + '', + 'files', + '42', + 'karma|bus-factor' + ], + ]; + } + + #[\PHPUnit\Framework\Attributes\DataProvider('searchDataProvider')] + public function testGet(array $searchResults, array $expected, string $searchTerm, ?string $itemType, ?string $itemId, ?string $sorter): void { + $this->collaboratorSearch->expects($this->once()) + ->method('search') + ->willReturn([$searchResults, false]); + + $runSorterFrequency = $sorter === null ? $this->never() : $this->once(); + $this->autoCompleteManager->expects($runSorterFrequency) + ->method('runSorters'); + + $response = $this->controller->get($searchTerm, $itemType, $itemId, $sorter); + + $list = $response->getData(); + $this->assertEquals($expected, $list); // has better error output… + $this->assertSame($expected, $list); + } +} |