summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWinnie Hellmann <winnie@gitlab.com>2018-03-28 00:05:26 +0200
committerWinnie Hellmann <winnie@gitlab.com>2018-03-28 00:05:47 +0200
commit513e2cbe35e11b32bf816d7f7623ce871e21df20 (patch)
tree811b2f91efae88227b7bc4dfd40b2d0d7557a726
parentc19f4d2298f432a11c615b9ede6c6bcf8226cfe7 (diff)
downloadgitlab-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.js1
-rw-r--r--spec/javascripts/badges/store/actions_spec.js114
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;