diff options
Diffstat (limited to 'spec/frontend/invite_members/components/invite_members_modal_spec.js')
-rw-r--r-- | spec/frontend/invite_members/components/invite_members_modal_spec.js | 87 |
1 files changed, 69 insertions, 18 deletions
diff --git a/spec/frontend/invite_members/components/invite_members_modal_spec.js b/spec/frontend/invite_members/components/invite_members_modal_spec.js index 0be0fbbde2d..4ac2a28105c 100644 --- a/spec/frontend/invite_members/components/invite_members_modal_spec.js +++ b/spec/frontend/invite_members/components/invite_members_modal_spec.js @@ -3,24 +3,31 @@ import { GlDropdown, GlDropdownItem, GlDatepicker, GlSprintf, GlLink } from '@gi import Api from '~/api'; import InviteMembersModal from '~/invite_members/components/invite_members_modal.vue'; -const groupId = '1'; -const groupName = 'testgroup'; +const id = '1'; +const name = 'testgroup'; +const isProject = false; const accessLevels = { Guest: 10, Reporter: 20, Developer: 30, Maintainer: 40, Owner: 50 }; const defaultAccessLevel = '10'; const helpLink = 'https://example.com'; -const createComponent = () => { +const createComponent = (data = {}) => { return shallowMount(InviteMembersModal, { propsData: { - groupId, - groupName, + id, + name, + isProject, accessLevels, defaultAccessLevel, helpLink, }, + data() { + return data; + }, stubs: { - GlSprintf, 'gl-modal': '<div><slot name="modal-footer"></slot><slot></slot></div>', + 'gl-dropdown': true, + 'gl-dropdown-item': true, + GlSprintf, }, }); }; @@ -34,7 +41,7 @@ describe('InviteMembersModal', () => { }); const findDropdown = () => wrapper.find(GlDropdown); - const findDropdownItems = () => wrapper.findAll(GlDropdownItem); + const findDropdownItems = () => findDropdown().findAll(GlDropdownItem); const findDatepicker = () => wrapper.find(GlDatepicker); const findLink = () => wrapper.find(GlLink); const findCancelButton = () => wrapper.find({ ref: 'cancelButton' }); @@ -88,25 +95,69 @@ describe('InviteMembersModal', () => { format: 'json', }; - beforeEach(() => { - wrapper = createComponent(); + describe('when the invite was sent successfully', () => { + beforeEach(() => { + wrapper = createComponent(); + + wrapper.vm.$toast = { show: jest.fn() }; + jest.spyOn(Api, 'inviteGroupMember').mockResolvedValue({ data: postData }); - jest.spyOn(Api, 'inviteGroupMember').mockResolvedValue({ data: postData }); - wrapper.vm.$toast = { show: jest.fn() }; + wrapper.vm.submitForm(postData); + }); - wrapper.vm.submitForm(postData); + it('displays the successful toastMessage', () => { + const toastMessageSuccessful = 'Members were successfully added'; + + expect(wrapper.vm.$toast.show).toHaveBeenCalledWith( + toastMessageSuccessful, + wrapper.vm.toastOptions, + ); + }); + + it('calls Api inviteGroupMember with the correct params', () => { + expect(Api.inviteGroupMember).toHaveBeenCalledWith(id, postData); + }); }); - it('calls Api inviteGroupMember with the correct params', () => { - expect(Api.inviteGroupMember).toHaveBeenCalledWith(groupId, postData); + describe('when sending the invite for a single member returned an api error', () => { + const apiErrorMessage = 'Members already exists'; + + beforeEach(() => { + wrapper = createComponent({ newUsersToInvite: '123' }); + + wrapper.vm.$toast = { show: jest.fn() }; + jest + .spyOn(Api, 'inviteGroupMember') + .mockRejectedValue({ response: { data: { message: apiErrorMessage } } }); + + findInviteButton().vm.$emit('click'); + }); + + it('displays the api error message for the toastMessage', () => { + expect(wrapper.vm.$toast.show).toHaveBeenCalledWith( + apiErrorMessage, + wrapper.vm.toastOptions, + ); + }); }); - describe('when the invite was sent successfully', () => { - const toastMessageSuccessful = 'Users were succesfully added'; + describe('when sending the invite for multiple members returned any error', () => { + const genericErrorMessage = 'Some of the members could not be added'; - it('displays the successful toastMessage', () => { + beforeEach(() => { + wrapper = createComponent({ newUsersToInvite: '123' }); + + wrapper.vm.$toast = { show: jest.fn() }; + jest + .spyOn(Api, 'inviteGroupMember') + .mockRejectedValue({ response: { data: { success: false } } }); + + findInviteButton().vm.$emit('click'); + }); + + it('displays the expected toastMessage', () => { expect(wrapper.vm.$toast.show).toHaveBeenCalledWith( - toastMessageSuccessful, + genericErrorMessage, wrapper.vm.toastOptions, ); }); |