Merge pull request #7324 from nextcloud/no-sorters-no-instances

don't create sorter instances when none was requested
This commit is contained in:
Roeland Jago Douma 2017-12-11 15:27:44 +01:00 committed by GitHub
commit c1fcd6fc98
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 107 additions and 47 deletions

View File

@ -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);

View File

@ -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…