diff options
Diffstat (limited to 'spec/frontend/integrations')
7 files changed, 220 insertions, 263 deletions
diff --git a/spec/frontend/integrations/edit/components/active_checkbox_spec.js b/spec/frontend/integrations/edit/components/active_checkbox_spec.js index 0dc31616166..c335b593f7d 100644 --- a/spec/frontend/integrations/edit/components/active_checkbox_spec.js +++ b/spec/frontend/integrations/edit/components/active_checkbox_spec.js @@ -1,6 +1,7 @@ import { GlFormCheckbox } from '@gitlab/ui'; import { mount } from '@vue/test-utils'; +import { nextTick } from 'vue'; import ActiveCheckbox from '~/integrations/edit/components/active_checkbox.vue'; import { createStore } from '~/integrations/edit/store'; @@ -68,7 +69,7 @@ describe('ActiveCheckbox', () => { it('switches the form value', async () => { findInputInCheckbox().trigger('click'); - await wrapper.vm.$nextTick(); + await nextTick(); expect(findGlFormCheckbox().vm.$attrs.checked).toBe(false); }); }); diff --git a/spec/frontend/integrations/edit/components/confirmation_modal_spec.js b/spec/frontend/integrations/edit/components/confirmation_modal_spec.js index 805d3971994..cbe3402727a 100644 --- a/spec/frontend/integrations/edit/components/confirmation_modal_spec.js +++ b/spec/frontend/integrations/edit/components/confirmation_modal_spec.js @@ -1,6 +1,7 @@ import { GlModal } from '@gitlab/ui'; import { shallowMount } from '@vue/test-utils'; +import { nextTick } from 'vue'; import ConfirmationModal from '~/integrations/edit/components/confirmation_modal.vue'; import { createStore } from '~/integrations/edit/store'; @@ -40,7 +41,7 @@ describe('ConfirmationModal', () => { findGlModal().vm.$emit('primary'); - await wrapper.vm.$nextTick(); + await nextTick(); expect(wrapper.emitted().submit).toHaveLength(1); }); diff --git a/spec/frontend/integrations/edit/components/dynamic_field_spec.js b/spec/frontend/integrations/edit/components/dynamic_field_spec.js index b0fb94d2b29..ee2f6541b03 100644 --- a/spec/frontend/integrations/edit/components/dynamic_field_spec.js +++ b/spec/frontend/integrations/edit/components/dynamic_field_spec.js @@ -2,22 +2,14 @@ import { GlFormGroup, GlFormCheckbox, GlFormInput, GlFormSelect, GlFormTextarea import { mount } from '@vue/test-utils'; import DynamicField from '~/integrations/edit/components/dynamic_field.vue'; +import { mockField } from '../mock_data'; describe('DynamicField', () => { let wrapper; - const defaultProps = { - help: 'The URL of the project', - name: 'project_url', - placeholder: 'https://jira.example.com', - title: 'Project URL', - type: 'text', - value: '1', - }; - const createComponent = (props, isInheriting = false) => { wrapper = mount(DynamicField, { - propsData: { ...defaultProps, ...props }, + propsData: { ...mockField, ...props }, computed: { isInheriting: () => isInheriting, }, @@ -61,7 +53,7 @@ describe('DynamicField', () => { }); it(`renders GlFormCheckbox with correct text content when checkboxLabel is ${checkboxLabel}`, () => { - expect(findGlFormCheckbox().text()).toContain(checkboxLabel ?? defaultProps.title); + expect(findGlFormCheckbox().text()).toContain(checkboxLabel ?? mockField.title); }); it('does not render other types of input', () => { @@ -160,7 +152,7 @@ describe('DynamicField', () => { type: 'text', id: 'service_project_url', name: 'service[project_url]', - placeholder: defaultProps.placeholder, + placeholder: mockField.placeholder, required: 'required', }); expect(findGlFormInput().attributes('readonly')).toBe(readonly); @@ -179,7 +171,7 @@ describe('DynamicField', () => { it('renders description with help text', () => { createComponent(); - expect(findGlFormGroup().find('small').text()).toBe(defaultProps.help); + expect(findGlFormGroup().find('small').text()).toBe(mockField.help); }); describe('when type is checkbox', () => { @@ -189,7 +181,7 @@ describe('DynamicField', () => { }); expect(findGlFormGroup().find('small').exists()).toBe(false); - expect(findGlFormCheckbox().text()).toContain(defaultProps.help); + expect(findGlFormCheckbox().text()).toContain(mockField.help); }); }); @@ -221,40 +213,36 @@ describe('DynamicField', () => { it('renders label with title', () => { createComponent(); - expect(findGlFormGroup().find('label').text()).toBe(defaultProps.title); + expect(findGlFormGroup().find('label').text()).toBe(mockField.title); }); }); - describe('validations', () => { - describe('password field', () => { - beforeEach(() => { + describe('password field validations', () => { + describe('without value', () => { + it('requires validation', () => { createComponent({ type: 'password', required: true, value: null, + isValidated: true, }); - wrapper.vm.validated = true; - }); - - describe('without value', () => { - it('requires validation', () => { - expect(wrapper.vm.valid).toBe(false); - expect(findGlFormGroup().classes('is-invalid')).toBe(true); - expect(findGlFormInput().classes('is-invalid')).toBe(true); - }); + expect(findGlFormGroup().classes('is-invalid')).toBe(true); + expect(findGlFormInput().classes('is-invalid')).toBe(true); }); + }); - describe('with value', () => { - beforeEach(() => { - wrapper.setProps({ value: 'true' }); + describe('with value', () => { + it('does not require validation', () => { + createComponent({ + type: 'password', + required: true, + value: 'test value', + isValidated: true, }); - it('does not require validation', () => { - expect(wrapper.vm.valid).toBe(true); - expect(findGlFormGroup().classes('is-valid')).toBe(true); - expect(findGlFormInput().classes('is-valid')).toBe(true); - }); + expect(findGlFormGroup().classes('is-valid')).toBe(true); + expect(findGlFormInput().classes('is-valid')).toBe(true); }); }); }); diff --git a/spec/frontend/integrations/edit/components/integration_form_spec.js b/spec/frontend/integrations/edit/components/integration_form_spec.js index 8cf8a403e5d..7e01b79383a 100644 --- a/spec/frontend/integrations/edit/components/integration_form_spec.js +++ b/spec/frontend/integrations/edit/components/integration_form_spec.js @@ -17,16 +17,13 @@ import TriggerFields from '~/integrations/edit/components/trigger_fields.vue'; import { integrationLevels, I18N_SUCCESSFUL_CONNECTION_MESSAGE, - VALIDATE_INTEGRATION_FORM_EVENT, I18N_DEFAULT_ERROR_MESSAGE, } from '~/integrations/constants'; import { createStore } from '~/integrations/edit/store'; -import eventHub from '~/integrations/edit/event_hub'; import httpStatus from '~/lib/utils/http_status'; import { refreshCurrentPage } from '~/lib/utils/url_utility'; -import { mockIntegrationProps } from '../mock_data'; +import { mockIntegrationProps, mockField } from '../mock_data'; -jest.mock('~/integrations/edit/event_hub'); jest.mock('@sentry/browser'); jest.mock('~/lib/utils/url_utility'); @@ -36,13 +33,6 @@ describe('IntegrationForm', () => { let wrapper; let dispatch; let mockAxios; - let mockForm; - let vueIntegrationFormFeatureFlag; - - const createForm = () => { - mockForm = document.createElement('form'); - jest.spyOn(document, 'querySelector').mockReturnValue(mockForm); - }; const createComponent = ({ customStateProps = {}, @@ -56,10 +46,6 @@ describe('IntegrationForm', () => { }); dispatch = jest.spyOn(store, 'dispatch').mockImplementation(); - if (!vueIntegrationFormFeatureFlag) { - createForm(); - } - wrapper = mountFn(IntegrationForm, { propsData: { ...props }, store, @@ -75,11 +61,6 @@ describe('IntegrationForm', () => { show: mockToastShow, }, }, - provide: { - glFeatures: { - vueIntegrationForm: vueIntegrationFormFeatureFlag, - }, - }, }); }; @@ -96,12 +77,7 @@ describe('IntegrationForm', () => { const findTriggerFields = () => wrapper.findComponent(TriggerFields); const findGlForm = () => wrapper.findComponent(GlForm); const findRedirectToField = () => wrapper.findByTestId('redirect-to-field'); - const findFormElement = () => (vueIntegrationFormFeatureFlag ? findGlForm().element : mockForm); - - const mockFormFunctions = ({ checkValidityReturn }) => { - jest.spyOn(findFormElement(), 'checkValidity').mockReturnValue(checkValidityReturn); - jest.spyOn(findFormElement(), 'submit'); - }; + const findDynamicField = () => wrapper.findComponent(DynamicField); beforeEach(() => { mockAxios = new MockAdapter(axios); @@ -357,17 +333,14 @@ describe('IntegrationForm', () => { }); }); - describe('when `vueIntegrationForm` feature flag is $vueIntegrationFormEnabled', () => { - it('renders hidden fields', () => { - vueIntegrationFormFeatureFlag = true; - createComponent({ - customStateProps: { - redirectTo: '/services', - }, - }); - - expect(findRedirectToField().attributes('value')).toBe('/services'); + it('renders hidden fields', () => { + createComponent({ + customStateProps: { + redirectTo: '/services', + }, }); + + expect(findRedirectToField().attributes('value')).toBe('/services'); }); }); @@ -389,216 +362,200 @@ describe('IntegrationForm', () => { }); describe.each` - formActive | vueIntegrationFormEnabled | novalidate - ${true} | ${true} | ${null} - ${false} | ${true} | ${'novalidate'} - ${true} | ${false} | ${null} - ${false} | ${false} | ${'true'} + formActive | novalidate + ${true} | ${undefined} + ${false} | ${'true'} `( - 'when `vueIntegrationForm` feature flag is $vueIntegrationFormEnabled and `toggle-integration-active` is emitted with $formActive', - ({ formActive, vueIntegrationFormEnabled, novalidate }) => { + 'when `toggle-integration-active` is emitted with $formActive', + ({ formActive, novalidate }) => { beforeEach(async () => { - vueIntegrationFormFeatureFlag = vueIntegrationFormEnabled; - createComponent({ customStateProps: { showActive: true, initialActivated: false, }, - mountFn: mountExtended, }); - mockFormFunctions({ checkValidityReturn: false }); await findActiveCheckbox().vm.$emit('toggle-integration-active', formActive); }); it(`sets noValidate to ${novalidate}`, () => { - expect(findFormElement().getAttribute('novalidate')).toBe(novalidate); + expect(findGlForm().attributes('novalidate')).toBe(novalidate); }); }, ); }); - describe.each` - vueIntegrationFormEnabled - ${true} - ${false} - `( - 'when `vueIntegrationForm` feature flag is $vueIntegrationFormEnabled', - ({ vueIntegrationFormEnabled }) => { - beforeEach(() => { - vueIntegrationFormFeatureFlag = vueIntegrationFormEnabled; - }); - - describe('when `save` button is clicked', () => { - describe('buttons', () => { - beforeEach(async () => { - createComponent({ - customStateProps: { - showActive: true, - canTest: true, - initialActivated: true, - }, - mountFn: mountExtended, - }); - - await findProjectSaveButton().vm.$emit('click', new Event('click')); - }); + describe('when `save` button is clicked', () => { + describe('buttons', () => { + beforeEach(async () => { + createComponent({ + customStateProps: { + showActive: true, + canTest: true, + initialActivated: true, + }, + mountFn: mountExtended, + }); - it('sets save button `loading` prop to `true`', () => { - expect(findProjectSaveButton().props('loading')).toBe(true); - }); + await findProjectSaveButton().vm.$emit('click', new Event('click')); + }); - it('sets test button `disabled` prop to `true`', () => { - expect(findTestButton().props('disabled')).toBe(true); + it('sets save button `loading` prop to `true`', () => { + expect(findProjectSaveButton().props('loading')).toBe(true); + }); + + it('sets test button `disabled` prop to `true`', () => { + expect(findTestButton().props('disabled')).toBe(true); + }); + }); + + describe.each` + checkValidityReturn | integrationActive + ${true} | ${false} + ${true} | ${true} + ${false} | ${false} + `( + 'when form is valid (checkValidity returns $checkValidityReturn and integrationActive is $integrationActive)', + ({ integrationActive, checkValidityReturn }) => { + beforeEach(async () => { + createComponent({ + customStateProps: { + showActive: true, + canTest: true, + initialActivated: integrationActive, + }, + mountFn: mountExtended, }); + jest.spyOn(findGlForm().element, 'submit'); + jest.spyOn(findGlForm().element, 'checkValidity').mockReturnValue(checkValidityReturn); + + await findProjectSaveButton().vm.$emit('click', new Event('click')); + }); + + it('submit form', () => { + expect(findGlForm().element.submit).toHaveBeenCalledTimes(1); }); + }, + ); - describe.each` - checkValidityReturn | integrationActive - ${true} | ${false} - ${true} | ${true} - ${false} | ${false} - `( - 'when form is valid (checkValidity returns $checkValidityReturn and integrationActive is $integrationActive)', - ({ integrationActive, checkValidityReturn }) => { - beforeEach(async () => { - createComponent({ - customStateProps: { - showActive: true, - canTest: true, - initialActivated: integrationActive, - }, - mountFn: mountExtended, - }); - - mockFormFunctions({ checkValidityReturn }); - - await findProjectSaveButton().vm.$emit('click', new Event('click')); - }); - - it('submits form', () => { - expect(findFormElement().submit).toHaveBeenCalledTimes(1); - }); + describe('when form is invalid (checkValidity returns false and integrationActive is true)', () => { + beforeEach(async () => { + createComponent({ + customStateProps: { + showActive: true, + canTest: true, + initialActivated: true, + fields: [mockField], }, - ); - - describe('when form is invalid (checkValidity returns false and integrationActive is true)', () => { - beforeEach(async () => { - createComponent({ - customStateProps: { - showActive: true, - canTest: true, - initialActivated: true, - }, - mountFn: mountExtended, - }); - mockFormFunctions({ checkValidityReturn: false }); - - await findProjectSaveButton().vm.$emit('click', new Event('click')); - }); + mountFn: mountExtended, + }); + jest.spyOn(findGlForm().element, 'submit'); + jest.spyOn(findGlForm().element, 'checkValidity').mockReturnValue(false); - it('does not submit form', () => { - expect(findFormElement().submit).not.toHaveBeenCalled(); - }); + await findProjectSaveButton().vm.$emit('click', new Event('click')); + }); - it('sets save button `loading` prop to `false`', () => { - expect(findProjectSaveButton().props('loading')).toBe(false); - }); + it('does not submit form', () => { + expect(findGlForm().element.submit).not.toHaveBeenCalled(); + }); - it('sets test button `disabled` prop to `false`', () => { - expect(findTestButton().props('disabled')).toBe(false); - }); + it('sets save button `loading` prop to `false`', () => { + expect(findProjectSaveButton().props('loading')).toBe(false); + }); - it('emits `VALIDATE_INTEGRATION_FORM_EVENT`', () => { - expect(eventHub.$emit).toHaveBeenCalledWith(VALIDATE_INTEGRATION_FORM_EVENT); - }); + it('sets test button `disabled` prop to `false`', () => { + expect(findTestButton().props('disabled')).toBe(false); + }); + + it('sets `isValidated` props on form fields', () => { + expect(findDynamicField().props('isValidated')).toBe(true); + }); + }); + }); + + describe('when `test` button is clicked', () => { + describe('when form is invalid', () => { + it('sets `isValidated` props on form fields', async () => { + createComponent({ + customStateProps: { + showActive: true, + canTest: true, + fields: [mockField], + }, + mountFn: mountExtended, }); + jest.spyOn(findGlForm().element, 'checkValidity').mockReturnValue(false); + + await findTestButton().vm.$emit('click', new Event('click')); + + expect(findDynamicField().props('isValidated')).toBe(true); }); + }); - describe('when `test` button is clicked', () => { - describe('when form is invalid', () => { - it('emits `VALIDATE_INTEGRATION_FORM_EVENT` event to the event hub', () => { - createComponent({ - customStateProps: { - showActive: true, - canTest: true, - }, - mountFn: mountExtended, - }); - mockFormFunctions({ checkValidityReturn: false }); + describe('when form is valid', () => { + const mockTestPath = '/test'; - findTestButton().vm.$emit('click', new Event('click')); + beforeEach(() => { + createComponent({ + customStateProps: { + showActive: true, + canTest: true, + testPath: mockTestPath, + }, + mountFn: mountExtended, + }); + jest.spyOn(findGlForm().element, 'checkValidity').mockReturnValue(true); + }); - expect(eventHub.$emit).toHaveBeenCalledWith(VALIDATE_INTEGRATION_FORM_EVENT); - }); + describe('buttons', () => { + beforeEach(async () => { + await findTestButton().vm.$emit('click', new Event('click')); }); - describe('when form is valid', () => { - const mockTestPath = '/test'; + it('sets test button `loading` prop to `true`', () => { + expect(findTestButton().props('loading')).toBe(true); + }); - beforeEach(() => { - createComponent({ - customStateProps: { - showActive: true, - canTest: true, - testPath: mockTestPath, - }, - mountFn: mountExtended, - }); - mockFormFunctions({ checkValidityReturn: true }); + it('sets save button `disabled` prop to `true`', () => { + expect(findProjectSaveButton().props('disabled')).toBe(true); + }); + }); + + describe.each` + scenario | replyStatus | errorMessage | expectToast | expectSentry + ${'when "test settings" request fails'} | ${httpStatus.INTERNAL_SERVER_ERROR} | ${undefined} | ${I18N_DEFAULT_ERROR_MESSAGE} | ${true} + ${'when "test settings" returns an error'} | ${httpStatus.OK} | ${'an error'} | ${'an error'} | ${false} + ${'when "test settings" succeeds'} | ${httpStatus.OK} | ${undefined} | ${I18N_SUCCESSFUL_CONNECTION_MESSAGE} | ${false} + `('$scenario', ({ replyStatus, errorMessage, expectToast, expectSentry }) => { + beforeEach(async () => { + mockAxios.onPut(mockTestPath).replyOnce(replyStatus, { + error: Boolean(errorMessage), + message: errorMessage, }); - describe('buttons', () => { - beforeEach(async () => { - await findTestButton().vm.$emit('click', new Event('click')); - }); + await findTestButton().vm.$emit('click', new Event('click')); + await waitForPromises(); + }); - it('sets test button `loading` prop to `true`', () => { - expect(findTestButton().props('loading')).toBe(true); - }); + it(`calls toast with '${expectToast}'`, () => { + expect(mockToastShow).toHaveBeenCalledWith(expectToast); + }); - it('sets save button `disabled` prop to `true`', () => { - expect(findProjectSaveButton().props('disabled')).toBe(true); - }); - }); + it('sets `loading` prop of test button to `false`', () => { + expect(findTestButton().props('loading')).toBe(false); + }); - describe.each` - scenario | replyStatus | errorMessage | expectToast | expectSentry - ${'when "test settings" request fails'} | ${httpStatus.INTERNAL_SERVER_ERROR} | ${undefined} | ${I18N_DEFAULT_ERROR_MESSAGE} | ${true} - ${'when "test settings" returns an error'} | ${httpStatus.OK} | ${'an error'} | ${'an error'} | ${false} - ${'when "test settings" succeeds'} | ${httpStatus.OK} | ${undefined} | ${I18N_SUCCESSFUL_CONNECTION_MESSAGE} | ${false} - `('$scenario', ({ replyStatus, errorMessage, expectToast, expectSentry }) => { - beforeEach(async () => { - mockAxios.onPut(mockTestPath).replyOnce(replyStatus, { - error: Boolean(errorMessage), - message: errorMessage, - }); - - await findTestButton().vm.$emit('click', new Event('click')); - await waitForPromises(); - }); - - it(`calls toast with '${expectToast}'`, () => { - expect(mockToastShow).toHaveBeenCalledWith(expectToast); - }); - - it('sets `loading` prop of test button to `false`', () => { - expect(findTestButton().props('loading')).toBe(false); - }); - - it('sets save button `disabled` prop to `false`', () => { - expect(findProjectSaveButton().props('disabled')).toBe(false); - }); - - it(`${expectSentry ? 'does' : 'does not'} capture exception in Sentry`, () => { - expect(Sentry.captureException).toHaveBeenCalledTimes(expectSentry ? 1 : 0); - }); - }); + it('sets save button `disabled` prop to `false`', () => { + expect(findProjectSaveButton().props('disabled')).toBe(false); + }); + + it(`${expectSentry ? 'does' : 'does not'} capture exception in Sentry`, () => { + expect(Sentry.captureException).toHaveBeenCalledTimes(expectSentry ? 1 : 0); }); }); - }, - ); + }); + }); describe('when `reset-confirmation-modal` emits `reset` event', () => { const mockResetPath = '/reset'; diff --git a/spec/frontend/integrations/edit/components/jira_issues_fields_spec.js b/spec/frontend/integrations/edit/components/jira_issues_fields_spec.js index b5a8eed3598..33fd08a5959 100644 --- a/spec/frontend/integrations/edit/components/jira_issues_fields_spec.js +++ b/spec/frontend/integrations/edit/components/jira_issues_fields_spec.js @@ -1,9 +1,8 @@ import { GlFormCheckbox, GlFormInput } from '@gitlab/ui'; +import { nextTick } from 'vue'; import { mountExtended, shallowMountExtended } from 'helpers/vue_test_utils_helper'; -import { VALIDATE_INTEGRATION_FORM_EVENT } from '~/integrations/constants'; import JiraIssuesFields from '~/integrations/edit/components/jira_issues_fields.vue'; -import eventHub from '~/integrations/edit/event_hub'; import { createStore } from '~/integrations/edit/store'; describe('JiraIssuesFields', () => { @@ -195,7 +194,7 @@ describe('JiraIssuesFields', () => { await setEnableCheckbox(true); expect(findJiraForVulnerabilities().attributes('show-full-feature')).toBe('true'); wrapper.setProps({ showJiraVulnerabilitiesIntegration: false }); - await wrapper.vm.$nextTick(); + await nextTick(); expect(findJiraForVulnerabilities().attributes('show-full-feature')).toBeUndefined(); }); @@ -222,7 +221,7 @@ describe('JiraIssuesFields', () => { }); describe('Project key input field', () => { - beforeEach(() => { + it('sets Project Key `state` attribute to `true` by default', () => { createComponent({ props: { initialProjectKey: '', @@ -230,29 +229,32 @@ describe('JiraIssuesFields', () => { }, mountFn: shallowMountExtended, }); - }); - it('sets Project Key `state` attribute to `true` by default', () => { assertProjectKeyState('true'); }); - describe('when event hub recieves `VALIDATE_INTEGRATION_FORM_EVENT` event', () => { + describe('when `isValidated` prop is true', () => { + beforeEach(() => { + createComponent({ + props: { + initialProjectKey: '', + initialEnableJiraIssues: true, + isValidated: true, + }, + mountFn: shallowMountExtended, + }); + }); + describe('with no project key', () => { it('sets Project Key `state` attribute to `undefined`', async () => { - eventHub.$emit(VALIDATE_INTEGRATION_FORM_EVENT); - await wrapper.vm.$nextTick(); - assertProjectKeyState(undefined); }); }); describe('when project key is set', () => { it('sets Project Key `state` attribute to `true`', async () => { - eventHub.$emit(VALIDATE_INTEGRATION_FORM_EVENT); - // set the project key await findProjectKey().vm.$emit('input', 'AB'); - await wrapper.vm.$nextTick(); assertProjectKeyState('true'); }); diff --git a/spec/frontend/integrations/edit/components/jira_trigger_fields_spec.js b/spec/frontend/integrations/edit/components/jira_trigger_fields_spec.js index 9e01371f542..49fbebb9396 100644 --- a/spec/frontend/integrations/edit/components/jira_trigger_fields_spec.js +++ b/spec/frontend/integrations/edit/components/jira_trigger_fields_spec.js @@ -1,4 +1,5 @@ import { GlFormCheckbox } from '@gitlab/ui'; +import { nextTick } from 'vue'; import { mountExtended } from 'helpers/vue_test_utils_helper'; import JiraTriggerFields from '~/integrations/edit/components/jira_trigger_fields.vue'; @@ -71,12 +72,11 @@ describe('JiraTriggerFields', () => { }); describe('on enable comments', () => { - it('shows comment detail', () => { + it('shows comment detail', async () => { findCommentSettingsCheckbox().vm.$emit('input', true); - return wrapper.vm.$nextTick().then(() => { - expect(findCommentDetail().isVisible()).toBe(true); - }); + await nextTick(); + expect(findCommentDetail().isVisible()).toBe(true); }); }); }); @@ -107,7 +107,7 @@ describe('JiraTriggerFields', () => { }); describe('initialJiraIssueTransitionAutomatic is false, initialJiraIssueTransitionId is not set', () => { - it('selects automatic transitions when enabling transitions', () => { + it('selects automatic transitions when enabling transitions', async () => { createComponent({ initialTriggerCommit: true, initialEnableComments: true, @@ -117,11 +117,10 @@ describe('JiraTriggerFields', () => { expect(checkbox.element.checked).toBe(false); checkbox.trigger('click'); - return wrapper.vm.$nextTick().then(() => { - const [radio1, radio2] = findIssueTransitionModeRadios().wrappers; - expect(radio1.element.checked).toBe(true); - expect(radio2.element.checked).toBe(false); - }); + await nextTick(); + const [radio1, radio2] = findIssueTransitionModeRadios().wrappers; + expect(radio1.element.checked).toBe(true); + expect(radio2.element.checked).toBe(false); }); }); diff --git a/spec/frontend/integrations/edit/mock_data.js b/spec/frontend/integrations/edit/mock_data.js index 3c45ed0fb1b..39e5f8521e8 100644 --- a/spec/frontend/integrations/edit/mock_data.js +++ b/spec/frontend/integrations/edit/mock_data.js @@ -20,3 +20,12 @@ export const mockJiraIssueTypes = [ { id: '2', name: 'bug', description: 'bug' }, { id: '3', name: 'epic', description: 'epic' }, ]; + +export const mockField = { + help: 'The URL of the project', + name: 'project_url', + placeholder: 'https://jira.example.com', + title: 'Project URL', + type: 'text', + value: '1', +}; |