diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-08-20 18:42:06 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-08-20 18:42:06 +0000 |
commit | 6e4e1050d9dba2b7b2523fdd1768823ab85feef4 (patch) | |
tree | 78be5963ec075d80116a932011d695dd33910b4e /spec/frontend/projects/components/shared/delete_button_spec.js | |
parent | 1ce776de4ae122aba3f349c02c17cebeaa8ecf07 (diff) | |
download | gitlab-ce-6e4e1050d9dba2b7b2523fdd1768823ab85feef4.tar.gz |
Add latest changes from gitlab-org/gitlab@13-3-stable-ee
Diffstat (limited to 'spec/frontend/projects/components/shared/delete_button_spec.js')
-rw-r--r-- | spec/frontend/projects/components/shared/delete_button_spec.js | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/spec/frontend/projects/components/shared/delete_button_spec.js b/spec/frontend/projects/components/shared/delete_button_spec.js new file mode 100644 index 00000000000..a6394a50011 --- /dev/null +++ b/spec/frontend/projects/components/shared/delete_button_spec.js @@ -0,0 +1,83 @@ +import { shallowMount } from '@vue/test-utils'; +import { GlModal } from '@gitlab/ui'; +import SharedDeleteButton from '~/projects/components/shared/delete_button.vue'; + +jest.mock('~/lib/utils/csrf', () => ({ token: 'test-csrf-token' })); + +describe('Project remove modal', () => { + let wrapper; + + const findFormElement = () => wrapper.find('form'); + const findConfirmButton = () => wrapper.find('.js-modal-action-primary'); + const findAuthenticityTokenInput = () => findFormElement().find('input[name=authenticity_token]'); + const findModal = () => wrapper.find(GlModal); + + const defaultProps = { + confirmPhrase: 'foo', + formPath: 'some/path', + }; + + const createComponent = (data = {}) => { + wrapper = shallowMount(SharedDeleteButton, { + propsData: defaultProps, + data: () => data, + stubs: { + GlModal, + }, + }); + }; + + afterEach(() => { + wrapper.destroy(); + wrapper = null; + }); + + describe('intialized', () => { + beforeEach(() => { + createComponent(); + }); + + it('matches the snapshot', () => { + expect(wrapper.element).toMatchSnapshot(); + }); + + it('sets a csrf token on the authenticity form input', () => { + expect(findAuthenticityTokenInput().element.value).toEqual('test-csrf-token'); + }); + + it('sets the form action to the provided path', () => { + expect(findFormElement().attributes('action')).toEqual(defaultProps.formPath); + }); + }); + + describe('when the user input does not match the confirmPhrase', () => { + beforeEach(() => { + createComponent({ userInput: 'bar' }); + }); + + it('the confirm button is disabled', () => { + expect(findConfirmButton().attributes('disabled')).toBe('true'); + }); + }); + + describe('when the user input matches the confirmPhrase', () => { + beforeEach(() => { + createComponent({ userInput: defaultProps.confirmPhrase }); + }); + + it('the confirm button is not disabled', () => { + expect(findConfirmButton().attributes('disabled')).toBe(undefined); + }); + }); + + describe('when the modal is confirmed', () => { + beforeEach(() => { + createComponent(); + findModal().vm.$emit('ok'); + }); + + it('submits the form element', () => { + expect(findFormElement().element.submit).toHaveBeenCalled(); + }); + }); +}); |