diff options
author | Robert Speicher <rspeicher@gmail.com> | 2021-01-20 13:34:23 -0600 |
---|---|---|
committer | Robert Speicher <rspeicher@gmail.com> | 2021-01-20 13:34:23 -0600 |
commit | 6438df3a1e0fb944485cebf07976160184697d72 (patch) | |
tree | 00b09bfd170e77ae9391b1a2f5a93ef6839f2597 /spec/frontend/filtered_search | |
parent | 42bcd54d971da7ef2854b896a7b34f4ef8601067 (diff) | |
download | gitlab-ce-6438df3a1e0fb944485cebf07976160184697d72.tar.gz |
Add latest changes from gitlab-org/gitlab@13-8-stable-eev13.8.0-rc42
Diffstat (limited to 'spec/frontend/filtered_search')
9 files changed, 74 insertions, 60 deletions
diff --git a/spec/frontend/filtered_search/components/recent_searches_dropdown_content_spec.js b/spec/frontend/filtered_search/components/recent_searches_dropdown_content_spec.js index 158f70f7d47..f1cff02261d 100644 --- a/spec/frontend/filtered_search/components/recent_searches_dropdown_content_spec.js +++ b/spec/frontend/filtered_search/components/recent_searches_dropdown_content_spec.js @@ -10,7 +10,7 @@ describe('Recent Searches Dropdown Content', () => { const findDropdownItems = () => wrapper.findAll({ ref: 'dropdownItem' }); const findDropdownNote = () => wrapper.find({ ref: 'dropdownNote' }); - const createComponent = props => { + const createComponent = (props) => { wrapper = shallowMount(RecentSearchesDropdownContent, { propsData: { allowedKeys: IssuableFilteredSearchTokenKeys.getKeys(), @@ -84,18 +84,11 @@ describe('Recent Searches Dropdown Content', () => { }); it('expect second dropdown to have 2 tokens', () => { - expect( - findDropdownItems() - .at(1) - .findAll('.js-dropdown-token'), - ).toHaveLength(2); + expect(findDropdownItems().at(1).findAll('.js-dropdown-token')).toHaveLength(2); }); it('emits recentSearchesItemSelected on dropdown item click', () => { - findDropdownItems() - .at(0) - .find('.js-dropdown-button') - .trigger('click'); + findDropdownItems().at(0).find('.js-dropdown-button').trigger('click'); expect(onRecentSearchesItemSelectedSpy).toHaveBeenCalledWith('foo'); }); diff --git a/spec/frontend/filtered_search/dropdown_utils_spec.js b/spec/frontend/filtered_search/dropdown_utils_spec.js index 3320b6b0942..32d1f909d0b 100644 --- a/spec/frontend/filtered_search/dropdown_utils_spec.js +++ b/spec/frontend/filtered_search/dropdown_utils_spec.js @@ -1,7 +1,7 @@ +import FilteredSearchSpecHelper from 'helpers/filtered_search_spec_helper'; import DropdownUtils from '~/filtered_search/dropdown_utils'; import FilteredSearchDropdownManager from '~/filtered_search/filtered_search_dropdown_manager'; import IssuableFilteredSearchTokenKeys from '~/filtered_search/issuable_filtered_search_token_keys'; -import FilteredSearchSpecHelper from '../helpers/filtered_search_spec_helper'; describe('Dropdown Utils', () => { const issueListFixture = 'issues/issue_list.html'; diff --git a/spec/frontend/filtered_search/filtered_search_manager_spec.js b/spec/frontend/filtered_search/filtered_search_manager_spec.js index b1c299ba91f..def0aa14349 100644 --- a/spec/frontend/filtered_search/filtered_search_manager_spec.js +++ b/spec/frontend/filtered_search/filtered_search_manager_spec.js @@ -1,5 +1,6 @@ import FilteredSearchManager from 'ee_else_ce/filtered_search/filtered_search_manager'; +import FilteredSearchSpecHelper from 'helpers/filtered_search_spec_helper'; import RecentSearchesService from '~/filtered_search/services/recent_searches_service'; import RecentSearchesServiceError from '~/filtered_search/services/recent_searches_service_error'; import RecentSearchesRoot from '~/filtered_search/recent_searches_root'; @@ -7,7 +8,6 @@ import IssuableFilteredSearchTokenKeys from '~/filtered_search/issuable_filtered import DropdownUtils from '~/filtered_search/dropdown_utils'; import FilteredSearchVisualTokens from '~/filtered_search/filtered_search_visual_tokens'; import FilteredSearchDropdownManager from '~/filtered_search/filtered_search_dropdown_manager'; -import FilteredSearchSpecHelper from '../helpers/filtered_search_spec_helper'; import { BACKSPACE_KEY_CODE, DELETE_KEY_CODE } from '~/lib/utils/keycodes'; import { visitUrl } from '~/lib/utils/url_utility'; import * as commonUtils from '~/lib/utils/common_utils'; @@ -188,11 +188,11 @@ describe('Filtered Search Manager', () => { const defaultParams = '?scope=all&utf8=%E2%9C%93'; const defaultState = '&state=opened'; - it('should search with a single word', done => { + it('should search with a single word', (done) => { initializeManager(); input.value = 'searchTerm'; - visitUrl.mockImplementation(url => { + visitUrl.mockImplementation((url) => { expect(url).toEqual(`${defaultParams}&search=searchTerm`); done(); }); @@ -200,11 +200,11 @@ describe('Filtered Search Manager', () => { manager.search(); }); - it('sets default state', done => { + it('sets default state', (done) => { initializeManager({ useDefaultState: true }); input.value = 'searchTerm'; - visitUrl.mockImplementation(url => { + visitUrl.mockImplementation((url) => { expect(url).toEqual(`${defaultParams}${defaultState}&search=searchTerm`); done(); }); @@ -212,11 +212,11 @@ describe('Filtered Search Manager', () => { manager.search(); }); - it('should search with multiple words', done => { + it('should search with multiple words', (done) => { initializeManager(); input.value = 'awesome search terms'; - visitUrl.mockImplementation(url => { + visitUrl.mockImplementation((url) => { expect(url).toEqual(`${defaultParams}&search=awesome+search+terms`); done(); }); @@ -224,11 +224,11 @@ describe('Filtered Search Manager', () => { manager.search(); }); - it('should search with special characters', done => { + it('should search with special characters', (done) => { initializeManager(); input.value = '~!@#$%^&*()_+{}:<>,.?/'; - visitUrl.mockImplementation(url => { + visitUrl.mockImplementation((url) => { expect(url).toEqual( `${defaultParams}&search=~!%40%23%24%25%5E%26*()_%2B%7B%7D%3A%3C%3E%2C.%3F%2F`, ); @@ -238,13 +238,13 @@ describe('Filtered Search Manager', () => { manager.search(); }); - it('should use replacement URL for condition', done => { + it('should use replacement URL for condition', (done) => { initializeManager(); tokensContainer.innerHTML = FilteredSearchSpecHelper.createTokensContainerHTML( FilteredSearchSpecHelper.createFilterVisualTokenHTML('milestone', '=', '13', true), ); - visitUrl.mockImplementation(url => { + visitUrl.mockImplementation((url) => { expect(url).toEqual(`${defaultParams}&milestone_title=replaced`); done(); }); @@ -259,14 +259,14 @@ describe('Filtered Search Manager', () => { manager.search(); }); - it('removes duplicated tokens', done => { + it('removes duplicated tokens', (done) => { initializeManager(); tokensContainer.innerHTML = FilteredSearchSpecHelper.createTokensContainerHTML(` ${FilteredSearchSpecHelper.createFilterVisualTokenHTML('label', '=', '~bug')} ${FilteredSearchSpecHelper.createFilterVisualTokenHTML('label', '=', '~bug')} `); - visitUrl.mockImplementation(url => { + visitUrl.mockImplementation((url) => { expect(url).toEqual(`${defaultParams}&label_name[]=bug`); done(); }); @@ -605,7 +605,7 @@ describe('Filtered Search Manager', () => { it('correctly modifies params when custom modifier is passed', () => { const modifedParams = manager.getAllParams.call( { - modifyUrlParams: params => params.reverse(), + modifyUrlParams: (params) => params.reverse(), }, [].concat(paramsArr), ); diff --git a/spec/frontend/filtered_search/filtered_search_token_keys_spec.js b/spec/frontend/filtered_search/filtered_search_token_keys_spec.js index f24d2b118c2..da6d9ac3ff2 100644 --- a/spec/frontend/filtered_search/filtered_search_token_keys_spec.js +++ b/spec/frontend/filtered_search/filtered_search_token_keys_spec.js @@ -33,7 +33,7 @@ describe('Filtered Search Token Keys', () => { describe('getKeys', () => { it('should return keys', () => { const getKeys = new FilteredSearchTokenKeys(tokenKeys).getKeys(); - const keys = new FilteredSearchTokenKeys(tokenKeys).get().map(i => i.key); + const keys = new FilteredSearchTokenKeys(tokenKeys).get().map((i) => i.key); keys.forEach((key, i) => { expect(key).toEqual(getKeys[i]); diff --git a/spec/frontend/filtered_search/filtered_search_visual_tokens_spec.js b/spec/frontend/filtered_search/filtered_search_visual_tokens_spec.js index 6a00065c9fe..44f67f269a2 100644 --- a/spec/frontend/filtered_search/filtered_search_visual_tokens_spec.js +++ b/spec/frontend/filtered_search/filtered_search_visual_tokens_spec.js @@ -1,13 +1,13 @@ import axios from 'axios'; import MockAdapter from 'axios-mock-adapter'; +import FilteredSearchSpecHelper from 'helpers/filtered_search_spec_helper'; import FilteredSearchVisualTokens from '~/filtered_search/filtered_search_visual_tokens'; -import FilteredSearchSpecHelper from '../helpers/filtered_search_spec_helper'; describe('Filtered Search Visual Tokens', () => { let mock; const subject = FilteredSearchVisualTokens; - const findElements = tokenElement => { + const findElements = (tokenElement) => { const tokenNameElement = tokenElement.querySelector('.name'); const tokenOperatorElement = tokenElement.querySelector('.operator'); const tokenValueContainer = tokenElement.querySelector('.value-container'); diff --git a/spec/frontend/filtered_search/issues_filtered_search_token_keys_spec.js b/spec/frontend/filtered_search/issues_filtered_search_token_keys_spec.js index c7be900ba2c..2041bc3d959 100644 --- a/spec/frontend/filtered_search/issues_filtered_search_token_keys_spec.js +++ b/spec/frontend/filtered_search/issues_filtered_search_token_keys_spec.js @@ -23,7 +23,7 @@ describe('Issues Filtered Search Token Keys', () => { }); it('should return assignee as a string', () => { - const assignee = tokenKeys.find(tokenKey => tokenKey.key === 'assignee'); + const assignee = tokenKeys.find((tokenKey) => tokenKey.key === 'assignee'); expect(assignee.type).toEqual('string'); }); @@ -32,7 +32,7 @@ describe('Issues Filtered Search Token Keys', () => { describe('getKeys', () => { it('should return keys', () => { const getKeys = IssuableFilteredSearchTokenKeys.getKeys(); - const keys = IssuableFilteredSearchTokenKeys.get().map(i => i.key); + const keys = IssuableFilteredSearchTokenKeys.get().map((i) => i.key); keys.forEach((key, i) => { expect(key).toEqual(getKeys[i]); @@ -145,4 +145,25 @@ describe('Issues Filtered Search Token Keys', () => { expect(result).toEqual(conditions[0]); }); }); + + describe('removeTokensForKeys', () => { + let initTokenKeys; + + beforeEach(() => { + initTokenKeys = [...IssuableFilteredSearchTokenKeys.get()]; + }); + + it('should remove the tokenKeys corresponding to the given keys', () => { + const [firstTokenKey, secondTokenKey, ...restTokens] = initTokenKeys; + IssuableFilteredSearchTokenKeys.removeTokensForKeys(firstTokenKey.key, secondTokenKey.key); + + expect(IssuableFilteredSearchTokenKeys.get()).toEqual(restTokens); + }); + + it('should do nothing when key is not found', () => { + IssuableFilteredSearchTokenKeys.removeTokensForKeys('bogus'); + + expect(IssuableFilteredSearchTokenKeys.get()).toEqual(initTokenKeys); + }); + }); }); diff --git a/spec/frontend/filtered_search/recent_searches_root_spec.js b/spec/frontend/filtered_search/recent_searches_root_spec.js index 281d406e013..6bb9e68d591 100644 --- a/spec/frontend/filtered_search/recent_searches_root_spec.js +++ b/spec/frontend/filtered_search/recent_searches_root_spec.js @@ -16,7 +16,7 @@ describe('RecentSearchesRoot', () => { }, }; - Vue.mockImplementation(options => { + Vue.mockImplementation((options) => { ({ data, template } = options); }); diff --git a/spec/frontend/filtered_search/services/recent_searches_service_spec.js b/spec/frontend/filtered_search/services/recent_searches_service_spec.js index afeca54b949..6711ce03d40 100644 --- a/spec/frontend/filtered_search/services/recent_searches_service_spec.js +++ b/spec/frontend/filtered_search/services/recent_searches_service_spec.js @@ -18,49 +18,49 @@ describe('RecentSearchesService', () => { jest.spyOn(RecentSearchesService, 'isAvailable').mockReturnValue(true); }); - it('should default to empty array', done => { + it('should default to empty array', (done) => { const fetchItemsPromise = service.fetch(); fetchItemsPromise - .then(items => { + .then((items) => { expect(items).toEqual([]); }) .then(done) .catch(done.fail); }); - it('should reject when unable to parse', done => { + it('should reject when unable to parse', (done) => { jest.spyOn(localStorage, 'getItem').mockReturnValue('fail'); const fetchItemsPromise = service.fetch(); fetchItemsPromise .then(done.fail) - .catch(error => { + .catch((error) => { expect(error).toEqual(expect.any(SyntaxError)); }) .then(done) .catch(done.fail); }); - it('should reject when service is unavailable', done => { + it('should reject when service is unavailable', (done) => { RecentSearchesService.isAvailable.mockReturnValue(false); service .fetch() .then(done.fail) - .catch(error => { + .catch((error) => { expect(error).toEqual(expect.any(Error)); }) .then(done) .catch(done.fail); }); - it('should return items from localStorage', done => { + it('should return items from localStorage', (done) => { jest.spyOn(localStorage, 'getItem').mockReturnValue('["foo", "bar"]'); const fetchItemsPromise = service.fetch(); fetchItemsPromise - .then(items => { + .then((items) => { expect(items).toEqual(['foo', 'bar']); }) .then(done) @@ -74,11 +74,11 @@ describe('RecentSearchesService', () => { jest.spyOn(Storage.prototype, 'getItem').mockImplementation(() => {}); }); - it('should not call .getItem', done => { + it('should not call .getItem', (done) => { RecentSearchesService.prototype .fetch() .then(done.fail) - .catch(err => { + .catch((err) => { expect(err).toEqual(new RecentSearchesServiceError()); expect(localStorage.getItem).not.toHaveBeenCalled(); }) diff --git a/spec/frontend/filtered_search/visual_token_value_spec.js b/spec/frontend/filtered_search/visual_token_value_spec.js index e2855b29b70..2a76c4a27df 100644 --- a/spec/frontend/filtered_search/visual_token_value_spec.js +++ b/spec/frontend/filtered_search/visual_token_value_spec.js @@ -1,13 +1,13 @@ import { escape } from 'lodash'; -import { TEST_HOST } from 'jest/helpers/test_constants'; +import { TEST_HOST } from 'helpers/test_constants'; +import FilteredSearchSpecHelper from 'helpers/filtered_search_spec_helper'; import VisualTokenValue from '~/filtered_search/visual_token_value'; import AjaxCache from '~/lib/utils/ajax_cache'; import UsersCache from '~/lib/utils/users_cache'; import DropdownUtils from '~/filtered_search//dropdown_utils'; -import FilteredSearchSpecHelper from '../helpers/filtered_search_spec_helper'; describe('Filtered Search Visual Tokens', () => { - const findElements = tokenElement => { + const findElements = (tokenElement) => { const tokenNameElement = tokenElement.querySelector('.name'); const tokenValueContainer = tokenElement.querySelector('.value-container'); const tokenValueElement = tokenValueContainer.querySelector('.value'); @@ -39,15 +39,15 @@ describe('Filtered Search Visual Tokens', () => { let usersCacheSpy; beforeEach(() => { - jest.spyOn(UsersCache, 'retrieve').mockImplementation(username => usersCacheSpy(username)); + jest.spyOn(UsersCache, 'retrieve').mockImplementation((username) => usersCacheSpy(username)); }); - it('ignores error if UsersCache throws', done => { + it('ignores error if UsersCache throws', (done) => { jest.spyOn(window, 'Flash').mockImplementation(() => {}); const dummyError = new Error('Earth rotated backwards'); const { subject, tokenValueContainer, tokenValueElement } = findElements(authorToken); const tokenValue = tokenValueElement.innerText; - usersCacheSpy = username => { + usersCacheSpy = (username) => { expect(`@${username}`).toBe(tokenValue); return Promise.reject(dummyError); }; @@ -61,10 +61,10 @@ describe('Filtered Search Visual Tokens', () => { .catch(done.fail); }); - it('does nothing if user cannot be found', done => { + it('does nothing if user cannot be found', (done) => { const { subject, tokenValueContainer, tokenValueElement } = findElements(authorToken); const tokenValue = tokenValueElement.innerText; - usersCacheSpy = username => { + usersCacheSpy = (username) => { expect(`@${username}`).toBe(tokenValue); return Promise.resolve(undefined); }; @@ -78,14 +78,14 @@ describe('Filtered Search Visual Tokens', () => { .catch(done.fail); }); - it('replaces author token with avatar and display name', done => { + it('replaces author token with avatar and display name', (done) => { const dummyUser = { name: 'Important Person', avatar_url: 'https://host.invalid/mypics/avatar.png', }; const { subject, tokenValueContainer, tokenValueElement } = findElements(authorToken); const tokenValue = tokenValueElement.innerText; - usersCacheSpy = username => { + usersCacheSpy = (username) => { expect(`@${username}`).toBe(tokenValue); return Promise.resolve(dummyUser); }; @@ -104,14 +104,14 @@ describe('Filtered Search Visual Tokens', () => { .catch(done.fail); }); - it('escapes user name when creating token', done => { + it('escapes user name when creating token', (done) => { const dummyUser = { name: '<script>', avatar_url: `${TEST_HOST}/mypics/avatar.png`, }; const { subject, tokenValueContainer, tokenValueElement } = findElements(authorToken); const tokenValue = tokenValueElement.innerText; - usersCacheSpy = username => { + usersCacheSpy = (username) => { expect(`@${username}`).toBe(tokenValue); return Promise.resolve(dummyUser); }; @@ -168,7 +168,7 @@ describe('Filtered Search Visual Tokens', () => { AjaxCache.internalStorage[`${filteredSearchInput.dataset.labelsEndpoint}.json`] = labelData; }); - const parseColor = color => { + const parseColor = (color) => { const dummyElement = document.createElement('div'); dummyElement.style.color = color; return dummyElement.style.color; @@ -180,10 +180,10 @@ describe('Filtered Search Visual Tokens', () => { expect(tokenValueContainer.style.color).toBe(parseColor(label.text_color)); }; - const findLabel = tokenValue => - labelData.find(label => tokenValue === `~${DropdownUtils.getEscapedText(label.title)}`); + const findLabel = (tokenValue) => + labelData.find((label) => tokenValue === `~${DropdownUtils.getEscapedText(label.title)}`); - it('updates the color of a label token', done => { + it('updates the color of a label token', (done) => { const { subject, tokenValueContainer, tokenValueElement } = findElements(bugLabelToken); const tokenValue = tokenValueElement.innerText; const matchingLabel = findLabel(tokenValue); @@ -197,7 +197,7 @@ describe('Filtered Search Visual Tokens', () => { .catch(done.fail); }); - it('updates the color of a label token with spaces', done => { + it('updates the color of a label token with spaces', (done) => { const { subject, tokenValueContainer, tokenValueElement } = findElements(spaceLabelToken); const tokenValue = tokenValueElement.innerText; const matchingLabel = findLabel(tokenValue); @@ -211,7 +211,7 @@ describe('Filtered Search Visual Tokens', () => { .catch(done.fail); }); - it('does not change color of a missing label', done => { + it('does not change color of a missing label', (done) => { const { subject, tokenValueContainer, tokenValueElement } = findElements(missingLabelToken); const tokenValue = tokenValueElement.innerText; const matchingLabel = findLabel(tokenValue); @@ -260,7 +260,7 @@ describe('Filtered Search Visual Tokens', () => { }); describe('render', () => { - const setupSpies = subject => { + const setupSpies = (subject) => { jest.spyOn(subject, 'updateLabelTokenColor').mockImplementation(() => {}); const updateLabelTokenColorSpy = subject.updateLabelTokenColor; |