blob: 3e9b15eed56498ff50b708fe70ebbaf7c59a3ae2 [file] [log] [blame]
/**
* @license
* Copyright 2016 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
import '../../../test/common-test-setup';
import './gr-smart-search';
import {GrSmartSearch} from './gr-smart-search';
import {
pressKey,
queryAndAssert,
stubRestApi,
waitUntil,
} from '../../../test/test-utils';
import {GroupId, UrlEncodedRepoName} from '../../../types/common';
import {assert, fixture, html} from '@open-wc/testing';
import {Key} from '../../../utils/dom-util';
import {MdOutlinedTextField} from '@material/web/textfield/outlined-text-field';
import {GrAutocomplete} from '../../shared/gr-autocomplete/gr-autocomplete';
suite('gr-smart-search tests', () => {
let element: GrSmartSearch;
setup(async () => {
element = await fixture(html`<gr-smart-search></gr-smart-search>`);
});
test('renders', () => {
assert.shadowDom.equal(
element,
/* HTML */ ' <gr-search-autocomplete id="search"> <gr-icon icon="search" slot="leading-icon" aria-hidden="true"></gr-icon> </gr-search-autocomplete> '
);
});
test('empty search query does not trigger nav', async () => {
const searchSpy = sinon.spy(element, 'handleSearch');
element.searchBar!.value = '';
await element.updateComplete;
const searchInput = queryAndAssert<GrAutocomplete>(
element.searchBar,
'#queryInput'
);
pressKey(
queryAndAssert<MdOutlinedTextField>(searchInput, '#input'),
Key.ENTER
);
assert.isFalse(searchSpy.called);
});
test('Predefined query op with no predication doesnt trigger nav', async () => {
const searchSpy = sinon.spy(element, 'handleSearch');
element.searchBar!.value = 'added:';
await element.updateComplete;
const searchInput = queryAndAssert<GrAutocomplete>(
element.searchBar,
'#queryInput'
);
pressKey(
queryAndAssert<MdOutlinedTextField>(searchInput, '#input'),
Key.ENTER
);
assert.isFalse(searchSpy.called);
});
test('predefined predicate query triggers nav', async () => {
const searchSpy = sinon.spy(element, 'handleSearch');
element.searchBar!.value = 'age:1week';
await element.updateComplete;
const searchInput = queryAndAssert<GrAutocomplete>(
element.searchBar,
'#queryInput'
);
pressKey(
queryAndAssert<MdOutlinedTextField>(searchInput, '#input'),
Key.ENTER
);
await waitUntil(() => searchSpy.called);
});
test('undefined predicate query triggers nav', async () => {
const searchSpy = sinon.spy(element, 'handleSearch');
element.searchBar!.value = 'random:1week';
await element.updateComplete;
const searchInput = queryAndAssert<GrAutocomplete>(
element.searchBar,
'#queryInput'
);
pressKey(
queryAndAssert<MdOutlinedTextField>(searchInput, '#input'),
Key.ENTER
);
await waitUntil(() => searchSpy.called);
});
test('empty undefined predicate query triggers nav', async () => {
const searchSpy = sinon.spy(element, 'handleSearch');
element.searchBar!.value = 'random:';
await element.updateComplete;
const searchInput = queryAndAssert<GrAutocomplete>(
element.searchBar,
'#queryInput'
);
pressKey(
queryAndAssert<MdOutlinedTextField>(searchInput, '#input'),
Key.ENTER
);
await waitUntil(() => searchSpy.called);
});
test('Autocompletes groups', () => {
stubRestApi('getSuggestedGroups').callsFake(() =>
Promise.resolve({
Polygerrit: {id: '4c97682e6ce61b7247f3381b6f1789356666de7f' as GroupId},
gerrit: {id: '4c97682e6ce61b7247f3381b6f1789356666de7f' as GroupId},
gerrittest: {id: '4c97682e6ce61b7247f3381b6f1789356666de7f' as GroupId},
})
);
return element.fetchGroups('ownerin', 'pol').then(s => {
assert.deepEqual(s[0], {text: 'ownerin:Polygerrit'});
});
});
test('Autocompletes projects', () => {
stubRestApi('getSuggestedRepos').callsFake(() =>
Promise.resolve({Polygerrit: {id: 'test' as UrlEncodedRepoName}})
);
return element.fetchProjects('project', 'pol').then(s => {
assert.deepEqual(s[0], {text: 'project:Polygerrit'});
});
});
test('Autocomplete doesnt override exact matches to input', () => {
stubRestApi('getSuggestedGroups').callsFake(() =>
Promise.resolve({
Polygerrit: {id: '4c97682e6ce61b7247f3381b6f1789356666de7f' as GroupId},
gerrit: {id: '4c97682e6ce61b7247f3381b6f1789356666de7f' as GroupId},
gerrittest: {id: '4c97682e6ce61b7247f3381b6f1789356666de7f' as GroupId},
})
);
return element.fetchGroups('ownerin', 'gerrit').then(s => {
assert.deepEqual(s[0], {text: 'ownerin:Polygerrit'});
assert.deepEqual(s[1], {text: 'ownerin:gerrit'});
assert.deepEqual(s[2], {text: 'ownerin:gerrittest'});
});
});
});