blob: aa0071e41c71cdfe8345772fd06bda82d60fa1ef [file] [log] [blame]
Paladox nonec9ccb282021-07-29 15:12:11 +00001/**
2 * @license
Ben Rohlfs94fcbbc2022-05-27 10:45:03 +02003 * Copyright 2016 Google LLC
4 * SPDX-License-Identifier: Apache-2.0
Paladox nonec9ccb282021-07-29 15:12:11 +00005 */
Paladox nonec9ccb282021-07-29 15:12:11 +00006import '../../../test/common-test-setup-karma';
7import './gr-smart-search';
8import {GrSmartSearch} from './gr-smart-search';
9import {stubRestApi} from '../../../test/test-utils';
10import {EmailAddress, GroupId, UrlEncodedRepoName} from '../../../types/common';
11
12const basicFixture = fixtureFromElement('gr-smart-search');
13
14suite('gr-smart-search tests', () => {
15 let element: GrSmartSearch;
16
Paladox none9f9163e2021-12-15 16:52:35 +000017 setup(async () => {
Paladox nonec9ccb282021-07-29 15:12:11 +000018 element = basicFixture.instantiate();
Paladox none9f9163e2021-12-15 16:52:35 +000019 await element.updateComplete;
Paladox nonec9ccb282021-07-29 15:12:11 +000020 });
21
Frank Borden1c699502022-07-18 17:00:59 +020022 test('renders', () => {
Frank Borden37c7e422022-08-19 14:55:52 +020023 assert.shadowDom.equal(
24 element,
25 /* HTML */ ' <gr-search-bar id="search"> </gr-search-bar> '
26 );
Frank Borden1c699502022-07-18 17:00:59 +020027 });
28
Paladox nonec9ccb282021-07-29 15:12:11 +000029 test('Autocompletes accounts', () => {
30 stubRestApi('getSuggestedAccounts').callsFake(() =>
31 Promise.resolve([
32 {
33 name: 'fred',
34 email: 'fred@goog.co' as EmailAddress,
35 },
36 ])
37 );
Paladox none9f9163e2021-12-15 16:52:35 +000038 return element.fetchAccounts('owner', 'fr').then(s => {
Paladox nonec9ccb282021-07-29 15:12:11 +000039 assert.deepEqual(s[0], {text: 'owner:fred@goog.co', label: 'fred'});
40 });
41 });
42
43 test('Inserts self as option when valid', () => {
44 stubRestApi('getSuggestedAccounts').callsFake(() =>
45 Promise.resolve([
46 {
47 name: 'fred',
48 email: 'fred@goog.co' as EmailAddress,
49 },
50 ])
51 );
52 element
Paladox none9f9163e2021-12-15 16:52:35 +000053 .fetchAccounts('owner', 's')
Paladox nonec9ccb282021-07-29 15:12:11 +000054 .then(s => {
55 assert.deepEqual(s[0], {text: 'owner:fred@goog.co', label: 'fred'});
56 assert.deepEqual(s[1], {text: 'owner:self'});
57 })
Paladox none9f9163e2021-12-15 16:52:35 +000058 .then(() => element.fetchAccounts('owner', 'selfs'))
Paladox nonec9ccb282021-07-29 15:12:11 +000059 .then(s => {
60 assert.notEqual(s[0], {text: 'owner:self'});
61 });
62 });
63
64 test('Inserts me as option when valid', () => {
65 stubRestApi('getSuggestedAccounts').callsFake(() =>
66 Promise.resolve([
67 {
68 name: 'fred',
69 email: 'fred@goog.co' as EmailAddress,
70 },
71 ])
72 );
73 return element
Paladox none9f9163e2021-12-15 16:52:35 +000074 .fetchAccounts('owner', 'm')
Paladox nonec9ccb282021-07-29 15:12:11 +000075 .then(s => {
76 assert.deepEqual(s[0], {text: 'owner:fred@goog.co', label: 'fred'});
77 assert.deepEqual(s[1], {text: 'owner:me'});
78 })
Paladox none9f9163e2021-12-15 16:52:35 +000079 .then(() => element.fetchAccounts('owner', 'meme'))
Paladox nonec9ccb282021-07-29 15:12:11 +000080 .then(s => {
81 assert.notEqual(s[0], {text: 'owner:me'});
82 });
83 });
84
85 test('Autocompletes groups', () => {
86 stubRestApi('getSuggestedGroups').callsFake(() =>
87 Promise.resolve({
88 Polygerrit: {id: '4c97682e6ce61b7247f3381b6f1789356666de7f' as GroupId},
89 gerrit: {id: '4c97682e6ce61b7247f3381b6f1789356666de7f' as GroupId},
90 gerrittest: {id: '4c97682e6ce61b7247f3381b6f1789356666de7f' as GroupId},
91 })
92 );
Paladox none9f9163e2021-12-15 16:52:35 +000093 return element.fetchGroups('ownerin', 'pol').then(s => {
Paladox nonec9ccb282021-07-29 15:12:11 +000094 assert.deepEqual(s[0], {text: 'ownerin:Polygerrit'});
95 });
96 });
97
98 test('Autocompletes projects', () => {
99 stubRestApi('getSuggestedProjects').callsFake(() =>
100 Promise.resolve({Polygerrit: {id: 'test' as UrlEncodedRepoName}})
101 );
Paladox none9f9163e2021-12-15 16:52:35 +0000102 return element.fetchProjects('project', 'pol').then(s => {
Paladox nonec9ccb282021-07-29 15:12:11 +0000103 assert.deepEqual(s[0], {text: 'project:Polygerrit'});
104 });
105 });
106
107 test('Autocomplete doesnt override exact matches to input', () => {
108 stubRestApi('getSuggestedGroups').callsFake(() =>
109 Promise.resolve({
110 Polygerrit: {id: '4c97682e6ce61b7247f3381b6f1789356666de7f' as GroupId},
111 gerrit: {id: '4c97682e6ce61b7247f3381b6f1789356666de7f' as GroupId},
112 gerrittest: {id: '4c97682e6ce61b7247f3381b6f1789356666de7f' as GroupId},
113 })
114 );
Paladox none9f9163e2021-12-15 16:52:35 +0000115 return element.fetchGroups('ownerin', 'gerrit').then(s => {
Paladox nonec9ccb282021-07-29 15:12:11 +0000116 assert.deepEqual(s[0], {text: 'ownerin:Polygerrit'});
117 assert.deepEqual(s[1], {text: 'ownerin:gerrit'});
118 assert.deepEqual(s[2], {text: 'ownerin:gerrittest'});
119 });
120 });
121
122 test('Autocompletes accounts with no email', () => {
123 stubRestApi('getSuggestedAccounts').callsFake(() =>
124 Promise.resolve([{name: 'fred'}])
125 );
Paladox none9f9163e2021-12-15 16:52:35 +0000126 return element.fetchAccounts('owner', 'fr').then(s => {
Paladox nonec9ccb282021-07-29 15:12:11 +0000127 assert.deepEqual(s[0], {text: 'owner:"fred"', label: 'fred'});
128 });
129 });
130
131 test('Autocompletes accounts with email', () => {
132 stubRestApi('getSuggestedAccounts').callsFake(() =>
133 Promise.resolve([{email: 'fred@goog.co' as EmailAddress}])
134 );
Paladox none9f9163e2021-12-15 16:52:35 +0000135 return element.fetchAccounts('owner', 'fr').then(s => {
Paladox nonec9ccb282021-07-29 15:12:11 +0000136 assert.deepEqual(s[0], {text: 'owner:fred@goog.co', label: ''});
137 });
138 });
139});