Merge pull request #7324 from nextcloud/no-sorters-no-instances
don't create sorter instances when none was requested
This commit is contained in:
commit
c1fcd6fc98
|
@ -73,11 +73,13 @@ class AutoCompleteController extends Controller {
|
|||
unset($results['exact']);
|
||||
$results = array_merge_recursive($exactMatches, $results);
|
||||
|
||||
$sorters = array_reverse(explode('|', $sorter));
|
||||
$this->autoCompleteManager->runSorters($sorters, $results, [
|
||||
'itemType' => $itemType,
|
||||
'itemId' => $itemId,
|
||||
]);
|
||||
if($sorter !== null) {
|
||||
$sorters = array_reverse(explode('|', $sorter));
|
||||
$this->autoCompleteManager->runSorters($sorters, $results, [
|
||||
'itemType' => $itemType,
|
||||
'itemId' => $itemId,
|
||||
]);
|
||||
}
|
||||
|
||||
// transform to expected format
|
||||
$results = $this->prepareResultArray($results);
|
||||
|
|
|
@ -59,57 +59,115 @@ class AutoCompleteControllerTest extends TestCase {
|
|||
);
|
||||
}
|
||||
|
||||
public function testGet() {
|
||||
$searchResults = [
|
||||
'exact' => [
|
||||
'users' => [],
|
||||
'robots' => [],
|
||||
public function searchDataProvider() {
|
||||
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.', 'source' => 'users'],
|
||||
[ 'id' => 'bob', 'label' => 'Bob Y.', 'source' => 'users'],
|
||||
],
|
||||
'',
|
||||
'files',
|
||||
'42',
|
||||
null
|
||||
],
|
||||
'users' => [
|
||||
['label' => 'Alice A.', 'value' => ['shareWith' => 'alice']],
|
||||
['label' => 'Bob Y.', 'value' => ['shareWith' => 'bob']],
|
||||
[ #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.', 'source' => 'users'],
|
||||
[ 'id' => 'bob', 'label' => 'Bob Y.', 'source' => 'users'],
|
||||
],
|
||||
'',
|
||||
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.', 'source' => 'users'],
|
||||
[ 'id' => 'bob', 'label' => 'Bob Y.', 'source' => 'users'],
|
||||
],
|
||||
'',
|
||||
'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.', 'source' => 'users'],
|
||||
[ 'id' => 'bobby', 'label' => 'Robert R.', 'source' => 'users'],
|
||||
],
|
||||
'bob',
|
||||
'files',
|
||||
'42',
|
||||
null
|
||||
]
|
||||
];
|
||||
|
||||
$expected = [
|
||||
[ 'id' => 'alice', 'label' => 'Alice A.', 'source' => 'users'],
|
||||
[ 'id' => 'bob', 'label' => 'Bob Y.', 'source' => 'users'],
|
||||
];
|
||||
|
||||
$this->collaboratorSearch->expects($this->once())
|
||||
->method('search')
|
||||
->willReturn([$searchResults, false]);
|
||||
|
||||
$response = $this->controller->get('', 'files', '42', null);
|
||||
|
||||
$list = $response->getData();
|
||||
$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'],
|
||||
];
|
||||
|
||||
/**
|
||||
* @param $searchResults
|
||||
* @param $expected
|
||||
* @param $searchTerm
|
||||
* @param $itemType
|
||||
* @param $itemId
|
||||
* @param $sorter
|
||||
* @dataProvider searchDataProvider
|
||||
*/
|
||||
public function testGet($searchResults, $expected, $searchTerm, $itemType, $itemId, $sorter) {
|
||||
$this->collaboratorSearch->expects($this->once())
|
||||
->method('search')
|
||||
->willReturn([$searchResults, false]);
|
||||
|
||||
$response = $this->controller->get('bob', 'files', '42', null);
|
||||
$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…
|
||||
|
|
Loading…
Reference in New Issue