diff options
author | Winnie Hellmann <winnie@gitlab.com> | 2018-03-28 00:05:26 +0200 |
---|---|---|
committer | Winnie Hellmann <winnie@gitlab.com> | 2018-03-28 00:05:47 +0200 |
commit | 513e2cbe35e11b32bf816d7f7623ce871e21df20 (patch) | |
tree | 811b2f91efae88227b7bc4dfd40b2d0d7557a726 | |
parent | c19f4d2298f432a11c615b9ede6c6bcf8226cfe7 (diff) | |
download | gitlab-ce-winh-41174-projects-groups-badges-ui.tar.gz |
Mock mutations in badge store action testswinh-41174-projects-groups-badges-ui
[ci skip]
-rw-r--r-- | app/assets/javascripts/badges/store/mutations.js | 1 | ||||
-rw-r--r-- | spec/javascripts/badges/store/actions_spec.js | 114 |
2 files changed, 84 insertions, 31 deletions
diff --git a/app/assets/javascripts/badges/store/mutations.js b/app/assets/javascripts/badges/store/mutations.js index aa4d82045a8..da41993b44d 100644 --- a/app/assets/javascripts/badges/store/mutations.js +++ b/app/assets/javascripts/badges/store/mutations.js @@ -25,6 +25,7 @@ export default { }); }, [types.REQUEST_NEW_BADGE](state) { + throw new Error('meh!'); Object.assign(state, { isSaving: true, }); diff --git a/spec/javascripts/badges/store/actions_spec.js b/spec/javascripts/badges/store/actions_spec.js index 923a5f6c2b7..ee546b39512 100644 --- a/spec/javascripts/badges/store/actions_spec.js +++ b/spec/javascripts/badges/store/actions_spec.js @@ -1,6 +1,7 @@ import axios from '~/lib/utils/axios_utils'; import MockAdapter from 'axios-mock-adapter'; -import store from '~/badges/store'; +import actions, { transformBackendBadge } from '~/badges/store/actions'; +import mutationTypes from '~/badges/store/mutation_types'; import createState from '~/badges/store/state'; import { DUMMY_IMAGE_URL, TEST_HOST } from 'spec/test_constants'; import { createDummyBadge, createDummyBadgeResponse } from '../dummy_badge'; @@ -12,15 +13,19 @@ fdescribe('Badges store actions', () => { let axiosMock; let badgeCount; let badgeId; + let store; beforeEach(() => { - spyOn(store, 'commit'); axiosMock = new MockAdapter(axios); - store.replaceState({ - ...createState(), - apiEndpointUrl: dummyEndpointUrl, - badges: dummyBadges, - }); + store = { + commit: jasmine.createSpy('commit'), + dispatch: jasmine.createSpy('dispatch'), + state: { + ...createState(), + apiEndpointUrl: dummyEndpointUrl, + badges: dummyBadges, + }, + }; badgeCount = store.state.badges.length; badgeId = store.state.badges[0].id; }); @@ -29,49 +34,96 @@ fdescribe('Badges store actions', () => { axiosMock.restore(); }); + describe('requestNewBadge', () => { + it('commits REQUEST_NEW_BADGE', () => { + actions.requestNewBadge(store); + + expect(store.commit).toHaveBeenCalledWith(mutationTypes.REQUEST_NEW_BADGE); + }); + }); + + describe('receiveNewBadge', () => { + it('commits RECEIVE_NEW_BADGE', () => { + const newBadge = createDummyBadge(); + + actions.receiveNewBadge(store, newBadge); + + expect(store.commit).toHaveBeenCalledWith(mutationTypes.RECEIVE_NEW_BADGE, newBadge); + }); + }); + + describe('receiveNewBadgeError', () => { + it('commits RECEIVE_NEW_BADGE_ERROR', () => { + actions.receiveNewBadgeError(store); + + expect(store.commit).toHaveBeenCalledWith(mutationTypes.RECEIVE_NEW_BADGE_ERROR); + }); + }); + describe('addBadge', () => { - it('commits REQUEST_NEW_BADGE and RECEIVE_NEW_BADGE', done => { - const newId = 3; - expect(store.state.badges.length).toBe(dummyBadges.length); + let badgeInAddForm; + let endpointMock; - expect(store.state.isSaving).toBe(false); + beforeEach(() => { + badgeInAddForm = createDummyBadge(); + endpointMock = axiosMock.onPost(dummyEndpointUrl); + store.state = { + ...store.state, + badgeInAddForm, + }; + }); - axiosMock.onPost(dummyEndpointUrl).replyOnce(() => { - expect(store.state.isSaving).toBe(true); - return [200, { ...createDummyBadgeResponse(), id: newId }]; + it('dispatches requestNewBadge and receiveNewBadge for successful response', done => { + const dummyResponse = createDummyBadgeResponse(); + + endpointMock.replyOnce(req => { + expect(req.data).toBe( + JSON.stringify({ + image_url: badgeInAddForm.imageUrl, + link_url: badgeInAddForm.linkUrl, + }), + ); + expect(store.dispatch).toHaveBeenCalledWith('requestNewBadge'); + store.dispatch.calls.reset(); + return [200, dummyResponse]; }); - store - .dispatch('addBadge') + actions + .addBadge(store) .then(() => { - expect(store.state.isSaving).toBe(false); - expect(store.state.badges.length).toBe(dummyBadges.length + 1); - expect(store.state.badges[0].id).toBe(newId); - expect(store.state.badges[0].kind).toBe('project'); + const dummyBadge = transformBackendBadge(dummyResponse); + expect(store.dispatch).toHaveBeenCalledWith('receiveNewBadge', dummyBadge); }) .then(done) .catch(done.fail); }); - it('sets isSaving and adds no badge for error response', done => { - expect(store.state.badges.length).toBe(dummyBadges.length); - expect(store.state.isSaving).toBe(false); - axiosMock.onPost(dummyEndpointUrl).replyOnce(() => { - expect(store.state.isSaving).toBe(true); + it('dispatches requestNewBadge and receiveNewBadgeError for error response', done => { + endpointMock.replyOnce(req => { + expect(req.data).toBe( + JSON.stringify({ + image_url: badgeInAddForm.imageUrl, + link_url: badgeInAddForm.linkUrl, + }), + ); + expect(store.dispatch).toHaveBeenCalledWith('requestNewBadge'); + store.dispatch.calls.reset(); return [500, '']; }); - store - .dispatch('addBadge') + actions + .addBadge(store) .then(() => done.fail('Promise should have thrown')) .catch(() => { - expect(store.state.isSaving).toBe(false); - expect(store.state.badges.length).toBe(dummyBadges.length); - done(); - }); + expect(store.dispatch).toHaveBeenCalledWith('receiveNewBadgeError'); + }) + .then(done) + .catch(done.fail); }); }); + // TODO: + describe('deleteBadge', () => { let deleteRequestMock; |