Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/frontend/milestones/stores/actions_spec.js')
-rw-r--r--spec/frontend/milestones/stores/actions_spec.js140
1 files changed, 140 insertions, 0 deletions
diff --git a/spec/frontend/milestones/stores/actions_spec.js b/spec/frontend/milestones/stores/actions_spec.js
new file mode 100644
index 00000000000..ad73d0e4238
--- /dev/null
+++ b/spec/frontend/milestones/stores/actions_spec.js
@@ -0,0 +1,140 @@
+import testAction from 'helpers/vuex_action_helper';
+import createState from '~/milestones/stores/state';
+import * as actions from '~/milestones/stores/actions';
+import * as types from '~/milestones/stores/mutation_types';
+
+let mockProjectMilestonesReturnValue;
+let mockProjectSearchReturnValue;
+
+jest.mock('~/api', () => ({
+ // `__esModule: true` is required when mocking modules with default exports:
+ // https://jestjs.io/docs/en/jest-object#jestmockmodulename-factory-options
+ __esModule: true,
+ default: {
+ projectMilestones: () => mockProjectMilestonesReturnValue,
+ projectSearch: () => mockProjectSearchReturnValue,
+ },
+}));
+
+describe('Milestone combobox Vuex store actions', () => {
+ let state;
+
+ beforeEach(() => {
+ state = createState();
+ });
+
+ describe('setProjectId', () => {
+ it(`commits ${types.SET_PROJECT_ID} with the new project ID`, () => {
+ const projectId = '4';
+ testAction(actions.setProjectId, projectId, state, [
+ { type: types.SET_PROJECT_ID, payload: projectId },
+ ]);
+ });
+ });
+
+ describe('setSelectedMilestones', () => {
+ it(`commits ${types.SET_SELECTED_MILESTONES} with the new selected milestones name`, () => {
+ const selectedMilestones = ['v1.2.3'];
+ testAction(actions.setSelectedMilestones, selectedMilestones, state, [
+ { type: types.SET_SELECTED_MILESTONES, payload: selectedMilestones },
+ ]);
+ });
+ });
+
+ describe('toggleMilestones', () => {
+ const selectedMilestone = 'v1.2.3';
+ it(`commits ${types.ADD_SELECTED_MILESTONE} with the new selected milestone name`, () => {
+ testAction(actions.toggleMilestones, selectedMilestone, state, [
+ { type: types.ADD_SELECTED_MILESTONE, payload: selectedMilestone },
+ ]);
+ });
+
+ it(`commits ${types.REMOVE_SELECTED_MILESTONE} with the new selected milestone name`, () => {
+ state.selectedMilestones = [selectedMilestone];
+ testAction(actions.toggleMilestones, selectedMilestone, state, [
+ { type: types.REMOVE_SELECTED_MILESTONE, payload: selectedMilestone },
+ ]);
+ });
+ });
+
+ describe('search', () => {
+ it(`commits ${types.SET_QUERY} with the new search query`, () => {
+ const query = 'v1.0';
+ testAction(
+ actions.search,
+ query,
+ state,
+ [{ type: types.SET_QUERY, payload: query }],
+ [{ type: 'searchMilestones' }],
+ );
+ });
+ });
+
+ describe('searchMilestones', () => {
+ describe('when the search is successful', () => {
+ const projectSearchApiResponse = { data: [{ title: 'v1.0' }] };
+
+ beforeEach(() => {
+ mockProjectSearchReturnValue = Promise.resolve(projectSearchApiResponse);
+ });
+
+ it(`commits ${types.REQUEST_START}, ${types.RECEIVE_PROJECT_MILESTONES_SUCCESS} with the response from the API, and ${types.REQUEST_FINISH}`, () => {
+ return testAction(actions.searchMilestones, undefined, state, [
+ { type: types.REQUEST_START },
+ { type: types.RECEIVE_PROJECT_MILESTONES_SUCCESS, payload: projectSearchApiResponse },
+ { type: types.REQUEST_FINISH },
+ ]);
+ });
+ });
+
+ describe('when the search fails', () => {
+ const error = new Error('Something went wrong!');
+
+ beforeEach(() => {
+ mockProjectSearchReturnValue = Promise.reject(error);
+ });
+
+ it(`commits ${types.REQUEST_START}, ${types.RECEIVE_PROJECT_MILESTONES_ERROR} with the error object, and ${types.REQUEST_FINISH}`, () => {
+ return testAction(actions.searchMilestones, undefined, state, [
+ { type: types.REQUEST_START },
+ { type: types.RECEIVE_PROJECT_MILESTONES_ERROR, payload: error },
+ { type: types.REQUEST_FINISH },
+ ]);
+ });
+ });
+ });
+
+ describe('fetchMilestones', () => {
+ describe('when the fetch is successful', () => {
+ const projectMilestonesApiResponse = { data: [{ title: 'v1.0' }] };
+
+ beforeEach(() => {
+ mockProjectMilestonesReturnValue = Promise.resolve(projectMilestonesApiResponse);
+ });
+
+ it(`commits ${types.REQUEST_START}, ${types.RECEIVE_PROJECT_MILESTONES_SUCCESS} with the response from the API, and ${types.REQUEST_FINISH}`, () => {
+ return testAction(actions.fetchMilestones, undefined, state, [
+ { type: types.REQUEST_START },
+ { type: types.RECEIVE_PROJECT_MILESTONES_SUCCESS, payload: projectMilestonesApiResponse },
+ { type: types.REQUEST_FINISH },
+ ]);
+ });
+ });
+
+ describe('when the fetch fails', () => {
+ const error = new Error('Something went wrong!');
+
+ beforeEach(() => {
+ mockProjectMilestonesReturnValue = Promise.reject(error);
+ });
+
+ it(`commits ${types.REQUEST_START}, ${types.RECEIVE_PROJECT_MILESTONES_ERROR} with the error object, and ${types.REQUEST_FINISH}`, () => {
+ return testAction(actions.fetchMilestones, undefined, state, [
+ { type: types.REQUEST_START },
+ { type: types.RECEIVE_PROJECT_MILESTONES_ERROR, payload: error },
+ { type: types.REQUEST_FINISH },
+ ]);
+ });
+ });
+ });
+});