diff options
Diffstat (limited to 'spec/frontend/boards/services/board_service_spec.js')
-rw-r--r-- | spec/frontend/boards/services/board_service_spec.js | 159 |
1 files changed, 159 insertions, 0 deletions
diff --git a/spec/frontend/boards/services/board_service_spec.js b/spec/frontend/boards/services/board_service_spec.js index a8a322e7237..e106c2bf1f1 100644 --- a/spec/frontend/boards/services/board_service_spec.js +++ b/spec/frontend/boards/services/board_service_spec.js @@ -389,4 +389,163 @@ describe('BoardService', () => { return expect(BoardService.toggleIssueSubscription(dummyEndpoint)).rejects.toThrow(); }); }); + + describe('allBoards', () => { + const url = `${endpoints.boardsEndpoint}.json`; + + it('makes a request to fetch all boards', () => { + axiosMock.onGet(url).replyOnce(200, dummyResponse); + const expectedResponse = expect.objectContaining({ data: dummyResponse }); + + return expect(service.allBoards()).resolves.toEqual(expectedResponse); + }); + + it('fails for error response', () => { + axiosMock.onGet(url).replyOnce(500); + + return expect(service.allBoards()).rejects.toThrow(); + }); + }); + + describe('recentBoards', () => { + const url = `${endpoints.recentBoardsEndpoint}.json`; + + it('makes a request to fetch all boards', () => { + axiosMock.onGet(url).replyOnce(200, dummyResponse); + const expectedResponse = expect.objectContaining({ data: dummyResponse }); + + return expect(service.recentBoards()).resolves.toEqual(expectedResponse); + }); + + it('fails for error response', () => { + axiosMock.onGet(url).replyOnce(500); + + return expect(service.recentBoards()).rejects.toThrow(); + }); + }); + + describe('createBoard', () => { + const labelIds = ['first label', 'second label']; + const assigneeId = 'as sign ee'; + const milestoneId = 'vegetable soup'; + const board = { + labels: labelIds.map(id => ({ id })), + assignee: { id: assigneeId }, + milestone: { id: milestoneId }, + }; + + describe('for existing board', () => { + const id = 'skate-board'; + const url = `${endpoints.boardsEndpoint}/${id}.json`; + const expectedRequest = expect.objectContaining({ + data: JSON.stringify({ + board: { + ...board, + id, + label_ids: labelIds, + assignee_id: assigneeId, + milestone_id: milestoneId, + }, + }), + }); + + let requestSpy; + + beforeEach(() => { + requestSpy = jest.fn(); + axiosMock.onPut(url).replyOnce(config => requestSpy(config)); + }); + + it('makes a request to update the board', () => { + requestSpy.mockReturnValue([200, dummyResponse]); + const expectedResponse = expect.objectContaining({ data: dummyResponse }); + + return expect( + service.createBoard({ + ...board, + id, + }), + ) + .resolves.toEqual(expectedResponse) + .then(() => { + expect(requestSpy).toHaveBeenCalledWith(expectedRequest); + }); + }); + + it('fails for error response', () => { + requestSpy.mockReturnValue([500]); + + return expect( + service.createBoard({ + ...board, + id, + }), + ) + .rejects.toThrow() + .then(() => { + expect(requestSpy).toHaveBeenCalledWith(expectedRequest); + }); + }); + }); + + describe('for new board', () => { + const url = `${endpoints.boardsEndpoint}.json`; + const expectedRequest = expect.objectContaining({ + data: JSON.stringify({ + board: { + ...board, + label_ids: labelIds, + assignee_id: assigneeId, + milestone_id: milestoneId, + }, + }), + }); + + let requestSpy; + + beforeEach(() => { + requestSpy = jest.fn(); + axiosMock.onPost(url).replyOnce(config => requestSpy(config)); + }); + + it('makes a request to create a new board', () => { + requestSpy.mockReturnValue([200, dummyResponse]); + const expectedResponse = expect.objectContaining({ data: dummyResponse }); + + return expect(service.createBoard(board)) + .resolves.toEqual(expectedResponse) + .then(() => { + expect(requestSpy).toHaveBeenCalledWith(expectedRequest); + }); + }); + + it('fails for error response', () => { + requestSpy.mockReturnValue([500]); + + return expect(service.createBoard(board)) + .rejects.toThrow() + .then(() => { + expect(requestSpy).toHaveBeenCalledWith(expectedRequest); + }); + }); + }); + }); + + describe('deleteBoard', () => { + const id = 'capsized'; + const url = `${endpoints.boardsEndpoint}/${id}.json`; + + it('makes a request to delete a boards', () => { + axiosMock.onDelete(url).replyOnce(200, dummyResponse); + const expectedResponse = expect.objectContaining({ data: dummyResponse }); + + return expect(service.deleteBoard({ id })).resolves.toEqual(expectedResponse); + }); + + it('fails for error response', () => { + axiosMock.onDelete(url).replyOnce(500); + + return expect(service.deleteBoard({ id })).rejects.toThrow(); + }); + }); }); |