diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2023-04-20 11:43:17 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2023-04-20 11:43:17 +0000 |
commit | dfc94207fec2d84314b1a5410cface22e8b369bd (patch) | |
tree | c54022f61ced104305889a64de080998a0dc773b /spec/frontend/members | |
parent | b874efeff674f6bf0355d5d242ecf81c6f7155df (diff) | |
download | gitlab-ce-dfc94207fec2d84314b1a5410cface22e8b369bd.tar.gz |
Add latest changes from gitlab-org/gitlab@15-11-stable-eev15.11.0-rc42
Diffstat (limited to 'spec/frontend/members')
-rw-r--r-- | spec/frontend/members/components/table/expiration_datepicker_spec.js | 2 | ||||
-rw-r--r-- | spec/frontend/members/components/table/role_dropdown_spec.js | 86 | ||||
-rw-r--r-- | spec/frontend/members/utils_spec.js | 2 |
3 files changed, 70 insertions, 20 deletions
diff --git a/spec/frontend/members/components/table/expiration_datepicker_spec.js b/spec/frontend/members/components/table/expiration_datepicker_spec.js index 15812ee6572..9176a02a447 100644 --- a/spec/frontend/members/components/table/expiration_datepicker_spec.js +++ b/spec/frontend/members/components/table/expiration_datepicker_spec.js @@ -93,7 +93,7 @@ describe('ExpirationDatepicker', () => { }); describe('when datepicker is changed', () => { - beforeEach(async () => { + beforeEach(() => { createComponent(); findDatepicker().vm.$emit('input', new Date('2020-03-17')); diff --git a/spec/frontend/members/components/table/role_dropdown_spec.js b/spec/frontend/members/components/table/role_dropdown_spec.js index d6e63b1930f..1045e3f9849 100644 --- a/spec/frontend/members/components/table/role_dropdown_spec.js +++ b/spec/frontend/members/components/table/role_dropdown_spec.js @@ -1,5 +1,6 @@ import { GlDropdown, GlDropdownItem } from '@gitlab/ui'; import { GlBreakpointInstance as bp } from '@gitlab/ui/dist/utils'; +import * as Sentry from '@sentry/browser'; import { within } from '@testing-library/dom'; import { mount, createWrapper } from '@vue/test-utils'; import Vue, { nextTick } from 'vue'; @@ -12,6 +13,7 @@ import { member } from '../../mock_data'; Vue.use(Vuex); jest.mock('ee_else_ce/members/guest_overage_confirm_action'); +jest.mock('@sentry/browser'); describe('RoleDropdown', () => { let wrapper; @@ -20,9 +22,9 @@ describe('RoleDropdown', () => { show: jest.fn(), }; - const createStore = () => { + const createStore = ({ updateMemberRoleReturn = Promise.resolve() } = {}) => { actions = { - updateMemberRole: jest.fn(() => Promise.resolve()), + updateMemberRole: jest.fn(() => updateMemberRoleReturn), }; return new Vuex.Store({ @@ -32,7 +34,7 @@ describe('RoleDropdown', () => { }); }; - const createComponent = (propsData = {}) => { + const createComponent = (propsData = {}, store = createStore()) => { wrapper = mount(RoleDropdown, { provide: { namespace: MEMBER_TYPES.user, @@ -46,7 +48,7 @@ describe('RoleDropdown', () => { permissions: {}, ...propsData, }, - store: createStore(), + store, mocks: { $toast, }, @@ -75,11 +77,11 @@ describe('RoleDropdown', () => { }); describe('when dropdown is open', () => { - beforeEach(() => { + beforeEach(async () => { guestOverageConfirmAction.mockReturnValue(true); createComponent(); - return findDropdownToggle().trigger('click'); + await findDropdownToggle().trigger('click'); }); it('renders all valid roles', () => { @@ -113,26 +115,74 @@ describe('RoleDropdown', () => { }); }); - it('displays toast when successful', async () => { - await getDropdownItemByText('Developer').trigger('click'); + describe('when updateMemberRole is successful', () => { + it('displays toast', async () => { + await getDropdownItemByText('Developer').trigger('click'); - await nextTick(); + await nextTick(); - expect($toast.show).toHaveBeenCalledWith('Role updated successfully.'); - }); + expect($toast.show).toHaveBeenCalledWith('Role updated successfully.'); + }); - it('puts dropdown in loading state while waiting for `updateMemberRole` to resolve', async () => { - await getDropdownItemByText('Developer').trigger('click'); + it('puts dropdown in loading state while waiting for `updateMemberRole` to resolve', async () => { + await getDropdownItemByText('Developer').trigger('click'); + + expect(findDropdown().props('loading')).toBe(true); + }); + + it('enables dropdown after `updateMemberRole` resolves', async () => { + await getDropdownItemByText('Developer').trigger('click'); - expect(findDropdown().props('loading')).toBe(true); + await waitForPromises(); + + expect(findDropdown().props('disabled')).toBe(false); + }); + + it('does not log error to Sentry', async () => { + await getDropdownItemByText('Developer').trigger('click'); + + await waitForPromises(); + + expect(Sentry.captureException).not.toHaveBeenCalled(); + }); }); - it('enables dropdown after `updateMemberRole` resolves', async () => { - await getDropdownItemByText('Developer').trigger('click'); + describe('when updateMemberRole is not successful', () => { + const reason = 'Rejected ☹️'; - await waitForPromises(); + beforeEach(() => { + createComponent({}, createStore({ updateMemberRoleReturn: Promise.reject(reason) })); + }); + + it('does not display toast', async () => { + await getDropdownItemByText('Developer').trigger('click'); + + await nextTick(); + + expect($toast.show).not.toHaveBeenCalled(); + }); + + it('puts dropdown in loading state while waiting for `updateMemberRole` to resolve', async () => { + await getDropdownItemByText('Developer').trigger('click'); + + expect(findDropdown().props('loading')).toBe(true); + }); - expect(findDropdown().props('disabled')).toBe(false); + it('enables dropdown after `updateMemberRole` resolves', async () => { + await getDropdownItemByText('Developer').trigger('click'); + + await waitForPromises(); + + expect(findDropdown().props('disabled')).toBe(false); + }); + + it('logs error to Sentry', async () => { + await getDropdownItemByText('Developer').trigger('click'); + + await waitForPromises(); + + expect(Sentry.captureException).toHaveBeenCalledWith(reason); + }); }); }); }); diff --git a/spec/frontend/members/utils_spec.js b/spec/frontend/members/utils_spec.js index 4f276e8c9df..c4357e9c1f0 100644 --- a/spec/frontend/members/utils_spec.js +++ b/spec/frontend/members/utils_spec.js @@ -213,7 +213,7 @@ describe('Members Utils', () => { ${'recent_sign_in'} | ${{ sortByKey: 'lastSignIn', sortDesc: false }} ${'oldest_sign_in'} | ${{ sortByKey: 'lastSignIn', sortDesc: true }} `('when `sort` query string param is `$sortParam`', ({ sortParam, expected }) => { - it(`returns ${JSON.stringify(expected)}`, async () => { + it(`returns ${JSON.stringify(expected)}`, () => { setWindowLocation(`?sort=${sortParam}`); expect(parseSortParam(['account', 'granted', 'expires', 'maxRole', 'lastSignIn'])).toEqual( |