diff --git a/core/Controller/AutoCompleteController.php b/core/Controller/AutoCompleteController.php index 1ed326fb3e..2e01f85c63 100644 --- a/core/Controller/AutoCompleteController.php +++ b/core/Controller/AutoCompleteController.php @@ -69,8 +69,9 @@ class AutoCompleteController extends Controller { // result from search() – thus nothing else to do here. list($results,) = $this->collaboratorSearch->search($search, $shareTypes, false, $limit, 0); - // there won't be exact matches without a search string + $exactMatches = $results['exact']; unset($results['exact']); + $results = array_merge_recursive($exactMatches, $results); $sorters = array_reverse(explode('|', $sorter)); $this->autoCompleteManager->runSorters($sorters, $results, [ diff --git a/tests/Core/Controller/AutoCompleteControllerTest.php b/tests/Core/Controller/AutoCompleteControllerTest.php index 06d0bf5241..bcd0d6e1cd 100644 --- a/tests/Core/Controller/AutoCompleteControllerTest.php +++ b/tests/Core/Controller/AutoCompleteControllerTest.php @@ -86,4 +86,33 @@ class AutoCompleteControllerTest extends TestCase { $this->assertEquals($expected, $list); // has better error output… $this->assertSame($expected, $list); } + + public function testGetWithExactMatch() { + $searchResults = [ + 'exact' => [ + 'users' => [ + ['label' => 'Bob Y.', 'value' => ['shareWith' => 'bob']], + ], + 'robots' => [], + ], + 'users' => [ + ['label' => 'Robert R.', 'value' => ['shareWith' => 'bobby']], + ], + ]; + + $expected = [ + [ 'id' => 'bob', 'label' => 'Bob Y.', 'source' => 'users'], + [ 'id' => 'bobby', 'label' => 'Robert R.', 'source' => 'users'], + ]; + + $this->collaboratorSearch->expects($this->once()) + ->method('search') + ->willReturn([$searchResults, false]); + + $response = $this->controller->get('bob', 'files', '42', null); + + $list = $response->getData(); + $this->assertEquals($expected, $list); // has better error output… + $this->assertSame($expected, $list); + } }