debian-mirror-gitlab/spec/frontend/import_projects/store/actions_spec.js

218 lines
5.8 KiB
JavaScript
Raw Normal View History

2019-07-07 11:18:12 +05:30
import MockAdapter from 'axios-mock-adapter';
2020-01-01 13:55:28 +05:30
import testAction from 'helpers/vuex_action_helper';
import { TEST_HOST } from 'helpers/test_constants';
2019-07-07 11:18:12 +05:30
import axios from '~/lib/utils/axios_utils';
import { convertObjectPropsToCamelCase } from '~/lib/utils/common_utils';
import {
REQUEST_REPOS,
RECEIVE_REPOS_SUCCESS,
RECEIVE_REPOS_ERROR,
REQUEST_IMPORT,
RECEIVE_IMPORT_SUCCESS,
RECEIVE_IMPORT_ERROR,
RECEIVE_JOBS_SUCCESS,
} from '~/import_projects/store/mutation_types';
import {
fetchRepos,
fetchImport,
receiveJobsSuccess,
fetchJobs,
clearJobsEtagPoll,
stopJobsPolling,
} from '~/import_projects/store/actions';
import state from '~/import_projects/store/state';
describe('import_projects store actions', () => {
let localState;
const repos = [{ id: 1 }, { id: 2 }];
const importPayload = { newName: 'newName', targetNamespace: 'targetNamespace', repo: { id: 1 } };
beforeEach(() => {
localState = state();
});
describe('fetchRepos', () => {
let mock;
2019-12-21 20:55:43 +05:30
const payload = { imported_projects: [{}], provider_repos: [{}], namespaces: [{}] };
2019-07-07 11:18:12 +05:30
beforeEach(() => {
localState.reposPath = `${TEST_HOST}/endpoint.json`;
mock = new MockAdapter(axios);
});
afterEach(() => mock.restore());
2020-06-23 00:09:42 +05:30
it('dispatches stopJobsPolling actions and commits REQUEST_REPOS, RECEIVE_REPOS_SUCCESS mutations on a successful request', () => {
2019-07-07 11:18:12 +05:30
mock.onGet(`${TEST_HOST}/endpoint.json`).reply(200, payload);
2020-06-23 00:09:42 +05:30
return testAction(
2019-07-07 11:18:12 +05:30
fetchRepos,
null,
localState,
[
2020-06-23 00:09:42 +05:30
{ type: REQUEST_REPOS },
2019-07-07 11:18:12 +05:30
{
2020-06-23 00:09:42 +05:30
type: RECEIVE_REPOS_SUCCESS,
2019-07-07 11:18:12 +05:30
payload: convertObjectPropsToCamelCase(payload, { deep: true }),
},
],
2020-06-23 00:09:42 +05:30
[{ type: 'stopJobsPolling' }, { type: 'fetchJobs' }],
2019-07-07 11:18:12 +05:30
);
});
2020-06-23 00:09:42 +05:30
it('dispatches stopJobsPolling action and commits REQUEST_REPOS, RECEIVE_REPOS_ERROR mutations on an unsuccessful request', () => {
2019-07-07 11:18:12 +05:30
mock.onGet(`${TEST_HOST}/endpoint.json`).reply(500);
2020-06-23 00:09:42 +05:30
return testAction(
2019-07-07 11:18:12 +05:30
fetchRepos,
null,
localState,
2020-06-23 00:09:42 +05:30
[{ type: REQUEST_REPOS }, { type: RECEIVE_REPOS_ERROR }],
[{ type: 'stopJobsPolling' }],
2019-07-07 11:18:12 +05:30
);
});
2019-12-21 20:55:43 +05:30
describe('when filtered', () => {
beforeEach(() => {
localState.filter = 'filter';
});
2020-06-23 00:09:42 +05:30
it('fetches repos with filter applied', () => {
2019-12-21 20:55:43 +05:30
mock.onGet(`${TEST_HOST}/endpoint.json?filter=filter`).reply(200, payload);
2020-06-23 00:09:42 +05:30
return testAction(
2019-12-21 20:55:43 +05:30
fetchRepos,
null,
localState,
[
2020-06-23 00:09:42 +05:30
{ type: REQUEST_REPOS },
2019-12-21 20:55:43 +05:30
{
2020-06-23 00:09:42 +05:30
type: RECEIVE_REPOS_SUCCESS,
2019-12-21 20:55:43 +05:30
payload: convertObjectPropsToCamelCase(payload, { deep: true }),
},
],
2020-06-23 00:09:42 +05:30
[{ type: 'stopJobsPolling' }, { type: 'fetchJobs' }],
2019-12-21 20:55:43 +05:30
);
});
});
2019-07-07 11:18:12 +05:30
});
describe('fetchImport', () => {
let mock;
beforeEach(() => {
localState.importPath = `${TEST_HOST}/endpoint.json`;
mock = new MockAdapter(axios);
});
afterEach(() => mock.restore());
2020-06-23 00:09:42 +05:30
it('commits REQUEST_IMPORT and REQUEST_IMPORT_SUCCESS mutations on a successful request', () => {
2019-07-07 11:18:12 +05:30
const importedProject = { name: 'imported/project' };
const importRepoId = importPayload.repo.id;
mock.onPost(`${TEST_HOST}/endpoint.json`).reply(200, importedProject);
2020-06-23 00:09:42 +05:30
return testAction(
2019-07-07 11:18:12 +05:30
fetchImport,
importPayload,
localState,
[
2020-06-23 00:09:42 +05:30
{ type: REQUEST_IMPORT, payload: importRepoId },
2019-07-07 11:18:12 +05:30
{
2020-06-23 00:09:42 +05:30
type: RECEIVE_IMPORT_SUCCESS,
2019-07-07 11:18:12 +05:30
payload: {
importedProject: convertObjectPropsToCamelCase(importedProject, { deep: true }),
repoId: importRepoId,
},
},
],
2020-06-23 00:09:42 +05:30
[],
2019-07-07 11:18:12 +05:30
);
});
2020-06-23 00:09:42 +05:30
it('commits REQUEST_IMPORT and RECEIVE_IMPORT_ERROR on an unsuccessful request', () => {
2019-07-07 11:18:12 +05:30
mock.onPost(`${TEST_HOST}/endpoint.json`).reply(500);
2020-06-23 00:09:42 +05:30
return testAction(
2019-07-07 11:18:12 +05:30
fetchImport,
importPayload,
localState,
[
2020-06-23 00:09:42 +05:30
{ type: REQUEST_IMPORT, payload: importPayload.repo.id },
{ type: RECEIVE_IMPORT_ERROR, payload: importPayload.repo.id },
2019-07-07 11:18:12 +05:30
],
2020-06-23 00:09:42 +05:30
[],
2019-07-07 11:18:12 +05:30
);
});
});
describe('receiveJobsSuccess', () => {
2020-06-23 00:09:42 +05:30
it(`commits ${RECEIVE_JOBS_SUCCESS} mutation`, () => {
return testAction(
2019-07-07 11:18:12 +05:30
receiveJobsSuccess,
repos,
localState,
[{ type: RECEIVE_JOBS_SUCCESS, payload: repos }],
[],
);
});
});
describe('fetchJobs', () => {
let mock;
2019-12-21 20:55:43 +05:30
const updatedProjects = [{ name: 'imported/project' }, { name: 'provider/repo' }];
2019-07-07 11:18:12 +05:30
beforeEach(() => {
localState.jobsPath = `${TEST_HOST}/endpoint.json`;
mock = new MockAdapter(axios);
});
afterEach(() => {
stopJobsPolling();
clearJobsEtagPoll();
});
afterEach(() => mock.restore());
2020-06-23 00:09:42 +05:30
it('commits RECEIVE_JOBS_SUCCESS mutation on a successful request', async () => {
2019-07-07 11:18:12 +05:30
mock.onGet(`${TEST_HOST}/endpoint.json`).reply(200, updatedProjects);
2020-06-23 00:09:42 +05:30
await testAction(
2019-07-07 11:18:12 +05:30
fetchJobs,
null,
localState,
[
{
2020-06-23 00:09:42 +05:30
type: RECEIVE_JOBS_SUCCESS,
2019-07-07 11:18:12 +05:30
payload: convertObjectPropsToCamelCase(updatedProjects, { deep: true }),
},
],
2020-06-23 00:09:42 +05:30
[],
2019-07-07 11:18:12 +05:30
);
});
2019-12-21 20:55:43 +05:30
describe('when filtered', () => {
beforeEach(() => {
localState.filter = 'filter';
});
2020-06-23 00:09:42 +05:30
it('fetches realtime changes with filter applied', () => {
2019-12-21 20:55:43 +05:30
mock.onGet(`${TEST_HOST}/endpoint.json?filter=filter`).reply(200, updatedProjects);
2020-06-23 00:09:42 +05:30
return testAction(
2019-12-21 20:55:43 +05:30
fetchJobs,
null,
localState,
[
{
2020-06-23 00:09:42 +05:30
type: RECEIVE_JOBS_SUCCESS,
2019-12-21 20:55:43 +05:30
payload: convertObjectPropsToCamelCase(updatedProjects, { deep: true }),
},
],
2020-06-23 00:09:42 +05:30
[],
2019-12-21 20:55:43 +05:30
);
});
});
2019-07-07 11:18:12 +05:30
});
});