UNPKG

oa-jira

Version:

Octet Agile's JIRA connectivity project.

110 lines (96 loc) 4 kB
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;