diff options
Diffstat (limited to 'spec/frontend/integrations/edit/components/jira_issues_fields_spec.js')
-rw-r--r-- | spec/frontend/integrations/edit/components/jira_issues_fields_spec.js | 86 |
1 files changed, 69 insertions, 17 deletions
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 eaeed2703d1..3938e7c7c22 100644 --- a/spec/frontend/integrations/edit/components/jira_issues_fields_spec.js +++ b/spec/frontend/integrations/edit/components/jira_issues_fields_spec.js @@ -1,20 +1,23 @@ -import { mount } from '@vue/test-utils'; - import { GlFormCheckbox, GlFormInput } from '@gitlab/ui'; +import { mount } from '@vue/test-utils'; import JiraIssuesFields from '~/integrations/edit/components/jira_issues_fields.vue'; +import eventHub from '~/integrations/edit/event_hub'; describe('JiraIssuesFields', () => { let wrapper; const defaultProps = { - showJiraIssuesIntegration: true, editProjectPath: '/edit', + showJiraIssuesIntegration: true, + showJiraVulnerabilitiesIntegration: true, }; - const createComponent = (props) => { + const createComponent = ({ props, ...options } = {}) => { wrapper = mount(JiraIssuesFields, { propsData: { ...defaultProps, ...props }, + stubs: ['jira-issue-creation-vulnerabilities'], + ...options, }); }; @@ -28,11 +31,14 @@ describe('JiraIssuesFields', () => { const findEnableCheckbox = () => wrapper.find(GlFormCheckbox); const findProjectKey = () => wrapper.find(GlFormInput); const expectedBannerText = 'This is a Premium feature'; + const findJiraForVulnerabilities = () => wrapper.find('[data-testid="jira-for-vulnerabilities"]'); + const setEnableCheckbox = async (isEnabled = true) => + findEnableCheckbox().vm.$emit('input', isEnabled); describe('template', () => { describe('upgrade banner for non-Premium user', () => { beforeEach(() => { - createComponent({ initialProjectKey: '', showJiraIssuesIntegration: false }); + createComponent({ props: { initialProjectKey: '', showJiraIssuesIntegration: false } }); }); it('shows upgrade banner', () => { @@ -47,7 +53,7 @@ describe('JiraIssuesFields', () => { describe('Enable Jira issues checkbox', () => { beforeEach(() => { - createComponent({ initialProjectKey: '' }); + createComponent({ props: { initialProjectKey: '' } }); }); it('does not show upgrade banner', () => { @@ -69,20 +75,16 @@ describe('JiraIssuesFields', () => { }); describe('on enable issues', () => { - it('enables project_key input', () => { - findEnableCheckbox().vm.$emit('input', true); + it('enables project_key input', async () => { + await setEnableCheckbox(true); - return wrapper.vm.$nextTick().then(() => { - expect(findProjectKey().attributes('disabled')).toBeUndefined(); - }); + expect(findProjectKey().attributes('disabled')).toBeUndefined(); }); - it('requires project_key input', () => { - findEnableCheckbox().vm.$emit('input', true); + it('requires project_key input', async () => { + await setEnableCheckbox(true); - return wrapper.vm.$nextTick().then(() => { - expect(findProjectKey().attributes('required')).toBe('required'); - }); + expect(findProjectKey().attributes('required')).toBe('required'); }); }); }); @@ -103,10 +105,60 @@ describe('JiraIssuesFields', () => { }); it('does not contain warning when GitLab issues is disabled', () => { - createComponent({ gitlabIssuesEnabled: false }); + createComponent({ props: { gitlabIssuesEnabled: false } }); expect(wrapper.text()).not.toContain(expectedText); }); }); + + describe('Vulnerabilities creation', () => { + beforeEach(() => { + createComponent({ provide: { glFeatures: { jiraForVulnerabilities: true } } }); + }); + + it.each([true, false])( + 'shows the jira-vulnerabilities component correctly when jira issues enables is set to "%s"', + async (hasJiraIssuesEnabled) => { + await setEnableCheckbox(hasJiraIssuesEnabled); + + expect(findJiraForVulnerabilities().exists()).toBe(hasJiraIssuesEnabled); + }, + ); + + it('passes down the correct initial-issue-type-id value when value is empty', async () => { + await setEnableCheckbox(true); + expect(findJiraForVulnerabilities().attributes('initial-issue-type-id')).toBeUndefined(); + }); + + it('passes down the correct initial-issue-type-id value when value is not empty', async () => { + const jiraIssueType = 'some-jira-issue-type'; + wrapper.setProps({ initialVulnerabilitiesIssuetype: jiraIssueType }); + await setEnableCheckbox(true); + expect(findJiraForVulnerabilities().attributes('initial-issue-type-id')).toBe( + jiraIssueType, + ); + }); + + it('emits "getJiraIssueTypes" to the eventHub when the jira-vulnerabilities component requests to fetch issue types', async () => { + const eventHubEmitSpy = jest.spyOn(eventHub, '$emit'); + + await setEnableCheckbox(true); + await findJiraForVulnerabilities().vm.$emit('request-get-issue-types'); + + expect(eventHubEmitSpy).toHaveBeenCalledWith('getJiraIssueTypes'); + }); + + describe('with "jiraForVulnerabilities" feature flag disabled', () => { + beforeEach(async () => { + createComponent({ + provide: { glFeatures: { jiraForVulnerabilities: false } }, + }); + }); + + it('does not show section', () => { + expect(findJiraForVulnerabilities().exists()).toBe(false); + }); + }); + }); }); }); |