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/cycle_analytics/store/actions_spec.js')
-rw-r--r--spec/frontend/cycle_analytics/store/actions_spec.js518
1 files changed, 0 insertions, 518 deletions
diff --git a/spec/frontend/cycle_analytics/store/actions_spec.js b/spec/frontend/cycle_analytics/store/actions_spec.js
deleted file mode 100644
index 94b6de85a5c..00000000000
--- a/spec/frontend/cycle_analytics/store/actions_spec.js
+++ /dev/null
@@ -1,518 +0,0 @@
-import axios from 'axios';
-import MockAdapter from 'axios-mock-adapter';
-import testAction from 'helpers/vuex_action_helper';
-import * as actions from '~/cycle_analytics/store/actions';
-import * as getters from '~/cycle_analytics/store/getters';
-import httpStatusCodes from '~/lib/utils/http_status';
-import {
- allowedStages,
- selectedStage,
- selectedValueStream,
- currentGroup,
- createdAfter,
- createdBefore,
- initialPaginationState,
- reviewEvents,
-} from '../mock_data';
-
-const { id: groupId, path: groupPath } = currentGroup;
-const mockMilestonesPath = 'mock-milestones.json';
-const mockLabelsPath = 'mock-labels.json';
-const mockRequestPath = 'some/cool/path';
-const mockFullPath = '/namespace/-/analytics/value_stream_analytics/value_streams';
-const mockEndpoints = {
- fullPath: mockFullPath,
- requestPath: mockRequestPath,
- labelsPath: mockLabelsPath,
- milestonesPath: mockMilestonesPath,
- groupId,
- groupPath,
-};
-const mockSetDateActionCommit = {
- payload: { createdAfter, createdBefore },
- type: 'SET_DATE_RANGE',
-};
-
-const defaultState = {
- ...getters,
- selectedValueStream,
- createdAfter,
- createdBefore,
- pagination: initialPaginationState,
-};
-
-describe('Project Value Stream Analytics actions', () => {
- let state;
- let mock;
-
- beforeEach(() => {
- state = { ...defaultState };
- mock = new MockAdapter(axios);
- });
-
- afterEach(() => {
- mock.restore();
- state = {};
- });
-
- const mutationTypes = (arr) => arr.map(({ type }) => type);
-
- describe.each`
- action | payload | expectedActions | expectedMutations
- ${'setDateRange'} | ${{ createdAfter, createdBefore }} | ${[{ type: 'refetchStageData' }]} | ${[mockSetDateActionCommit]}
- ${'setFilters'} | ${[]} | ${[{ type: 'refetchStageData' }]} | ${[]}
- ${'setSelectedStage'} | ${{ selectedStage }} | ${[{ type: 'refetchStageData' }]} | ${[{ type: 'SET_SELECTED_STAGE', payload: { selectedStage } }]}
- ${'setSelectedValueStream'} | ${{ selectedValueStream }} | ${[{ type: 'fetchValueStreamStages' }]} | ${[{ type: 'SET_SELECTED_VALUE_STREAM', payload: { selectedValueStream } }]}
- `('$action', ({ action, payload, expectedActions, expectedMutations }) => {
- const types = mutationTypes(expectedMutations);
- it(`will dispatch ${expectedActions} and commit ${types}`, () =>
- testAction({
- action: actions[action],
- state,
- payload,
- expectedMutations,
- expectedActions,
- }));
- });
-
- describe('initializeVsa', () => {
- const selectedAuthor = 'Author';
- const selectedMilestone = 'Milestone 1';
- const selectedAssigneeList = ['Assignee 1', 'Assignee 2'];
- const selectedLabelList = ['Label 1', 'Label 2'];
- const payload = {
- endpoints: mockEndpoints,
- selectedAuthor,
- selectedMilestone,
- selectedAssigneeList,
- selectedLabelList,
- selectedStage,
- };
- const mockFilterEndpoints = {
- groupEndpoint: 'foo',
- labelsEndpoint: mockLabelsPath,
- milestonesEndpoint: mockMilestonesPath,
- projectEndpoint: '/namespace/-/analytics/value_stream_analytics/value_streams',
- };
-
- it('will dispatch fetchValueStreams actions and commit SET_LOADING and INITIALIZE_VSA', () => {
- return testAction({
- action: actions.initializeVsa,
- state: {},
- payload,
- expectedMutations: [
- { type: 'INITIALIZE_VSA', payload },
- { type: 'SET_LOADING', payload: true },
- { type: 'SET_LOADING', payload: false },
- ],
- expectedActions: [
- { type: 'filters/setEndpoints', payload: mockFilterEndpoints },
- {
- type: 'filters/initialize',
- payload: { selectedAuthor, selectedMilestone, selectedAssigneeList, selectedLabelList },
- },
- { type: 'fetchValueStreams' },
- { type: 'setInitialStage', payload: selectedStage },
- ],
- });
- });
- });
-
- describe('setInitialStage', () => {
- beforeEach(() => {
- state = { ...state, stages: allowedStages };
- });
-
- describe('with a selected stage', () => {
- it('will commit `SET_SELECTED_STAGE` and fetchValueStreamStageData actions', () => {
- const fakeStage = { ...selectedStage, id: 'fake', name: 'fake-stae' };
- return testAction({
- action: actions.setInitialStage,
- state,
- payload: fakeStage,
- expectedMutations: [
- {
- type: 'SET_SELECTED_STAGE',
- payload: fakeStage,
- },
- ],
- expectedActions: [{ type: 'fetchValueStreamStageData' }],
- });
- });
- });
-
- describe('without a selected stage', () => {
- it('will select the first stage from the value stream', () => {
- const [firstStage] = allowedStages;
- testAction({
- action: actions.setInitialStage,
- state,
- payload: null,
- expectedMutations: [{ type: 'SET_SELECTED_STAGE', payload: firstStage }],
- expectedActions: [{ type: 'fetchValueStreamStageData' }],
- });
- });
- });
-
- describe('with no value stream stages available', () => {
- it('will return SET_NO_ACCESS_ERROR', () => {
- state = { ...state, stages: [] };
- testAction({
- action: actions.setInitialStage,
- state,
- payload: null,
- expectedMutations: [{ type: 'SET_NO_ACCESS_ERROR' }],
- expectedActions: [],
- });
- });
- });
- });
-
- describe('updateStageTablePagination', () => {
- beforeEach(() => {
- state = { ...state, selectedStage };
- });
-
- it(`will dispatch the "fetchStageData" action and commit the 'SET_PAGINATION' mutation`, () => {
- return testAction({
- action: actions.updateStageTablePagination,
- state,
- expectedMutations: [{ type: 'SET_PAGINATION' }],
- expectedActions: [{ type: 'fetchStageData', payload: selectedStage.id }],
- });
- });
- });
-
- describe('fetchStageData', () => {
- const mockStagePath = /value_streams\/\w+\/stages\/\w+\/records/;
- const headers = {
- 'X-Next-Page': 2,
- 'X-Page': 1,
- };
-
- beforeEach(() => {
- state = {
- ...defaultState,
- endpoints: mockEndpoints,
- selectedStage,
- };
- mock = new MockAdapter(axios);
- mock.onGet(mockStagePath).reply(httpStatusCodes.OK, reviewEvents, headers);
- });
-
- it(`commits the 'RECEIVE_STAGE_DATA_SUCCESS' mutation`, () =>
- testAction({
- action: actions.fetchStageData,
- state,
- payload: {},
- expectedMutations: [
- { type: 'REQUEST_STAGE_DATA' },
- { type: 'RECEIVE_STAGE_DATA_SUCCESS', payload: reviewEvents },
- { type: 'SET_PAGINATION', payload: { hasNextPage: true, page: 1 } },
- ],
- expectedActions: [],
- }));
-
- describe('with a successful request, but an error in the payload', () => {
- const tooMuchDataError = 'Too much data';
-
- beforeEach(() => {
- state = {
- ...defaultState,
- endpoints: mockEndpoints,
- selectedStage,
- };
- mock = new MockAdapter(axios);
- mock.onGet(mockStagePath).reply(httpStatusCodes.OK, { error: tooMuchDataError });
- });
-
- it(`commits the 'RECEIVE_STAGE_DATA_ERROR' mutation`, () =>
- testAction({
- action: actions.fetchStageData,
- state,
- payload: { error: tooMuchDataError },
- expectedMutations: [
- { type: 'REQUEST_STAGE_DATA' },
- { type: 'RECEIVE_STAGE_DATA_ERROR', payload: tooMuchDataError },
- ],
- expectedActions: [],
- }));
- });
-
- describe('with a failing request', () => {
- beforeEach(() => {
- state = {
- ...defaultState,
- endpoints: mockEndpoints,
- selectedStage,
- };
- mock = new MockAdapter(axios);
- mock.onGet(mockStagePath).reply(httpStatusCodes.BAD_REQUEST);
- });
-
- it(`commits the 'RECEIVE_STAGE_DATA_ERROR' mutation`, () =>
- testAction({
- action: actions.fetchStageData,
- state,
- payload: {},
- expectedMutations: [{ type: 'REQUEST_STAGE_DATA' }, { type: 'RECEIVE_STAGE_DATA_ERROR' }],
- expectedActions: [],
- }));
- });
- });
-
- describe('fetchValueStreams', () => {
- const mockValueStreamPath = /\/analytics\/value_stream_analytics\/value_streams/;
-
- beforeEach(() => {
- state = {
- endpoints: mockEndpoints,
- };
- mock = new MockAdapter(axios);
- mock.onGet(mockValueStreamPath).reply(httpStatusCodes.OK);
- });
-
- it(`commits the 'REQUEST_VALUE_STREAMS' mutation`, () =>
- testAction({
- action: actions.fetchValueStreams,
- state,
- payload: {},
- expectedMutations: [{ type: 'REQUEST_VALUE_STREAMS' }],
- expectedActions: [{ type: 'receiveValueStreamsSuccess' }],
- }));
-
- describe('with a failing request', () => {
- beforeEach(() => {
- mock = new MockAdapter(axios);
- mock.onGet(mockValueStreamPath).reply(httpStatusCodes.BAD_REQUEST);
- });
-
- it(`commits the 'RECEIVE_VALUE_STREAMS_ERROR' mutation`, () =>
- testAction({
- action: actions.fetchValueStreams,
- state,
- payload: {},
- expectedMutations: [
- { type: 'REQUEST_VALUE_STREAMS' },
- { type: 'RECEIVE_VALUE_STREAMS_ERROR', payload: httpStatusCodes.BAD_REQUEST },
- ],
- expectedActions: [],
- }));
- });
- });
-
- describe('receiveValueStreamsSuccess', () => {
- const mockValueStream = {
- id: 'mockDefault',
- name: 'mock default',
- };
- const mockValueStreams = [mockValueStream, selectedValueStream];
- it('with data, will set the first value stream', () => {
- testAction({
- action: actions.receiveValueStreamsSuccess,
- state,
- payload: mockValueStreams,
- expectedMutations: [{ type: 'RECEIVE_VALUE_STREAMS_SUCCESS', payload: mockValueStreams }],
- expectedActions: [{ type: 'setSelectedValueStream', payload: mockValueStream }],
- });
- });
-
- it('without data, will set the default value stream', () => {
- testAction({
- action: actions.receiveValueStreamsSuccess,
- state,
- payload: [],
- expectedMutations: [{ type: 'RECEIVE_VALUE_STREAMS_SUCCESS', payload: [] }],
- expectedActions: [{ type: 'setSelectedValueStream', payload: selectedValueStream }],
- });
- });
- });
-
- describe('fetchValueStreamStages', () => {
- const mockValueStreamPath = /\/analytics\/value_stream_analytics\/value_streams/;
-
- beforeEach(() => {
- state = {
- endpoints: mockEndpoints,
- selectedValueStream,
- };
- mock = new MockAdapter(axios);
- mock.onGet(mockValueStreamPath).reply(httpStatusCodes.OK);
- });
-
- it(`commits the 'REQUEST_VALUE_STREAM_STAGES' and 'RECEIVE_VALUE_STREAM_STAGES_SUCCESS' mutations`, () =>
- testAction({
- action: actions.fetchValueStreamStages,
- state,
- payload: {},
- expectedMutations: [
- { type: 'REQUEST_VALUE_STREAM_STAGES' },
- { type: 'RECEIVE_VALUE_STREAM_STAGES_SUCCESS' },
- ],
- expectedActions: [],
- }));
-
- describe('with a failing request', () => {
- beforeEach(() => {
- mock = new MockAdapter(axios);
- mock.onGet(mockValueStreamPath).reply(httpStatusCodes.BAD_REQUEST);
- });
-
- it(`commits the 'RECEIVE_VALUE_STREAM_STAGES_ERROR' mutation`, () =>
- testAction({
- action: actions.fetchValueStreamStages,
- state,
- payload: {},
- expectedMutations: [
- { type: 'REQUEST_VALUE_STREAM_STAGES' },
- { type: 'RECEIVE_VALUE_STREAM_STAGES_ERROR', payload: httpStatusCodes.BAD_REQUEST },
- ],
- expectedActions: [],
- }));
- });
- });
-
- describe('fetchStageMedians', () => {
- const mockValueStreamPath = /median/;
-
- const stageMediansPayload = [
- { id: 'issue', value: null },
- { id: 'plan', value: null },
- { id: 'code', value: null },
- ];
-
- const stageMedianError = new Error(
- `Request failed with status code ${httpStatusCodes.BAD_REQUEST}`,
- );
-
- beforeEach(() => {
- state = {
- fullPath: mockFullPath,
- selectedValueStream,
- stages: allowedStages,
- };
- mock = new MockAdapter(axios);
- mock.onGet(mockValueStreamPath).reply(httpStatusCodes.OK);
- });
-
- it(`commits the 'REQUEST_STAGE_MEDIANS' and 'RECEIVE_STAGE_MEDIANS_SUCCESS' mutations`, () =>
- testAction({
- action: actions.fetchStageMedians,
- state,
- payload: {},
- expectedMutations: [
- { type: 'REQUEST_STAGE_MEDIANS' },
- { type: 'RECEIVE_STAGE_MEDIANS_SUCCESS', payload: stageMediansPayload },
- ],
- expectedActions: [],
- }));
-
- describe('with a failing request', () => {
- beforeEach(() => {
- mock = new MockAdapter(axios);
- mock.onGet(mockValueStreamPath).reply(httpStatusCodes.BAD_REQUEST);
- });
-
- it(`commits the 'RECEIVE_VALUE_STREAM_STAGES_ERROR' mutation`, () =>
- testAction({
- action: actions.fetchStageMedians,
- state,
- payload: {},
- expectedMutations: [
- { type: 'REQUEST_STAGE_MEDIANS' },
- { type: 'RECEIVE_STAGE_MEDIANS_ERROR', payload: stageMedianError },
- ],
- expectedActions: [],
- }));
- });
- });
-
- describe('fetchStageCountValues', () => {
- const mockValueStreamPath = /count/;
- const stageCountsPayload = [
- { id: 'issue', count: 1 },
- { id: 'plan', count: 2 },
- { id: 'code', count: 3 },
- ];
-
- const stageCountError = new Error(
- `Request failed with status code ${httpStatusCodes.BAD_REQUEST}`,
- );
-
- beforeEach(() => {
- state = {
- fullPath: mockFullPath,
- selectedValueStream,
- stages: allowedStages,
- };
- mock = new MockAdapter(axios);
- mock
- .onGet(mockValueStreamPath)
- .replyOnce(httpStatusCodes.OK, { count: 1 })
- .onGet(mockValueStreamPath)
- .replyOnce(httpStatusCodes.OK, { count: 2 })
- .onGet(mockValueStreamPath)
- .replyOnce(httpStatusCodes.OK, { count: 3 });
- });
-
- it(`commits the 'REQUEST_STAGE_COUNTS' and 'RECEIVE_STAGE_COUNTS_SUCCESS' mutations`, () =>
- testAction({
- action: actions.fetchStageCountValues,
- state,
- payload: {},
- expectedMutations: [
- { type: 'REQUEST_STAGE_COUNTS' },
- { type: 'RECEIVE_STAGE_COUNTS_SUCCESS', payload: stageCountsPayload },
- ],
- expectedActions: [],
- }));
-
- describe('with a failing request', () => {
- beforeEach(() => {
- mock = new MockAdapter(axios);
- mock.onGet(mockValueStreamPath).reply(httpStatusCodes.BAD_REQUEST);
- });
-
- it(`commits the 'RECEIVE_STAGE_COUNTS_ERROR' mutation`, () =>
- testAction({
- action: actions.fetchStageCountValues,
- state,
- payload: {},
- expectedMutations: [
- { type: 'REQUEST_STAGE_COUNTS' },
- { type: 'RECEIVE_STAGE_COUNTS_ERROR', payload: stageCountError },
- ],
- expectedActions: [],
- }));
- });
- });
-
- describe('refetchStageData', () => {
- it('will commit SET_LOADING and dispatch fetchValueStreamStageData actions', () =>
- testAction({
- action: actions.refetchStageData,
- state,
- payload: {},
- expectedMutations: [
- { type: 'SET_LOADING', payload: true },
- { type: 'SET_LOADING', payload: false },
- ],
- expectedActions: [{ type: 'fetchValueStreamStageData' }],
- }));
- });
-
- describe('fetchValueStreamStageData', () => {
- it('will dispatch the fetchStageData, fetchStageMedians and fetchStageCountValues actions', () =>
- testAction({
- action: actions.fetchValueStreamStageData,
- state,
- payload: {},
- expectedMutations: [],
- expectedActions: [
- { type: 'fetchStageData' },
- { type: 'fetchStageMedians' },
- { type: 'fetchStageCountValues' },
- ],
- }));
- });
-});