oa-jira
Version:
Octet Agile's JIRA connectivity project.
110 lines (96 loc) • 4 kB
JavaScript
const axios = require('axios');
const constants = require('./constants/jira.constants');
const buildGetResponse = ({ status, data, message }) => {
return status === 200
? Promise.resolve({ status, message, data: JSON.parse(JSON.stringify(data)) })
: Promise.reject({ response: { status, message, data } });
};
const fnGet = (url, cases) => {
return cases.has(url) ? buildGetResponse(cases.get(url)) : buildGetResponse({ status: 404 });
};
class AxiosMock {
#cases;
#spy;
constructor() {
this.#cases = new Map();
this.reset();
}
reset = () => {
if (this.#spy) this.#spy.mockRestore();
this.#spy = jest.spyOn(axios, 'get').mockImplementation(url => fnGet(url, this.#cases));
};
getSpy = () => this.#spy;
appendGet200(url, data) {
this.#cases.set(url, { status: 200, data });
return this;
}
appendGet404(url) {
this.#cases.set(url, { status: 404 });
return this;
}
appendGet500(url, message) {
this.#cases.set(url, { status: 500, message });
return this;
}
static init() {
const mock = new AxiosMock();
mock.appendGet404(`/rest/agile/1.0/board/404/configuration`);
mock.appendGet500(`/rest/agile/1.0/board/500/configuration`);
mock.appendGet404(`/rest/api/3/project/404`);
mock.appendGet500(`/rest/api/3/project/500`);
mock.appendGet404(`/rest/api/3/statuscategory/404`);
mock.appendGet500(`/rest/api/3/statuscategory/500`);
mock.appendGet404(`/rest/api/3/status/404`);
mock.appendGet500(`/rest/api/3/status/500`);
mock.appendGet404('/rest/api/3/resolution/404');
mock.appendGet500('/rest/api/3/resolution/500');
mock.appendGet404('/rest/agile/1.0/sprint/404');
mock.appendGet500('/rest/agile/1.0/sprint/500');
mock.appendGet404('/rest/api/3/issuetype/404');
mock.appendGet500('/rest/api/3/issuetype/500');
mock.appendGet404('/rest/api/3/version/404');
mock.appendGet500('/rest/api/3/version/500');
mock.appendGet404(`/rest/api/3/issue/404`);
mock.appendGet500(`/rest/api/3/issue/500`);
mock.appendGet404(`/rest/agile/1.0/board/404/issue`);
mock.appendGet500(`/rest/agile/1.0/board/500/issue`);
for (const project of Object.values(constants.projects)) {
mock.appendGet200(`/rest/api/3/project/${project.id}`, project);
}
for (const category of Object.values(constants.categories)) {
mock.appendGet200(`/rest/api/3/statuscategory/${category.id}`, category);
}
for (const status of Object.values(constants.statuses)) {
mock.appendGet200(`/rest/api/3/status/${status.id}`, status);
}
for (const resolution of Object.values(constants.resolutions)) {
mock.appendGet200(`/rest/api/3/resolution/${resolution.id}`, resolution);
}
for (const sprint of Object.values(constants.sprints)) {
mock.appendGet200(`/rest/agile/1.0/sprint/${sprint.id}`, sprint);
}
for (const type of Object.values(constants.types)) {
mock.appendGet200(`/rest/api/3/issuetype/${type.id}`, type);
}
for (const version of Object.values(constants.versions)) {
mock.appendGet200(`/rest/api/3/version/${version.id}`, version);
}
for (const issue of Object.values(constants.issues)) {
mock.appendGet200(`/rest/api/3/issue/${issue.key}`, issue);
}
for (const board of Object.values(constants.boards)) {
mock.appendGet200(`/rest/agile/1.0/board/${board.id}/configuration`, board);
}
mock.appendGet200(`/rest/agile/1.0/board/${constants.boards[1].id}/issue`, {
issues: [constants.issues['KEY-000'], constants.issues['KEY-001']]
});
mock.appendGet200(`/rest/agile/1.0/board/${constants.boards[2].id}/issue`, {
issues: []
});
mock.appendGet200(`/rest/agile/1.0/board/${constants.boards[3].id}/issue`, {
issues: [constants.issues['KEY-411']]
});
return mock;
}
}
module.exports = AxiosMock;