Add missing unit tests for BoardService
This commit is contained in:
parent
6cae635cc7
commit
c8915ed134
|
@ -0,0 +1,390 @@
|
||||||
|
import BoardService from '~/boards/services/board_service';
|
||||||
|
import { TEST_HOST } from 'helpers/test_constants';
|
||||||
|
import AxiosMockAdapter from 'axios-mock-adapter';
|
||||||
|
import axios from '~/lib/utils/axios_utils';
|
||||||
|
|
||||||
|
describe('BoardService', () => {
|
||||||
|
const dummyResponse = "without type checking this doesn't matter";
|
||||||
|
const boardId = 'dummy-board-id';
|
||||||
|
const endpoints = {
|
||||||
|
boardsEndpoint: `${TEST_HOST}/boards`,
|
||||||
|
listsEndpoint: `${TEST_HOST}/lists`,
|
||||||
|
bulkUpdatePath: `${TEST_HOST}/bulk/update`,
|
||||||
|
recentBoardsEndpoint: `${TEST_HOST}/recent/boards`,
|
||||||
|
};
|
||||||
|
|
||||||
|
let service;
|
||||||
|
let axiosMock;
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
axiosMock = new AxiosMockAdapter(axios);
|
||||||
|
service = new BoardService({
|
||||||
|
...endpoints,
|
||||||
|
boardId,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('all', () => {
|
||||||
|
it('makes a request to fetch lists', () => {
|
||||||
|
axiosMock.onGet(endpoints.listsEndpoint).replyOnce(200, dummyResponse);
|
||||||
|
const expectedResponse = expect.objectContaining({ data: dummyResponse });
|
||||||
|
|
||||||
|
return expect(service.all()).resolves.toEqual(expectedResponse);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('fails for error response', () => {
|
||||||
|
axiosMock.onGet(endpoints.listsEndpoint).replyOnce(500);
|
||||||
|
|
||||||
|
return expect(service.all()).rejects.toThrow();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('generateDefaultLists', () => {
|
||||||
|
const listsEndpointGenerate = `${endpoints.listsEndpoint}/generate.json`;
|
||||||
|
|
||||||
|
it('makes a request to generate default lists', () => {
|
||||||
|
axiosMock.onPost(listsEndpointGenerate).replyOnce(200, dummyResponse);
|
||||||
|
const expectedResponse = expect.objectContaining({ data: dummyResponse });
|
||||||
|
|
||||||
|
return expect(service.generateDefaultLists()).resolves.toEqual(expectedResponse);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('fails for error response', () => {
|
||||||
|
axiosMock.onPost(listsEndpointGenerate).replyOnce(500);
|
||||||
|
|
||||||
|
return expect(service.generateDefaultLists()).rejects.toThrow();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('createList', () => {
|
||||||
|
const entityType = 'moorhen';
|
||||||
|
const entityId = 'quack';
|
||||||
|
const expectedRequest = expect.objectContaining({
|
||||||
|
data: JSON.stringify({ list: { [entityType]: entityId } }),
|
||||||
|
});
|
||||||
|
|
||||||
|
let requestSpy;
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
requestSpy = jest.fn();
|
||||||
|
axiosMock.onPost(endpoints.listsEndpoint).replyOnce(config => requestSpy(config));
|
||||||
|
});
|
||||||
|
|
||||||
|
it('makes a request to create a list', () => {
|
||||||
|
requestSpy.mockReturnValue([200, dummyResponse]);
|
||||||
|
const expectedResponse = expect.objectContaining({ data: dummyResponse });
|
||||||
|
|
||||||
|
return expect(service.createList(entityId, entityType))
|
||||||
|
.resolves.toEqual(expectedResponse)
|
||||||
|
.then(() => {
|
||||||
|
expect(requestSpy).toHaveBeenCalledWith(expectedRequest);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('fails for error response', () => {
|
||||||
|
requestSpy.mockReturnValue([500]);
|
||||||
|
|
||||||
|
return expect(service.createList(entityId, entityType))
|
||||||
|
.rejects.toThrow()
|
||||||
|
.then(() => {
|
||||||
|
expect(requestSpy).toHaveBeenCalledWith(expectedRequest);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('updateList', () => {
|
||||||
|
const id = 'David Webb';
|
||||||
|
const position = 'unknown';
|
||||||
|
const expectedRequest = expect.objectContaining({
|
||||||
|
data: JSON.stringify({ list: { position } }),
|
||||||
|
});
|
||||||
|
|
||||||
|
let requestSpy;
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
requestSpy = jest.fn();
|
||||||
|
axiosMock.onPut(`${endpoints.listsEndpoint}/${id}`).replyOnce(config => requestSpy(config));
|
||||||
|
});
|
||||||
|
|
||||||
|
it('makes a request to update a list position', () => {
|
||||||
|
requestSpy.mockReturnValue([200, dummyResponse]);
|
||||||
|
const expectedResponse = expect.objectContaining({ data: dummyResponse });
|
||||||
|
|
||||||
|
return expect(service.updateList(id, position))
|
||||||
|
.resolves.toEqual(expectedResponse)
|
||||||
|
.then(() => {
|
||||||
|
expect(requestSpy).toHaveBeenCalledWith(expectedRequest);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('fails for error response', () => {
|
||||||
|
requestSpy.mockReturnValue([500]);
|
||||||
|
|
||||||
|
return expect(service.updateList(id, position))
|
||||||
|
.rejects.toThrow()
|
||||||
|
.then(() => {
|
||||||
|
expect(requestSpy).toHaveBeenCalledWith(expectedRequest);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('destroyList', () => {
|
||||||
|
const id = '-42';
|
||||||
|
|
||||||
|
let requestSpy;
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
requestSpy = jest.fn();
|
||||||
|
axiosMock
|
||||||
|
.onDelete(`${endpoints.listsEndpoint}/${id}`)
|
||||||
|
.replyOnce(config => requestSpy(config));
|
||||||
|
});
|
||||||
|
|
||||||
|
it('makes a request to delete a list', () => {
|
||||||
|
requestSpy.mockReturnValue([200, dummyResponse]);
|
||||||
|
const expectedResponse = expect.objectContaining({ data: dummyResponse });
|
||||||
|
|
||||||
|
return expect(service.destroyList(id))
|
||||||
|
.resolves.toEqual(expectedResponse)
|
||||||
|
.then(() => {
|
||||||
|
expect(requestSpy).toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('fails for error response', () => {
|
||||||
|
requestSpy.mockReturnValue([500]);
|
||||||
|
|
||||||
|
return expect(service.destroyList(id))
|
||||||
|
.rejects.toThrow()
|
||||||
|
.then(() => {
|
||||||
|
expect(requestSpy).toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('getIssuesForList', () => {
|
||||||
|
const id = 'TOO-MUCH';
|
||||||
|
const url = `${endpoints.listsEndpoint}/${id}/issues?id=${id}`;
|
||||||
|
|
||||||
|
it('makes a request to fetch list issues', () => {
|
||||||
|
axiosMock.onGet(url).replyOnce(200, dummyResponse);
|
||||||
|
const expectedResponse = expect.objectContaining({ data: dummyResponse });
|
||||||
|
|
||||||
|
return expect(service.getIssuesForList(id)).resolves.toEqual(expectedResponse);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('makes a request to fetch list issues with filter', () => {
|
||||||
|
const filter = { algal: 'scrubber' };
|
||||||
|
axiosMock.onGet(`${url}&algal=scrubber`).replyOnce(200, dummyResponse);
|
||||||
|
const expectedResponse = expect.objectContaining({ data: dummyResponse });
|
||||||
|
|
||||||
|
return expect(service.getIssuesForList(id, filter)).resolves.toEqual(expectedResponse);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('fails for error response', () => {
|
||||||
|
axiosMock.onGet(url).replyOnce(500);
|
||||||
|
|
||||||
|
return expect(service.getIssuesForList(id)).rejects.toThrow();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('moveIssue', () => {
|
||||||
|
const urlRoot = 'potato';
|
||||||
|
const id = 'over 9000';
|
||||||
|
const fromListId = 'left';
|
||||||
|
const toListId = 'right';
|
||||||
|
const moveBeforeId = 'up';
|
||||||
|
const moveAfterId = 'down';
|
||||||
|
const expectedRequest = expect.objectContaining({
|
||||||
|
data: JSON.stringify({
|
||||||
|
from_list_id: fromListId,
|
||||||
|
to_list_id: toListId,
|
||||||
|
move_before_id: moveBeforeId,
|
||||||
|
move_after_id: moveAfterId,
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
|
||||||
|
let requestSpy;
|
||||||
|
|
||||||
|
beforeAll(() => {
|
||||||
|
global.gon.relative_url_root = urlRoot;
|
||||||
|
});
|
||||||
|
|
||||||
|
afterAll(() => {
|
||||||
|
delete global.gon.relative_url_root;
|
||||||
|
});
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
requestSpy = jest.fn();
|
||||||
|
axiosMock
|
||||||
|
.onPut(`${urlRoot}/-/boards/${boardId}/issues/${id}`)
|
||||||
|
.replyOnce(config => requestSpy(config));
|
||||||
|
});
|
||||||
|
|
||||||
|
it('makes a request to move an issue between lists', () => {
|
||||||
|
requestSpy.mockReturnValue([200, dummyResponse]);
|
||||||
|
const expectedResponse = expect.objectContaining({ data: dummyResponse });
|
||||||
|
|
||||||
|
return expect(service.moveIssue(id, fromListId, toListId, moveBeforeId, moveAfterId))
|
||||||
|
.resolves.toEqual(expectedResponse)
|
||||||
|
.then(() => {
|
||||||
|
expect(requestSpy).toHaveBeenCalledWith(expectedRequest);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('fails for error response', () => {
|
||||||
|
requestSpy.mockReturnValue([500]);
|
||||||
|
|
||||||
|
return expect(service.moveIssue(id, fromListId, toListId, moveBeforeId, moveAfterId))
|
||||||
|
.rejects.toThrow()
|
||||||
|
.then(() => {
|
||||||
|
expect(requestSpy).toHaveBeenCalledWith(expectedRequest);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('newIssue', () => {
|
||||||
|
const id = 'not-creative';
|
||||||
|
const issue = { some: 'issue data' };
|
||||||
|
const url = `${endpoints.listsEndpoint}/${id}/issues`;
|
||||||
|
const expectedRequest = expect.objectContaining({
|
||||||
|
data: JSON.stringify({
|
||||||
|
issue,
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
|
||||||
|
let requestSpy;
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
requestSpy = jest.fn();
|
||||||
|
axiosMock.onPost(url).replyOnce(config => requestSpy(config));
|
||||||
|
});
|
||||||
|
|
||||||
|
it('makes a request to create a new issue', () => {
|
||||||
|
requestSpy.mockReturnValue([200, dummyResponse]);
|
||||||
|
const expectedResponse = expect.objectContaining({ data: dummyResponse });
|
||||||
|
|
||||||
|
return expect(service.newIssue(id, issue))
|
||||||
|
.resolves.toEqual(expectedResponse)
|
||||||
|
.then(() => {
|
||||||
|
expect(requestSpy).toHaveBeenCalledWith(expectedRequest);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('fails for error response', () => {
|
||||||
|
requestSpy.mockReturnValue([500]);
|
||||||
|
|
||||||
|
return expect(service.newIssue(id, issue))
|
||||||
|
.rejects.toThrow()
|
||||||
|
.then(() => {
|
||||||
|
expect(requestSpy).toHaveBeenCalledWith(expectedRequest);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('getBacklog', () => {
|
||||||
|
const urlRoot = 'deep';
|
||||||
|
const url = `${urlRoot}/-/boards/${boardId}/issues.json?not=relevant`;
|
||||||
|
const requestParams = {
|
||||||
|
not: 'relevant',
|
||||||
|
};
|
||||||
|
|
||||||
|
beforeAll(() => {
|
||||||
|
global.gon.relative_url_root = urlRoot;
|
||||||
|
});
|
||||||
|
|
||||||
|
afterAll(() => {
|
||||||
|
delete global.gon.relative_url_root;
|
||||||
|
});
|
||||||
|
|
||||||
|
it('makes a request to fetch backlog', () => {
|
||||||
|
axiosMock.onGet(url).replyOnce(200, dummyResponse);
|
||||||
|
const expectedResponse = expect.objectContaining({ data: dummyResponse });
|
||||||
|
|
||||||
|
return expect(service.getBacklog(requestParams)).resolves.toEqual(expectedResponse);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('fails for error response', () => {
|
||||||
|
axiosMock.onGet(url).replyOnce(500);
|
||||||
|
|
||||||
|
return expect(service.getBacklog(requestParams)).rejects.toThrow();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('bulkUpdate', () => {
|
||||||
|
const issueIds = [1, 2, 3];
|
||||||
|
const extraData = { moar: 'data' };
|
||||||
|
const expectedRequest = expect.objectContaining({
|
||||||
|
data: JSON.stringify({
|
||||||
|
update: {
|
||||||
|
...extraData,
|
||||||
|
issuable_ids: '1,2,3',
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
|
||||||
|
let requestSpy;
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
requestSpy = jest.fn();
|
||||||
|
axiosMock.onPost(endpoints.bulkUpdatePath).replyOnce(config => requestSpy(config));
|
||||||
|
});
|
||||||
|
|
||||||
|
it('makes a request to create a list', () => {
|
||||||
|
requestSpy.mockReturnValue([200, dummyResponse]);
|
||||||
|
const expectedResponse = expect.objectContaining({ data: dummyResponse });
|
||||||
|
|
||||||
|
return expect(service.bulkUpdate(issueIds, extraData))
|
||||||
|
.resolves.toEqual(expectedResponse)
|
||||||
|
.then(() => {
|
||||||
|
expect(requestSpy).toHaveBeenCalledWith(expectedRequest);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('fails for error response', () => {
|
||||||
|
requestSpy.mockReturnValue([500]);
|
||||||
|
|
||||||
|
return expect(service.bulkUpdate(issueIds, extraData))
|
||||||
|
.rejects.toThrow()
|
||||||
|
.then(() => {
|
||||||
|
expect(requestSpy).toHaveBeenCalledWith(expectedRequest);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('getIssueInfo', () => {
|
||||||
|
const dummyEndpoint = `${TEST_HOST}/some/where`;
|
||||||
|
|
||||||
|
it('makes a request to the given endpoint', () => {
|
||||||
|
axiosMock.onGet(dummyEndpoint).replyOnce(200, dummyResponse);
|
||||||
|
const expectedResponse = expect.objectContaining({ data: dummyResponse });
|
||||||
|
|
||||||
|
return expect(BoardService.getIssueInfo(dummyEndpoint)).resolves.toEqual(expectedResponse);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('fails for error response', () => {
|
||||||
|
axiosMock.onGet(dummyEndpoint).replyOnce(500);
|
||||||
|
|
||||||
|
return expect(BoardService.getIssueInfo(dummyEndpoint)).rejects.toThrow();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('toggleIssueSubscription', () => {
|
||||||
|
const dummyEndpoint = `${TEST_HOST}/some/where`;
|
||||||
|
|
||||||
|
it('makes a request to the given endpoint', () => {
|
||||||
|
axiosMock.onPost(dummyEndpoint).replyOnce(200, dummyResponse);
|
||||||
|
const expectedResponse = expect.objectContaining({ data: dummyResponse });
|
||||||
|
|
||||||
|
return expect(BoardService.toggleIssueSubscription(dummyEndpoint)).resolves.toEqual(
|
||||||
|
expectedResponse,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('fails for error response', () => {
|
||||||
|
axiosMock.onPost(dummyEndpoint).replyOnce(500);
|
||||||
|
|
||||||
|
return expect(BoardService.toggleIssueSubscription(dummyEndpoint)).rejects.toThrow();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
Loading…
Reference in New Issue