diff options
Diffstat (limited to 'spec/frontend/vue_shared/components/filtered_search_bar/tokens/user_token_spec.js')
-rw-r--r-- | spec/frontend/vue_shared/components/filtered_search_bar/tokens/user_token_spec.js | 118 |
1 files changed, 29 insertions, 89 deletions
diff --git a/spec/frontend/vue_shared/components/filtered_search_bar/tokens/user_token_spec.js b/spec/frontend/vue_shared/components/filtered_search_bar/tokens/user_token_spec.js index decf843091e..581adef7e32 100644 --- a/spec/frontend/vue_shared/components/filtered_search_bar/tokens/user_token_spec.js +++ b/spec/frontend/vue_shared/components/filtered_search_bar/tokens/user_token_spec.js @@ -1,4 +1,5 @@ import { + GlFilteredSearchToken, GlFilteredSearchTokenSegment, GlFilteredSearchSuggestion, GlDropdownDivider, @@ -310,6 +311,34 @@ describe('UserToken', () => { expect(mockInput).toHaveBeenLastCalledWith([{ data: 'mockData', operator: '=' }]); }); + describe('when loading', () => { + beforeEach(() => { + wrapper = createComponent({ + active: true, + config: { + ...mockAuthorToken, + preloadedUsers: mockPreloadedUsers, + defaultUsers: [], + }, + stubs: { Portal: true }, + }); + }); + + it('shows current user', () => { + const firstSuggestion = wrapper.findComponent(GlFilteredSearchSuggestion).text(); + expect(firstSuggestion).toContain('Administrator'); + expect(firstSuggestion).toContain('@root'); + }); + + it('does not show non-matching user while searching', async () => { + wrapper.findComponent(GlFilteredSearchToken).vm.$emit('input', { data: 'foo' }); + + await nextTick(); + + expect(wrapper.findComponent(GlFilteredSearchSuggestion).exists()).toBe(false); + }); + }); + describe('multiSelect', () => { it('renders check icons in suggestions when multiSelect is true', async () => { wrapper = createComponent({ @@ -322,15 +351,11 @@ describe('UserToken', () => { stubs: { Portal: true }, groupMultiSelectTokens: true, }); - await activateSuggestionsList(); - const suggestions = wrapper.findAllComponents(GlFilteredSearchSuggestion); - expect(findIconAtSuggestion(0).props('name')).toBe('check'); expect(findIconAtSuggestion(1).props('name')).toBe('check'); expect(findIconAtSuggestion(2).exists()).toBe(false); - // test for left padding on unchecked items (so alignment is correct) expect(suggestions.at(2).find('.gl-pl-6').exists()).toBe(true); }); @@ -344,101 +369,16 @@ describe('UserToken', () => { config: { ...mockAuthorToken, multiSelect: true, initialUsers: mockUsers }, groupMultiSelectTokens: true, }); - await nextTick(); const tokenSegments = wrapper.findAllComponents(GlFilteredSearchTokenSegment); - expect(tokenSegments).toHaveLength(3); // Author, =, "Administrator" - const tokenValue = tokenSegments.at(2); - const [user1, user2] = mockUsers; - expect(tokenValue.findAllComponents(GlAvatar).at(1).props('src')).toBe( mockUsers[1].avatar_url, ); expect(tokenValue.text()).toBe(`${user1.name},${user2.name}`); }); - - it('adds new user to multi-select-values', () => { - wrapper = createComponent({ - value: { data: [mockUsers[0].username], operator: '||' }, - data: { - users: mockUsers, - }, - config: { ...mockAuthorToken, multiSelect: true, initialUsers: mockUsers }, - active: true, - groupMultiSelectTokens: true, - }); - - findBaseToken().vm.$emit('token-selected', mockUsers[1].username); - - expect(findBaseToken().props().multiSelectValues).toEqual([ - mockUsers[0].username, - mockUsers[1].username, - ]); - }); - - it('removes existing user from array', () => { - const initialUsers = [mockUsers[0].username, mockUsers[1].username]; - wrapper = createComponent({ - value: { data: initialUsers, operator: '||' }, - data: { - users: mockUsers, - }, - config: { ...mockAuthorToken, multiSelect: true, initialUsers: mockUsers }, - active: true, - groupMultiSelectTokens: true, - }); - - findBaseToken().vm.$emit('token-selected', mockUsers[0].username); - - expect(findBaseToken().props().multiSelectValues).toEqual([mockUsers[1].username]); - }); - - it('clears input field after token selected', () => { - wrapper = createComponent({ - value: { data: [mockUsers[0].username, mockUsers[1].username], operator: '||' }, - data: { - users: mockUsers, - }, - config: { ...mockAuthorToken, multiSelect: true, initialUsers: mockUsers }, - active: true, - groupMultiSelectTokens: true, - }); - - findBaseToken().vm.$emit('token-selected', 'test'); - - expect(wrapper.emitted('input')).toEqual([[{ operator: '||', data: '' }]]); - }); - }); - - describe('when loading', () => { - beforeEach(() => { - wrapper = createComponent({ - active: true, - config: { - ...mockAuthorToken, - preloadedUsers: mockPreloadedUsers, - defaultUsers: [], - }, - stubs: { Portal: true }, - }); - }); - - it('shows current user', () => { - const firstSuggestion = wrapper.findComponent(GlFilteredSearchSuggestion).text(); - expect(firstSuggestion).toContain('Administrator'); - expect(firstSuggestion).toContain('@root'); - }); - - it('does not show current user while searching', async () => { - wrapper.findComponent(BaseToken).vm.handleInput({ data: 'foo' }); - - await nextTick(); - - expect(wrapper.findComponent(GlFilteredSearchSuggestion).exists()).toBe(false); - }); }); }); }); |