diff options
Diffstat (limited to 'spec/frontend/vue_shared/components/filtered_search_bar')
-rw-r--r-- | spec/frontend/vue_shared/components/filtered_search_bar/mock_data.js | 16 | ||||
-rw-r--r-- | spec/frontend/vue_shared/components/filtered_search_bar/tokens/milestone_token_spec.js | 45 |
2 files changed, 58 insertions, 3 deletions
diff --git a/spec/frontend/vue_shared/components/filtered_search_bar/mock_data.js b/spec/frontend/vue_shared/components/filtered_search_bar/mock_data.js index b2f4c780f51..a22ad4c450e 100644 --- a/spec/frontend/vue_shared/components/filtered_search_bar/mock_data.js +++ b/spec/frontend/vue_shared/components/filtered_search_bar/mock_data.js @@ -84,6 +84,19 @@ export const mockMilestones = [ mockEscapedMilestone, ]; +export const projectMilestonesResponse = { + data: { + project: { + id: 'gid://gitlab/Project/1', + attributes: { + nodes: mockMilestones, + __typename: 'MilestoneConnection', + }, + __typename: 'Project', + }, + }, +}; + export const mockCrmContacts = [ { __typename: 'CustomerRelationsContact', @@ -257,7 +270,8 @@ export const mockMilestoneToken = { symbol: '%', token: MilestoneToken, operators: OPERATORS_IS, - fetchMilestones: () => Promise.resolve({ data: mockMilestones }), + fullPath: 'gitlab-org', + isProject: true, }; export const mockReleaseToken = { diff --git a/spec/frontend/vue_shared/components/filtered_search_bar/tokens/milestone_token_spec.js b/spec/frontend/vue_shared/components/filtered_search_bar/tokens/milestone_token_spec.js index db51b4a05b1..36e82b39df4 100644 --- a/spec/frontend/vue_shared/components/filtered_search_bar/tokens/milestone_token_spec.js +++ b/spec/frontend/vue_shared/components/filtered_search_bar/tokens/milestone_token_spec.js @@ -6,17 +6,27 @@ import { } from '@gitlab/ui'; import { mount } from '@vue/test-utils'; import MockAdapter from 'axios-mock-adapter'; -import { nextTick } from 'vue'; +import Vue, { nextTick } from 'vue'; +import VueApollo from 'vue-apollo'; +import createMockApollo from 'helpers/mock_apollo_helper'; import waitForPromises from 'helpers/wait_for_promises'; import { createAlert } from '~/alert'; import axios from '~/lib/utils/axios_utils'; import { sortMilestonesByDueDate } from '~/milestones/utils'; +import searchMilestonesQuery from '~/issues/list/queries/search_milestones.query.graphql'; import { DEFAULT_MILESTONES } from '~/vue_shared/components/filtered_search_bar/constants'; import MilestoneToken from '~/vue_shared/components/filtered_search_bar/tokens/milestone_token.vue'; import BaseToken from '~/vue_shared/components/filtered_search_bar/tokens/base_token.vue'; -import { mockMilestoneToken, mockMilestones, mockRegularMilestone } from '../mock_data'; +import { + mockMilestoneToken, + mockMilestones, + mockRegularMilestone, + projectMilestonesResponse, +} from '../mock_data'; + +Vue.use(VueApollo); jest.mock('~/alert'); jest.mock('~/milestones/utils'); @@ -31,6 +41,9 @@ const defaultStubs = { }, }; +const milestonesQueryHandler = jest.fn().mockResolvedValue(projectMilestonesResponse); +const mockApollo = createMockApollo([[searchMilestonesQuery, milestonesQueryHandler]]); + function createComponent(options = {}) { const { config = { ...mockMilestoneToken, shouldSkipSort: true }, @@ -39,6 +52,7 @@ function createComponent(options = {}) { stubs = defaultStubs, } = options; return mount(MilestoneToken, { + apolloProvider: mockApollo, propsData: { config, value, @@ -102,6 +116,33 @@ describe('MilestoneToken', () => { }); }); + describe('default - when fetchMilestones function is not provided in config', () => { + beforeEach(() => { + wrapper = createComponent({}); + return triggerFetchMilestones(); + }); + + it('calls searchMilestonesQuery to fetch milestones', () => { + expect(milestonesQueryHandler).toHaveBeenCalledWith({ + fullPath: mockMilestoneToken.fullPath, + isProject: mockMilestoneToken.isProject, + search: null, + }); + }); + + it('calls searchMilestonesQuery with search parameter when provided', async () => { + const searchTerm = 'foo'; + + await triggerFetchMilestones(searchTerm); + + expect(milestonesQueryHandler).toHaveBeenCalledWith({ + fullPath: mockMilestoneToken.fullPath, + isProject: mockMilestoneToken.isProject, + search: searchTerm, + }); + }); + }); + describe('when request is successful', () => { const searchTerm = 'foo'; |