summaryrefslogtreecommitdiff
path: root/spec/frontend/integrations/edit
diff options
context:
space:
mode:
Diffstat (limited to 'spec/frontend/integrations/edit')
-rw-r--r--spec/frontend/integrations/edit/components/dynamic_field_spec.js11
-rw-r--r--spec/frontend/integrations/edit/components/jira_issues_fields_spec.js49
-rw-r--r--spec/frontend/integrations/edit/components/jira_trigger_fields_spec.js106
-rw-r--r--spec/frontend/integrations/edit/components/jira_upgrade_cta_spec.js30
-rw-r--r--spec/frontend/integrations/edit/components/trigger_fields_spec.js4
5 files changed, 168 insertions, 32 deletions
diff --git a/spec/frontend/integrations/edit/components/dynamic_field_spec.js b/spec/frontend/integrations/edit/components/dynamic_field_spec.js
index aaca9fc4e62..2ebb3333c0f 100644
--- a/spec/frontend/integrations/edit/components/dynamic_field_spec.js
+++ b/spec/frontend/integrations/edit/components/dynamic_field_spec.js
@@ -192,17 +192,6 @@ describe('DynamicField', () => {
expect(findGlFormGroup().find('label').text()).toBe(defaultProps.title);
});
-
- describe('for password field with some value (hidden by backend)', () => {
- it('renders label with new password title', () => {
- createComponent({
- type: 'password',
- value: 'true',
- });
-
- expect(findGlFormGroup().find('label').text()).toBe(`Enter new ${defaultProps.title}`);
- });
- });
});
describe('validations', () => {
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 3938e7c7c22..d08a1904e06 100644
--- a/spec/frontend/integrations/edit/components/jira_issues_fields_spec.js
+++ b/spec/frontend/integrations/edit/components/jira_issues_fields_spec.js
@@ -1,7 +1,7 @@
import { GlFormCheckbox, GlFormInput } from '@gitlab/ui';
import { mount } from '@vue/test-utils';
-
import JiraIssuesFields from '~/integrations/edit/components/jira_issues_fields.vue';
+import JiraUpgradeCta from '~/integrations/edit/components/jira_upgrade_cta.vue';
import eventHub from '~/integrations/edit/event_hub';
describe('JiraIssuesFields', () => {
@@ -28,23 +28,46 @@ describe('JiraIssuesFields', () => {
}
});
- const findEnableCheckbox = () => wrapper.find(GlFormCheckbox);
- const findProjectKey = () => wrapper.find(GlFormInput);
- const expectedBannerText = 'This is a Premium feature';
+ const findEnableCheckbox = () => wrapper.findComponent(GlFormCheckbox);
+ const findProjectKey = () => wrapper.findComponent(GlFormInput);
+ const findJiraUpgradeCta = () => wrapper.findComponent(JiraUpgradeCta);
const findJiraForVulnerabilities = () => wrapper.find('[data-testid="jira-for-vulnerabilities"]');
const setEnableCheckbox = async (isEnabled = true) =>
findEnableCheckbox().vm.$emit('input', isEnabled);
+ describe('jira issues call to action', () => {
+ it('shows the premium message', () => {
+ createComponent({
+ props: { showJiraIssuesIntegration: false },
+ });
+
+ expect(findJiraUpgradeCta().props()).toMatchObject({
+ showPremiumMessage: true,
+ showUltimateMessage: false,
+ });
+ });
+
+ it('shows the ultimate message', () => {
+ createComponent({
+ props: {
+ showJiraIssuesIntegration: true,
+ showJiraVulnerabilitiesIntegration: false,
+ },
+ });
+
+ expect(findJiraUpgradeCta().props()).toMatchObject({
+ showPremiumMessage: false,
+ showUltimateMessage: true,
+ });
+ });
+ });
+
describe('template', () => {
describe('upgrade banner for non-Premium user', () => {
beforeEach(() => {
createComponent({ props: { initialProjectKey: '', showJiraIssuesIntegration: false } });
});
- it('shows upgrade banner', () => {
- expect(wrapper.text()).toContain(expectedBannerText);
- });
-
it('does not show checkbox and input field', () => {
expect(findEnableCheckbox().exists()).toBe(false);
expect(findProjectKey().exists()).toBe(false);
@@ -57,7 +80,7 @@ describe('JiraIssuesFields', () => {
});
it('does not show upgrade banner', () => {
- expect(wrapper.text()).not.toContain(expectedBannerText);
+ expect(findJiraUpgradeCta().exists()).toBe(false);
});
// As per https://vuejs.org/v2/guide/forms.html#Checkbox-1,
@@ -125,6 +148,14 @@ describe('JiraIssuesFields', () => {
},
);
+ it('passes down the correct show-full-feature property', async () => {
+ await setEnableCheckbox(true);
+ expect(findJiraForVulnerabilities().attributes('show-full-feature')).toBe('true');
+ wrapper.setProps({ showJiraVulnerabilitiesIntegration: false });
+ await wrapper.vm.$nextTick();
+ expect(findJiraForVulnerabilities().attributes('show-full-feature')).toBeUndefined();
+ });
+
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();
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 c6e7ee44355..5c04add61a1 100644
--- a/spec/frontend/integrations/edit/components/jira_trigger_fields_spec.js
+++ b/spec/frontend/integrations/edit/components/jira_trigger_fields_spec.js
@@ -30,14 +30,23 @@ describe('JiraTriggerFields', () => {
const findCommentSettings = () => wrapper.find('[data-testid="comment-settings"]');
const findCommentDetail = () => wrapper.find('[data-testid="comment-detail"]');
const findCommentSettingsCheckbox = () => findCommentSettings().find(GlFormCheckbox);
+ const findIssueTransitionEnabled = () =>
+ wrapper.find('[data-testid="issue-transition-enabled"] input[type="checkbox"]');
+ const findIssueTransitionMode = () => wrapper.find('[data-testid="issue-transition-mode"]');
+ const findIssueTransitionModeRadios = () =>
+ findIssueTransitionMode().findAll('input[type="radio"]');
+ const findIssueTransitionIdsField = () =>
+ wrapper.find('input[type="text"][name="service[jira_issue_transition_id]"]');
describe('template', () => {
describe('initialTriggerCommit and initialTriggerMergeRequest are false', () => {
- it('does not show comment settings', () => {
+ it('does not show trigger settings', () => {
createComponent();
expect(findCommentSettings().isVisible()).toBe(false);
expect(findCommentDetail().isVisible()).toBe(false);
+ expect(findIssueTransitionEnabled().exists()).toBe(false);
+ expect(findIssueTransitionMode().exists()).toBe(false);
});
});
@@ -48,9 +57,11 @@ describe('JiraTriggerFields', () => {
});
});
- it('shows comment settings', () => {
+ it('shows trigger settings', () => {
expect(findCommentSettings().isVisible()).toBe(true);
expect(findCommentDetail().isVisible()).toBe(false);
+ expect(findIssueTransitionEnabled().isVisible()).toBe(true);
+ expect(findIssueTransitionMode().exists()).toBe(false);
});
// As per https://vuejs.org/v2/guide/forms.html#Checkbox-1,
@@ -73,13 +84,15 @@ describe('JiraTriggerFields', () => {
});
describe('initialTriggerMergeRequest is true', () => {
- it('shows comment settings', () => {
+ it('shows trigger settings', () => {
createComponent({
initialTriggerMergeRequest: true,
});
expect(findCommentSettings().isVisible()).toBe(true);
expect(findCommentDetail().isVisible()).toBe(false);
+ expect(findIssueTransitionEnabled().isVisible()).toBe(true);
+ expect(findIssueTransitionMode().exists()).toBe(false);
});
});
@@ -95,21 +108,94 @@ describe('JiraTriggerFields', () => {
});
});
- it('disables checkboxes and radios if inheriting', () => {
+ describe('initialJiraIssueTransitionAutomatic is false, initialJiraIssueTransitionId is not set', () => {
+ it('selects automatic transitions when enabling transitions', () => {
+ createComponent({
+ initialTriggerCommit: true,
+ initialEnableComments: true,
+ });
+
+ const checkbox = findIssueTransitionEnabled();
+ 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);
+ });
+ });
+ });
+
+ describe('initialJiraIssueTransitionAutomatic is true', () => {
+ it('uses automatic transitions', () => {
+ createComponent({
+ initialTriggerCommit: true,
+ initialJiraIssueTransitionAutomatic: true,
+ });
+
+ expect(findIssueTransitionEnabled().element.checked).toBe(true);
+
+ const [radio1, radio2] = findIssueTransitionModeRadios().wrappers;
+ expect(radio1.element.checked).toBe(true);
+ expect(radio2.element.checked).toBe(false);
+
+ expect(findIssueTransitionIdsField().exists()).toBe(false);
+ });
+ });
+
+ describe('initialJiraIssueTransitionId is set', () => {
+ it('uses custom transitions', () => {
+ createComponent({
+ initialTriggerCommit: true,
+ initialJiraIssueTransitionId: '1, 2, 3',
+ });
+
+ expect(findIssueTransitionEnabled().element.checked).toBe(true);
+
+ const [radio1, radio2] = findIssueTransitionModeRadios().wrappers;
+ expect(radio1.element.checked).toBe(false);
+ expect(radio2.element.checked).toBe(true);
+
+ const field = findIssueTransitionIdsField();
+ expect(field.isVisible()).toBe(true);
+ expect(field.element).toMatchObject({
+ type: 'text',
+ value: '1, 2, 3',
+ });
+ });
+ });
+
+ describe('initialJiraIssueTransitionAutomatic is true, initialJiraIssueTransitionId is set', () => {
+ it('uses automatic transitions', () => {
+ createComponent({
+ initialTriggerCommit: true,
+ initialJiraIssueTransitionAutomatic: true,
+ initialJiraIssueTransitionId: '1, 2, 3',
+ });
+
+ expect(findIssueTransitionEnabled().element.checked).toBe(true);
+
+ const [radio1, radio2] = findIssueTransitionModeRadios().wrappers;
+ expect(radio1.element.checked).toBe(true);
+ expect(radio2.element.checked).toBe(false);
+
+ expect(findIssueTransitionIdsField().exists()).toBe(false);
+ });
+ });
+
+ it('disables input fields if inheriting', () => {
createComponent(
{
initialTriggerCommit: true,
initialEnableComments: true,
+ initialJiraIssueTransitionId: '1, 2, 3',
},
true,
);
- wrapper.findAll('[type=checkbox]').wrappers.forEach((checkbox) => {
- expect(checkbox.attributes('disabled')).toBe('disabled');
- });
-
- wrapper.findAll('[type=radio]').wrappers.forEach((radio) => {
- expect(radio.attributes('disabled')).toBe('disabled');
+ wrapper.findAll('[type=text], [type=checkbox], [type=radio]').wrappers.forEach((input) => {
+ expect(input.attributes('disabled')).toBe('disabled');
});
});
});
diff --git a/spec/frontend/integrations/edit/components/jira_upgrade_cta_spec.js b/spec/frontend/integrations/edit/components/jira_upgrade_cta_spec.js
new file mode 100644
index 00000000000..e49a1619627
--- /dev/null
+++ b/spec/frontend/integrations/edit/components/jira_upgrade_cta_spec.js
@@ -0,0 +1,30 @@
+import { shallowMount } from '@vue/test-utils';
+import JiraUpgradeCta from '~/integrations/edit/components/jira_upgrade_cta.vue';
+
+describe('JiraUpgradeCta', () => {
+ let wrapper;
+
+ const contentMessage = 'Upgrade your plan to enable this feature of the Jira Integration.';
+
+ const createComponent = (propsData) => {
+ wrapper = shallowMount(JiraUpgradeCta, {
+ propsData,
+ });
+ };
+
+ afterEach(() => {
+ wrapper.destroy();
+ });
+
+ it('displays the correct message for premium and lower users', () => {
+ createComponent({ showPremiumMessage: true });
+ expect(wrapper.html()).toContain('This is a Premium feature');
+ expect(wrapper.html()).toContain(contentMessage);
+ });
+
+ it('displays the correct message for ultimate and lower users', () => {
+ createComponent({ showUltimateMessage: true });
+ expect(wrapper.html()).toContain('This is an Ultimate feature');
+ expect(wrapper.html()).toContain(contentMessage);
+ });
+});
diff --git a/spec/frontend/integrations/edit/components/trigger_fields_spec.js b/spec/frontend/integrations/edit/components/trigger_fields_spec.js
index 3e5326812b1..b9d16464e72 100644
--- a/spec/frontend/integrations/edit/components/trigger_fields_spec.js
+++ b/spec/frontend/integrations/edit/components/trigger_fields_spec.js
@@ -138,11 +138,11 @@ describe('TriggerFields', () => {
const expectedResults = [
{
name: 'service[push_channel]',
- placeholder: 'Slack channels (e.g. general, development)',
+ placeholder: 'general, development',
},
{
name: 'service[merge_request_channel]',
- placeholder: 'Slack channels (e.g. general, development)',
+ placeholder: 'general, development',
},
];