From 8a7aaf86831d2a556578ae558a4fcab8bb659b20 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Mon, 23 Mar 2020 21:09:46 +0000 Subject: Add latest changes from gitlab-org/gitlab@master --- .../components/delete_account_modal_spec.js | 132 ---------------- .../account/components/update_username_spec.js | 172 --------------------- .../project_selector/project_selector_spec.js | 1 + 3 files changed, 1 insertion(+), 304 deletions(-) delete mode 100644 spec/javascripts/profile/account/components/delete_account_modal_spec.js delete mode 100644 spec/javascripts/profile/account/components/update_username_spec.js (limited to 'spec/javascripts') diff --git a/spec/javascripts/profile/account/components/delete_account_modal_spec.js b/spec/javascripts/profile/account/components/delete_account_modal_spec.js deleted file mode 100644 index e2c557d79a9..00000000000 --- a/spec/javascripts/profile/account/components/delete_account_modal_spec.js +++ /dev/null @@ -1,132 +0,0 @@ -import Vue from 'vue'; - -import mountComponent from 'spec/helpers/vue_mount_component_helper'; -import deleteAccountModal from '~/profile/account/components/delete_account_modal.vue'; - -describe('DeleteAccountModal component', () => { - const actionUrl = `${gl.TEST_HOST}/delete/user`; - const username = 'hasnoname'; - let Component; - let vm; - - beforeEach(() => { - Component = Vue.extend(deleteAccountModal); - }); - - afterEach(() => { - vm.$destroy(); - }); - - const findElements = () => { - const confirmation = vm.confirmWithPassword ? 'password' : 'username'; - return { - form: vm.$refs.form, - input: vm.$el.querySelector(`[name="${confirmation}"]`), - submitButton: vm.$el.querySelector('.btn-danger'), - }; - }; - - describe('with password confirmation', () => { - beforeEach(done => { - vm = mountComponent(Component, { - actionUrl, - confirmWithPassword: true, - username, - }); - - vm.isOpen = true; - - Vue.nextTick() - .then(done) - .catch(done.fail); - }); - - it('does not accept empty password', done => { - const { form, input, submitButton } = findElements(); - spyOn(form, 'submit'); - input.value = ''; - input.dispatchEvent(new Event('input')); - - Vue.nextTick() - .then(() => { - expect(vm.enteredPassword).toBe(input.value); - expect(submitButton).toHaveAttr('disabled', 'disabled'); - submitButton.click(); - - expect(form.submit).not.toHaveBeenCalled(); - }) - .then(done) - .catch(done.fail); - }); - - it('submits form with password', done => { - const { form, input, submitButton } = findElements(); - spyOn(form, 'submit'); - input.value = 'anything'; - input.dispatchEvent(new Event('input')); - - Vue.nextTick() - .then(() => { - expect(vm.enteredPassword).toBe(input.value); - expect(submitButton).not.toHaveAttr('disabled', 'disabled'); - submitButton.click(); - - expect(form.submit).toHaveBeenCalled(); - }) - .then(done) - .catch(done.fail); - }); - }); - - describe('with username confirmation', () => { - beforeEach(done => { - vm = mountComponent(Component, { - actionUrl, - confirmWithPassword: false, - username, - }); - - vm.isOpen = true; - - Vue.nextTick() - .then(done) - .catch(done.fail); - }); - - it('does not accept wrong username', done => { - const { form, input, submitButton } = findElements(); - spyOn(form, 'submit'); - input.value = 'this is wrong'; - input.dispatchEvent(new Event('input')); - - Vue.nextTick() - .then(() => { - expect(vm.enteredUsername).toBe(input.value); - expect(submitButton).toHaveAttr('disabled', 'disabled'); - submitButton.click(); - - expect(form.submit).not.toHaveBeenCalled(); - }) - .then(done) - .catch(done.fail); - }); - - it('submits form with correct username', done => { - const { form, input, submitButton } = findElements(); - spyOn(form, 'submit'); - input.value = username; - input.dispatchEvent(new Event('input')); - - Vue.nextTick() - .then(() => { - expect(vm.enteredUsername).toBe(input.value); - expect(submitButton).not.toHaveAttr('disabled', 'disabled'); - submitButton.click(); - - expect(form.submit).toHaveBeenCalled(); - }) - .then(done) - .catch(done.fail); - }); - }); -}); diff --git a/spec/javascripts/profile/account/components/update_username_spec.js b/spec/javascripts/profile/account/components/update_username_spec.js deleted file mode 100644 index 902e00b85fd..00000000000 --- a/spec/javascripts/profile/account/components/update_username_spec.js +++ /dev/null @@ -1,172 +0,0 @@ -import Vue from 'vue'; -import MockAdapter from 'axios-mock-adapter'; -import mountComponent from 'spec/helpers/vue_mount_component_helper'; -import axios from '~/lib/utils/axios_utils'; - -import updateUsername from '~/profile/account/components/update_username.vue'; - -describe('UpdateUsername component', () => { - const rootUrl = gl.TEST_HOST; - const actionUrl = `${gl.TEST_HOST}/update/username`; - const username = 'hasnoname'; - const newUsername = 'new_username'; - let Component; - let vm; - let axiosMock; - - beforeEach(() => { - axiosMock = new MockAdapter(axios); - Component = Vue.extend(updateUsername); - vm = mountComponent(Component, { - actionUrl, - rootUrl, - initialUsername: username, - }); - }); - - afterEach(() => { - vm.$destroy(); - axiosMock.restore(); - }); - - const findElements = () => { - const modalSelector = `#${vm.$options.modalId}`; - - return { - input: vm.$el.querySelector(`#${vm.$options.inputId}`), - openModalBtn: vm.$el.querySelector(`[data-target="${modalSelector}"]`), - modal: vm.$el.querySelector(modalSelector), - modalBody: vm.$el.querySelector(`${modalSelector} .modal-body`), - modalHeader: vm.$el.querySelector(`${modalSelector} .modal-title`), - confirmModalBtn: vm.$el.querySelector(`${modalSelector} .btn-warning`), - }; - }; - - it('has a disabled button if the username was not changed', done => { - const { input, openModalBtn } = findElements(); - input.dispatchEvent(new Event('input')); - - Vue.nextTick() - .then(() => { - expect(vm.username).toBe(username); - expect(vm.newUsername).toBe(username); - expect(openModalBtn).toBeDisabled(); - }) - .then(done) - .catch(done.fail); - }); - - it('has an enabled button which if the username was changed', done => { - const { input, openModalBtn } = findElements(); - input.value = newUsername; - input.dispatchEvent(new Event('input')); - - Vue.nextTick() - .then(() => { - expect(vm.username).toBe(username); - expect(vm.newUsername).toBe(newUsername); - expect(openModalBtn).not.toBeDisabled(); - }) - .then(done) - .catch(done.fail); - }); - - it('confirmation modal contains proper header and body', done => { - const { modalBody, modalHeader } = findElements(); - - vm.newUsername = newUsername; - - Vue.nextTick() - .then(() => { - expect(modalHeader.textContent).toContain('Change username?'); - expect(modalBody.textContent).toContain( - `You are going to change the username ${username} to ${newUsername}`, - ); - }) - .then(done) - .catch(done.fail); - }); - - it('confirmation modal should escape usernames properly', done => { - const { modalBody } = findElements(); - - vm.username = 'Italic'; - vm.newUsername = vm.username; - - Vue.nextTick() - .then(() => { - expect(modalBody.innerHTML).toContain('<i>Italic</i>'); - expect(modalBody.innerHTML).not.toContain(vm.username); - }) - .then(done) - .catch(done.fail); - }); - - it('executes API call on confirmation button click', done => { - const { confirmModalBtn } = findElements(); - - axiosMock.onPut(actionUrl).replyOnce(() => [200, { message: 'Username changed' }]); - spyOn(axios, 'put').and.callThrough(); - - vm.newUsername = newUsername; - - Vue.nextTick() - .then(() => { - confirmModalBtn.click(); - - expect(axios.put).toHaveBeenCalledWith(actionUrl, { user: { username: newUsername } }); - }) - .then(done) - .catch(done.fail); - }); - - it('sets the username after a successful update', done => { - const { input, openModalBtn } = findElements(); - - axiosMock.onPut(actionUrl).replyOnce(() => { - expect(input).toBeDisabled(); - expect(openModalBtn).toBeDisabled(); - - return [200, { message: 'Username changed' }]; - }); - - vm.newUsername = newUsername; - - vm.onConfirm() - .then(() => { - expect(vm.username).toBe(newUsername); - expect(vm.newUsername).toBe(newUsername); - expect(input).not.toBeDisabled(); - expect(input.value).toBe(newUsername); - expect(openModalBtn).toBeDisabled(); - }) - .then(done) - .catch(done.fail); - }); - - it('does not set the username after a erroneous update', done => { - const { input, openModalBtn } = findElements(); - - axiosMock.onPut(actionUrl).replyOnce(() => { - expect(input).toBeDisabled(); - expect(openModalBtn).toBeDisabled(); - - return [400, { message: 'Invalid username' }]; - }); - - const invalidUsername = 'anything.git'; - vm.newUsername = invalidUsername; - - vm.onConfirm() - .then(() => done.fail('Expected onConfirm to throw!')) - .catch(() => { - expect(vm.username).toBe(username); - expect(vm.newUsername).toBe(invalidUsername); - expect(input).not.toBeDisabled(); - expect(input.value).toBe(invalidUsername); - expect(openModalBtn).not.toBeDisabled(); - }) - .then(done) - .catch(done.fail); - }); -}); diff --git a/spec/javascripts/vue_shared/components/project_selector/project_selector_spec.js b/spec/javascripts/vue_shared/components/project_selector/project_selector_spec.js index 178df54b465..5d995f06abb 100644 --- a/spec/javascripts/vue_shared/components/project_selector/project_selector_spec.js +++ b/spec/javascripts/vue_shared/components/project_selector/project_selector_spec.js @@ -22,6 +22,7 @@ describe('ProjectSelector component', () => { beforeEach(() => { jasmine.clock().install(); + jasmine.clock().mockDate(); wrapper = mount(Vue.extend(ProjectSelector), { localVue, -- cgit v1.2.3