diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-10-20 08:43:02 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-10-20 08:43:02 +0000 |
commit | d9ab72d6080f594d0b3cae15f14b3ef2c6c638cb (patch) | |
tree | 2341ef426af70ad1e289c38036737e04b0aa5007 /spec/frontend/admin | |
parent | d6e514dd13db8947884cd58fe2a9c2a063400a9b (diff) | |
download | gitlab-ce-d9ab72d6080f594d0b3cae15f14b3ef2c6c638cb.tar.gz |
Add latest changes from gitlab-org/gitlab@14-4-stable-eev14.4.0-rc42
Diffstat (limited to 'spec/frontend/admin')
4 files changed, 22 insertions, 140 deletions
diff --git a/spec/frontend/admin/signup_restrictions/components/signup_form_spec.js b/spec/frontend/admin/signup_restrictions/components/signup_form_spec.js index 4bb22feb913..5b4f954b672 100644 --- a/spec/frontend/admin/signup_restrictions/components/signup_form_spec.js +++ b/spec/frontend/admin/signup_restrictions/components/signup_form_spec.js @@ -35,9 +35,6 @@ describe('Signup Form', () => { const findDenyListRawInputGroup = () => wrapper.findByTestId('domain-denylist-raw-input-group'); const findDenyListFileInputGroup = () => wrapper.findByTestId('domain-denylist-file-input-group'); - - const findRequireAdminApprovalCheckbox = () => - wrapper.findByTestId('require-admin-approval-checkbox'); const findUserCapInput = () => wrapper.findByTestId('user-cap-input'); const findModal = () => wrapper.find(GlModal); @@ -191,125 +188,6 @@ describe('Signup Form', () => { }); describe('form submit button confirmation modal for side-effect of adding possibly unwanted new users', () => { - it.each` - requireAdminApprovalAction | userCapAction | pendingUserCount | buttonEffect - ${'unchanged from true'} | ${'unchanged'} | ${0} | ${'submits form'} - ${'unchanged from false'} | ${'unchanged'} | ${0} | ${'submits form'} - ${'toggled off'} | ${'unchanged'} | ${1} | ${'shows confirmation modal'} - ${'toggled off'} | ${'unchanged'} | ${0} | ${'submits form'} - ${'toggled on'} | ${'unchanged'} | ${0} | ${'submits form'} - ${'unchanged from false'} | ${'increased'} | ${1} | ${'shows confirmation modal'} - ${'unchanged from true'} | ${'increased'} | ${0} | ${'submits form'} - ${'toggled off'} | ${'increased'} | ${1} | ${'shows confirmation modal'} - ${'toggled off'} | ${'increased'} | ${0} | ${'submits form'} - ${'toggled on'} | ${'increased'} | ${1} | ${'shows confirmation modal'} - ${'toggled on'} | ${'increased'} | ${0} | ${'submits form'} - ${'toggled on'} | ${'decreased'} | ${0} | ${'submits form'} - ${'toggled on'} | ${'decreased'} | ${1} | ${'submits form'} - ${'unchanged from false'} | ${'changed from limited to unlimited'} | ${1} | ${'shows confirmation modal'} - ${'unchanged from false'} | ${'changed from limited to unlimited'} | ${0} | ${'submits form'} - ${'unchanged from false'} | ${'changed from unlimited to limited'} | ${0} | ${'submits form'} - ${'unchanged from false'} | ${'unchanged from unlimited'} | ${0} | ${'submits form'} - `( - '$buttonEffect if require admin approval for new sign-ups is $requireAdminApprovalAction and the user cap is $userCapAction and pending user count is $pendingUserCount', - async ({ requireAdminApprovalAction, userCapAction, pendingUserCount, buttonEffect }) => { - let isModalDisplayed; - - switch (buttonEffect) { - case 'shows confirmation modal': - isModalDisplayed = true; - break; - case 'submits form': - isModalDisplayed = false; - break; - default: - isModalDisplayed = false; - break; - } - - const isFormSubmittedWhenClickingFormSubmitButton = !isModalDisplayed; - - const injectedProps = { - pendingUserCount, - }; - - const USER_CAP_DEFAULT = 5; - - switch (userCapAction) { - case 'changed from unlimited to limited': - injectedProps.newUserSignupsCap = ''; - break; - case 'unchanged from unlimited': - injectedProps.newUserSignupsCap = ''; - break; - default: - injectedProps.newUserSignupsCap = USER_CAP_DEFAULT; - break; - } - - switch (requireAdminApprovalAction) { - case 'unchanged from true': - injectedProps.requireAdminApprovalAfterUserSignup = true; - break; - case 'unchanged from false': - injectedProps.requireAdminApprovalAfterUserSignup = false; - break; - case 'toggled off': - injectedProps.requireAdminApprovalAfterUserSignup = true; - break; - case 'toggled on': - injectedProps.requireAdminApprovalAfterUserSignup = false; - break; - default: - injectedProps.requireAdminApprovalAfterUserSignup = false; - break; - } - - formSubmitSpy = jest.spyOn(HTMLFormElement.prototype, 'submit').mockImplementation(); - - await mountComponent({ - injectedProps, - stubs: { GlButton, GlModal: stubComponent(GlModal) }, - }); - - findModal().vm.show = jest.fn(); - - if ( - requireAdminApprovalAction === 'toggled off' || - requireAdminApprovalAction === 'toggled on' - ) { - await findRequireAdminApprovalCheckbox().vm.$emit('input', false); - } - - switch (userCapAction) { - case 'increased': - await findUserCapInput().vm.$emit('input', USER_CAP_DEFAULT + 1); - break; - case 'decreased': - await findUserCapInput().vm.$emit('input', USER_CAP_DEFAULT - 1); - break; - case 'changed from limited to unlimited': - await findUserCapInput().vm.$emit('input', ''); - break; - case 'changed from unlimited to limited': - await findUserCapInput().vm.$emit('input', USER_CAP_DEFAULT); - break; - default: - break; - } - - await findFormSubmitButton().trigger('click'); - - if (isFormSubmittedWhenClickingFormSubmitButton) { - expect(formSubmitSpy).toHaveBeenCalled(); - expect(findModal().vm.show).not.toHaveBeenCalled(); - } else { - expect(formSubmitSpy).not.toHaveBeenCalled(); - expect(findModal().vm.show).toHaveBeenCalled(); - } - }, - ); - describe('modal actions', () => { beforeEach(async () => { const INITIAL_USER_CAP = 5; diff --git a/spec/frontend/admin/users/components/actions/actions_spec.js b/spec/frontend/admin/users/components/actions/actions_spec.js index fd05b08a3fb..67dcf5c6149 100644 --- a/spec/frontend/admin/users/components/actions/actions_spec.js +++ b/spec/frontend/admin/users/components/actions/actions_spec.js @@ -5,6 +5,7 @@ import { nextTick } from 'vue'; import Actions from '~/admin/users/components/actions'; import SharedDeleteAction from '~/admin/users/components/actions/shared/shared_delete_action.vue'; import { capitalizeFirstCharacter } from '~/lib/utils/text_utility'; +import { OBSTACLE_TYPES } from '~/vue_shared/components/user_deletion_obstacles/constants'; import { CONFIRMATION_ACTIONS, DELETE_ACTIONS } from '../../constants'; import { paths } from '../../mock_data'; @@ -46,7 +47,10 @@ describe('Action components', () => { }); describe('DELETE_ACTION_COMPONENTS', () => { - const oncallSchedules = [{ name: 'schedule1' }, { name: 'schedule2' }]; + const userDeletionObstacles = [ + { name: 'schedule1', type: OBSTACLE_TYPES.oncallSchedules }, + { name: 'policy1', type: OBSTACLE_TYPES.escalationPolicies }, + ]; it.each(DELETE_ACTIONS.map((action) => [action, paths[action]]))( 'renders a dropdown item for "%s"', @@ -56,7 +60,7 @@ describe('Action components', () => { props: { username: 'John Doe', paths, - oncallSchedules, + userDeletionObstacles, }, stubs: { SharedDeleteAction }, }); @@ -69,8 +73,8 @@ describe('Action components', () => { expect(sharedAction.attributes('data-delete-user-url')).toBe(expectedPath); expect(sharedAction.attributes('data-gl-modal-action')).toBe(kebabCase(action)); expect(sharedAction.attributes('data-username')).toBe('John Doe'); - expect(sharedAction.attributes('data-oncall-schedules')).toBe( - JSON.stringify(oncallSchedules), + expect(sharedAction.attributes('data-user-deletion-obstacles')).toBe( + JSON.stringify(userDeletionObstacles), ); expect(findDropdownItem().exists()).toBe(true); }, diff --git a/spec/frontend/admin/users/components/modals/__snapshots__/delete_user_modal_spec.js.snap b/spec/frontend/admin/users/components/modals/__snapshots__/delete_user_modal_spec.js.snap index 5e367891337..472158a9b10 100644 --- a/spec/frontend/admin/users/components/modals/__snapshots__/delete_user_modal_spec.js.snap +++ b/spec/frontend/admin/users/components/modals/__snapshots__/delete_user_modal_spec.js.snap @@ -8,8 +8,8 @@ exports[`User Operation confirmation modal renders modal with form included 1`] /> </p> - <oncall-schedules-list-stub - schedules="schedule1,schedule2" + <user-deletion-obstacles-list-stub + obstacles="schedule1,policy1" username="username" /> diff --git a/spec/frontend/admin/users/components/modals/delete_user_modal_spec.js b/spec/frontend/admin/users/components/modals/delete_user_modal_spec.js index fee74764645..82307c9e3b3 100644 --- a/spec/frontend/admin/users/components/modals/delete_user_modal_spec.js +++ b/spec/frontend/admin/users/components/modals/delete_user_modal_spec.js @@ -1,7 +1,7 @@ import { GlButton, GlFormInput } from '@gitlab/ui'; import { shallowMount } from '@vue/test-utils'; import DeleteUserModal from '~/admin/users/components/modals/delete_user_modal.vue'; -import OncallSchedulesList from '~/vue_shared/components/oncall_schedules_list.vue'; +import UserDeletionObstaclesList from '~/vue_shared/components/user_deletion_obstacles/user_deletion_obstacles_list.vue'; import ModalStub from './stubs/modal_stub'; const TEST_DELETE_USER_URL = 'delete-url'; @@ -25,7 +25,7 @@ describe('User Operation confirmation modal', () => { const getUsername = () => findUsernameInput().attributes('value'); const getMethodParam = () => new FormData(findForm().element).get('_method'); const getFormAction = () => findForm().attributes('action'); - const findOnCallSchedulesList = () => wrapper.findComponent(OncallSchedulesList); + const findUserDeletionObstaclesList = () => wrapper.findComponent(UserDeletionObstaclesList); const setUsername = (username) => { findUsernameInput().vm.$emit('input', username); @@ -33,7 +33,7 @@ describe('User Operation confirmation modal', () => { const username = 'username'; const badUsername = 'bad_username'; - const oncallSchedules = '["schedule1", "schedule2"]'; + const userDeletionObstacles = '["schedule1", "policy1"]'; const createComponent = (props = {}) => { wrapper = shallowMount(DeleteUserModal, { @@ -46,7 +46,7 @@ describe('User Operation confirmation modal', () => { deleteUserUrl: TEST_DELETE_USER_URL, blockUserUrl: TEST_BLOCK_USER_URL, csrfToken: TEST_CSRF, - oncallSchedules, + userDeletionObstacles, ...props, }, stubs: { @@ -150,18 +150,18 @@ describe('User Operation confirmation modal', () => { }); }); - describe('Related oncall-schedules list', () => { - it('does NOT render the list when user has no related schedules', () => { - createComponent({ oncallSchedules: '[]' }); - expect(findOnCallSchedulesList().exists()).toBe(false); + describe('Related user-deletion-obstacles list', () => { + it('does NOT render the list when user has no related obstacles', () => { + createComponent({ userDeletionObstacles: '[]' }); + expect(findUserDeletionObstaclesList().exists()).toBe(false); }); - it('renders the list when user has related schedules', () => { + it('renders the list when user has related obstalces', () => { createComponent(); - const schedules = findOnCallSchedulesList(); - expect(schedules.exists()).toBe(true); - expect(schedules.props('schedules')).toEqual(JSON.parse(oncallSchedules)); + const obstacles = findUserDeletionObstaclesList(); + expect(obstacles.exists()).toBe(true); + expect(obstacles.props('obstacles')).toEqual(JSON.parse(userDeletionObstacles)); }); }); }); |