blob: 7e3b896046b05af46d089f131d5be1e416470458 [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 */
Frank Bordenbe9451a2022-09-12 15:44:29 +02006import '../../../test/common-test-setup';
Paladox nonec9ccb282021-07-29 15:12:11 +00007import './gr-smart-search';
8import {GrSmartSearch} from './gr-smart-search';
9import {stubRestApi} from '../../../test/test-utils';
10import {EmailAddress, GroupId, UrlEncodedRepoName} from '../../../types/common';
Frank Bordene1ba8212022-08-29 15:20:01 +020011import {fixture, html, assert} from '@open-wc/testing';
Paladox nonec9ccb282021-07-29 15:12:11 +000012
13suite('gr-smart-search tests', () => {
14 let element: GrSmartSearch;
15
Paladox none9f9163e2021-12-15 16:52:35 +000016 setup(async () => {
Frank Bordendedd6712022-08-22 10:56:11 +020017 element = await fixture(html`<gr-smart-search></gr-smart-search>`);
Paladox nonec9ccb282021-07-29 15:12:11 +000018 });
19
Frank Borden1c699502022-07-18 17:00:59 +020020 test('renders', () => {
Frank Borden37c7e422022-08-19 14:55:52 +020021 assert.shadowDom.equal(
22 element,
23 /* HTML */ ' <gr-search-bar id="search"> </gr-search-bar> '
24 );
Frank Borden1c699502022-07-18 17:00:59 +020025 });
26
Paladox nonec9ccb282021-07-29 15:12:11 +000027 test('Autocompletes accounts', () => {
28 stubRestApi('getSuggestedAccounts').callsFake(() =>
29 Promise.resolve([
30 {
31 name: 'fred',
32 email: 'fred@goog.co' as EmailAddress,
33 },
34 ])
35 );
Paladox none9f9163e2021-12-15 16:52:35 +000036 return element.fetchAccounts('owner', 'fr').then(s => {
Paladox nonec9ccb282021-07-29 15:12:11 +000037 assert.deepEqual(s[0], {text: 'owner:fred@goog.co', label: 'fred'});
38 });
39 });
40
41 test('Inserts self as option when valid', () => {
42 stubRestApi('getSuggestedAccounts').callsFake(() =>
43 Promise.resolve([
44 {
45 name: 'fred',
46 email: 'fred@goog.co' as EmailAddress,
47 },
48 ])
49 );
50 element
Paladox none9f9163e2021-12-15 16:52:35 +000051 .fetchAccounts('owner', 's')
Paladox nonec9ccb282021-07-29 15:12:11 +000052 .then(s => {
53 assert.deepEqual(s[0], {text: 'owner:fred@goog.co', label: 'fred'});
54 assert.deepEqual(s[1], {text: 'owner:self'});
55 })
Paladox none9f9163e2021-12-15 16:52:35 +000056 .then(() => element.fetchAccounts('owner', 'selfs'))
Paladox nonec9ccb282021-07-29 15:12:11 +000057 .then(s => {
58 assert.notEqual(s[0], {text: 'owner:self'});
59 });
60 });
61
62 test('Inserts me as option when valid', () => {
63 stubRestApi('getSuggestedAccounts').callsFake(() =>
64 Promise.resolve([
65 {
66 name: 'fred',
67 email: 'fred@goog.co' as EmailAddress,
68 },
69 ])
70 );
71 return element
Paladox none9f9163e2021-12-15 16:52:35 +000072 .fetchAccounts('owner', 'm')
Paladox nonec9ccb282021-07-29 15:12:11 +000073 .then(s => {
74 assert.deepEqual(s[0], {text: 'owner:fred@goog.co', label: 'fred'});
75 assert.deepEqual(s[1], {text: 'owner:me'});
76 })
Paladox none9f9163e2021-12-15 16:52:35 +000077 .then(() => element.fetchAccounts('owner', 'meme'))
Paladox nonec9ccb282021-07-29 15:12:11 +000078 .then(s => {
79 assert.notEqual(s[0], {text: 'owner:me'});
80 });
81 });
82
83 test('Autocompletes groups', () => {
84 stubRestApi('getSuggestedGroups').callsFake(() =>
85 Promise.resolve({
86 Polygerrit: {id: '4c97682e6ce61b7247f3381b6f1789356666de7f' as GroupId},
87 gerrit: {id: '4c97682e6ce61b7247f3381b6f1789356666de7f' as GroupId},
88 gerrittest: {id: '4c97682e6ce61b7247f3381b6f1789356666de7f' as GroupId},
89 })
90 );
Paladox none9f9163e2021-12-15 16:52:35 +000091 return element.fetchGroups('ownerin', 'pol').then(s => {
Paladox nonec9ccb282021-07-29 15:12:11 +000092 assert.deepEqual(s[0], {text: 'ownerin:Polygerrit'});
93 });
94 });
95
96 test('Autocompletes projects', () => {
Ben Rohlfsbfc688b2022-10-21 12:38:37 +020097 stubRestApi('getSuggestedRepos').callsFake(() =>
Paladox nonec9ccb282021-07-29 15:12:11 +000098 Promise.resolve({Polygerrit: {id: 'test' as UrlEncodedRepoName}})
99 );
Paladox none9f9163e2021-12-15 16:52:35 +0000100 return element.fetchProjects('project', 'pol').then(s => {
Paladox nonec9ccb282021-07-29 15:12:11 +0000101 assert.deepEqual(s[0], {text: 'project:Polygerrit'});
102 });
103 });
104
105 test('Autocomplete doesnt override exact matches to input', () => {
106 stubRestApi('getSuggestedGroups').callsFake(() =>
107 Promise.resolve({
108 Polygerrit: {id: '4c97682e6ce61b7247f3381b6f1789356666de7f' as GroupId},
109 gerrit: {id: '4c97682e6ce61b7247f3381b6f1789356666de7f' as GroupId},
110 gerrittest: {id: '4c97682e6ce61b7247f3381b6f1789356666de7f' as GroupId},
111 })
112 );
Paladox none9f9163e2021-12-15 16:52:35 +0000113 return element.fetchGroups('ownerin', 'gerrit').then(s => {
Paladox nonec9ccb282021-07-29 15:12:11 +0000114 assert.deepEqual(s[0], {text: 'ownerin:Polygerrit'});
115 assert.deepEqual(s[1], {text: 'ownerin:gerrit'});
116 assert.deepEqual(s[2], {text: 'ownerin:gerrittest'});
117 });
118 });
119
120 test('Autocompletes accounts with no email', () => {
121 stubRestApi('getSuggestedAccounts').callsFake(() =>
122 Promise.resolve([{name: 'fred'}])
123 );
Paladox none9f9163e2021-12-15 16:52:35 +0000124 return element.fetchAccounts('owner', 'fr').then(s => {
Paladox nonec9ccb282021-07-29 15:12:11 +0000125 assert.deepEqual(s[0], {text: 'owner:"fred"', label: 'fred'});
126 });
127 });
128
129 test('Autocompletes accounts with email', () => {
130 stubRestApi('getSuggestedAccounts').callsFake(() =>
131 Promise.resolve([{email: 'fred@goog.co' as EmailAddress}])
132 );
Paladox none9f9163e2021-12-15 16:52:35 +0000133 return element.fetchAccounts('owner', 'fr').then(s => {
Paladox nonec9ccb282021-07-29 15:12:11 +0000134 assert.deepEqual(s[0], {text: 'owner:fred@goog.co', label: ''});
135 });
136 });
137});