diff options
Diffstat (limited to 'spec/frontend/vuex_shared/modules/members/actions_spec.js')
-rw-r--r-- | spec/frontend/vuex_shared/modules/members/actions_spec.js | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/spec/frontend/vuex_shared/modules/members/actions_spec.js b/spec/frontend/vuex_shared/modules/members/actions_spec.js new file mode 100644 index 00000000000..833bd4cc175 --- /dev/null +++ b/spec/frontend/vuex_shared/modules/members/actions_spec.js @@ -0,0 +1,110 @@ +import { noop } from 'lodash'; +import axios from 'axios'; +import MockAdapter from 'axios-mock-adapter'; +import { members, group } from 'jest/vue_shared/components/members/mock_data'; +import testAction from 'helpers/vuex_action_helper'; +import httpStatusCodes from '~/lib/utils/http_status'; +import * as types from '~/vuex_shared/modules/members/mutation_types'; +import { + updateMemberRole, + showRemoveGroupLinkModal, + hideRemoveGroupLinkModal, +} from '~/vuex_shared/modules/members/actions'; + +describe('Vuex members actions', () => { + let mock; + + beforeEach(() => { + mock = new MockAdapter(axios); + }); + + afterEach(() => { + mock.restore(); + }); + + describe('updateMemberRole', () => { + const memberId = members[0].id; + const accessLevel = { integerValue: 30, stringValue: 'Developer' }; + + const payload = { + memberId, + accessLevel, + }; + const state = { + members, + memberPath: '/groups/foo-bar/-/group_members/:id', + requestFormatter: noop, + removeGroupLinkModalVisible: false, + groupLinkToRemove: null, + }; + + describe('successful request', () => { + it(`commits ${types.RECEIVE_MEMBER_ROLE_SUCCESS} mutation`, async () => { + let requestPath; + mock.onPut().replyOnce(config => { + requestPath = config.url; + return [httpStatusCodes.OK, {}]; + }); + + await testAction(updateMemberRole, payload, state, [ + { + type: types.RECEIVE_MEMBER_ROLE_SUCCESS, + payload, + }, + ]); + + expect(requestPath).toBe('/groups/foo-bar/-/group_members/238'); + }); + }); + + describe('unsuccessful request', () => { + beforeEach(() => { + mock.onPut().replyOnce(httpStatusCodes.BAD_REQUEST, { message: 'Bad request' }); + }); + + it(`commits ${types.RECEIVE_MEMBER_ROLE_ERROR} mutation`, async () => { + try { + await testAction(updateMemberRole, payload, state, [ + { + type: types.RECEIVE_MEMBER_ROLE_SUCCESS, + }, + ]); + } catch { + // Do nothing + } + }); + + it('throws error', async () => { + await expect(testAction(updateMemberRole, payload, state)).rejects.toThrowError(); + }); + }); + }); + + describe('Group Link Modal', () => { + const state = { + removeGroupLinkModalVisible: false, + groupLinkToRemove: null, + }; + + describe('showRemoveGroupLinkModal', () => { + it(`commits ${types.SHOW_REMOVE_GROUP_LINK_MODAL} mutation`, () => { + testAction(showRemoveGroupLinkModal, group, state, [ + { + type: types.SHOW_REMOVE_GROUP_LINK_MODAL, + payload: group, + }, + ]); + }); + }); + + describe('hideRemoveGroupLinkModal', () => { + it(`commits ${types.HIDE_REMOVE_GROUP_LINK_MODAL} mutation`, () => { + testAction(hideRemoveGroupLinkModal, group, state, [ + { + type: types.HIDE_REMOVE_GROUP_LINK_MODAL, + }, + ]); + }); + }); + }); +}); |