summaryrefslogtreecommitdiff
path: root/spec/frontend/vue_mr_widget/components/states
diff options
context:
space:
mode:
Diffstat (limited to 'spec/frontend/vue_mr_widget/components/states')
-rw-r--r--spec/frontend/vue_mr_widget/components/states/mr_widget_auto_merge_enabled_spec.js9
-rw-r--r--spec/frontend/vue_mr_widget/components/states/mr_widget_checking_spec.js2
-rw-r--r--spec/frontend/vue_mr_widget/components/states/mr_widget_pipeline_tour_spec.js143
-rw-r--r--spec/frontend/vue_mr_widget/components/states/mr_widget_ready_to_merge_spec.js44
-rw-r--r--spec/frontend/vue_mr_widget/components/states/mr_widget_squash_before_merge_spec.js42
-rw-r--r--spec/frontend/vue_mr_widget/components/states/pipeline_tour_mock_data.js10
6 files changed, 91 insertions, 159 deletions
diff --git a/spec/frontend/vue_mr_widget/components/states/mr_widget_auto_merge_enabled_spec.js b/spec/frontend/vue_mr_widget/components/states/mr_widget_auto_merge_enabled_spec.js
index e2caa6e8092..ae0f605c419 100644
--- a/spec/frontend/vue_mr_widget/components/states/mr_widget_auto_merge_enabled_spec.js
+++ b/spec/frontend/vue_mr_widget/components/states/mr_widget_auto_merge_enabled_spec.js
@@ -8,6 +8,7 @@ import { MWPS_MERGE_STRATEGY } from '~/vue_merge_request_widget/constants';
describe('MRWidgetAutoMergeEnabled', () => {
let vm;
+ let oldWindowGl;
const targetBranchPath = '/foo/bar';
const targetBranch = 'foo';
const sha = '1EA2EZ34';
@@ -16,6 +17,13 @@ describe('MRWidgetAutoMergeEnabled', () => {
const Component = Vue.extend(autoMergeEnabledComponent);
jest.spyOn(eventHub, '$emit').mockImplementation(() => {});
+ oldWindowGl = window.gl;
+ window.gl = {
+ mrWidgetData: {
+ defaultAvatarUrl: 'no_avatar.png',
+ },
+ };
+
vm = mountComponent(Component, {
mr: {
shouldRemoveSourceBranch: false,
@@ -35,6 +43,7 @@ describe('MRWidgetAutoMergeEnabled', () => {
afterEach(() => {
vm.$destroy();
+ window.gl = oldWindowGl;
});
describe('computed', () => {
diff --git a/spec/frontend/vue_mr_widget/components/states/mr_widget_checking_spec.js b/spec/frontend/vue_mr_widget/components/states/mr_widget_checking_spec.js
index 56d55c9afac..afe6bd0e767 100644
--- a/spec/frontend/vue_mr_widget/components/states/mr_widget_checking_spec.js
+++ b/spec/frontend/vue_mr_widget/components/states/mr_widget_checking_spec.js
@@ -25,7 +25,7 @@ describe('MRWidgetChecking', () => {
it('renders information about merging', () => {
expect(vm.$el.querySelector('.media-body').textContent.trim()).toEqual(
- 'Checking ability to merge automatically…',
+ 'Checking if merge request can be merged…',
);
});
});
diff --git a/spec/frontend/vue_mr_widget/components/states/mr_widget_pipeline_tour_spec.js b/spec/frontend/vue_mr_widget/components/states/mr_widget_pipeline_tour_spec.js
deleted file mode 100644
index e8f95e099cc..00000000000
--- a/spec/frontend/vue_mr_widget/components/states/mr_widget_pipeline_tour_spec.js
+++ /dev/null
@@ -1,143 +0,0 @@
-import { shallowMount } from '@vue/test-utils';
-import { GlPopover } from '@gitlab/ui';
-import Cookies from 'js-cookie';
-import { mockTracking, triggerEvent, unmockTracking } from 'helpers/tracking_helper';
-import pipelineTourState from '~/vue_merge_request_widget/components/states/mr_widget_pipeline_tour.vue';
-import { popoverProps, cookieKey } from './pipeline_tour_mock_data';
-
-describe('MRWidgetPipelineTour', () => {
- let wrapper;
-
- afterEach(() => {
- wrapper.destroy();
- });
-
- describe('template', () => {
- describe(`when ${cookieKey} cookie is set`, () => {
- beforeEach(() => {
- Cookies.set(cookieKey, true);
- wrapper = shallowMount(pipelineTourState, {
- propsData: popoverProps,
- });
- });
-
- it('does not render the popover', () => {
- const popover = wrapper.find(GlPopover);
-
- expect(popover.exists()).toBe(false);
- });
-
- describe('tracking', () => {
- let trackingSpy;
-
- beforeEach(() => {
- trackingSpy = mockTracking('_category_', wrapper.element, jest.spyOn);
- });
-
- afterEach(() => {
- unmockTracking();
- });
- it('does not call tracking', () => {
- expect(trackingSpy).not.toHaveBeenCalled();
- });
- });
- });
-
- describe(`when ${cookieKey} cookie is not set`, () => {
- const findOkBtn = () => wrapper.find({ ref: 'ok' });
- const findDismissBtn = () => wrapper.find({ ref: 'no-thanks' });
-
- beforeEach(() => {
- Cookies.remove(cookieKey);
- wrapper = shallowMount(pipelineTourState, {
- propsData: popoverProps,
- });
- });
-
- it('renders the popover', () => {
- const popover = wrapper.find(GlPopover);
-
- expect(popover.exists()).toBe(true);
- });
-
- it('renders the show me how button', () => {
- const button = findOkBtn();
-
- expect(button.exists()).toBe(true);
- expect(button.attributes().category).toBe('primary');
- });
-
- it('renders the dismiss button', () => {
- const button = findDismissBtn();
-
- expect(button.exists()).toBe(true);
- expect(button.attributes().category).toBe('secondary');
- });
-
- it('renders the empty pipelines image', () => {
- const image = wrapper.find('img');
-
- expect(image.exists()).toBe(true);
- expect(image.attributes().src).toBe(popoverProps.pipelineSvgPath);
- });
-
- describe('tracking', () => {
- let trackingSpy;
-
- beforeEach(() => {
- trackingSpy = mockTracking('_category_', wrapper.element, jest.spyOn);
- });
-
- afterEach(() => {
- unmockTracking();
- });
-
- it('send event for basic view of popover', () => {
- document.body.dataset.page = 'projects:merge_requests:show';
-
- wrapper.vm.trackOnShow();
-
- expect(trackingSpy).toHaveBeenCalledWith(undefined, undefined, {
- label: popoverProps.trackLabel,
- property: popoverProps.humanAccess,
- });
- });
-
- it('send an event when ok button is clicked', () => {
- const okBtn = findOkBtn();
- triggerEvent(okBtn.element);
-
- expect(trackingSpy).toHaveBeenCalledWith('_category_', 'click_button', {
- label: popoverProps.trackLabel,
- property: popoverProps.humanAccess,
- value: '10',
- });
- });
-
- it('send an event when dismiss button is clicked', () => {
- const dismissBtn = findDismissBtn();
- triggerEvent(dismissBtn.element);
-
- expect(trackingSpy).toHaveBeenCalledWith('_category_', 'click_button', {
- label: popoverProps.trackLabel,
- property: popoverProps.humanAccess,
- value: '20',
- });
- });
- });
-
- describe('dismissPopover', () => {
- it('updates popoverDismissed', () => {
- const button = findDismissBtn();
- const popover = wrapper.find(GlPopover);
- button.vm.$emit('click');
-
- return wrapper.vm.$nextTick().then(() => {
- expect(Cookies.get(cookieKey)).toBe('true');
- expect(popover.exists()).toBe(false);
- });
- });
- });
- });
- });
-});
diff --git a/spec/frontend/vue_mr_widget/components/states/mr_widget_ready_to_merge_spec.js b/spec/frontend/vue_mr_widget/components/states/mr_widget_ready_to_merge_spec.js
index 1f0d6a7378c..5eb24315ca6 100644
--- a/spec/frontend/vue_mr_widget/components/states/mr_widget_ready_to_merge_spec.js
+++ b/spec/frontend/vue_mr_widget/components/states/mr_widget_ready_to_merge_spec.js
@@ -34,6 +34,9 @@ const createTestMr = customConfig => {
ciStatus: null,
sha: '12345678',
squash: false,
+ squashIsEnabledByDefault: false,
+ squashIsReadonly: false,
+ squashIsSelected: false,
commitMessage,
squashCommitMessage,
commitMessageWithDescription,
@@ -694,6 +697,37 @@ describe('ReadyToMerge', () => {
expect(findCheckboxElement().exists()).toBeFalsy();
});
+
+ describe('squash options', () => {
+ it.each`
+ squashState | state | prop | expectation
+ ${'squashIsReadonly'} | ${'enabled'} | ${'isDisabled'} | ${false}
+ ${'squashIsSelected'} | ${'selected'} | ${'value'} | ${false}
+ ${'squashIsSelected'} | ${'unselected'} | ${'value'} | ${false}
+ `(
+ 'is $state when squashIsReadonly returns $expectation ',
+ ({ squashState, prop, expectation }) => {
+ createLocalComponent({
+ mr: { commitsCount: 2, enableSquashBeforeMerge: true, [squashState]: expectation },
+ });
+
+ expect(findCheckboxElement().props(prop)).toBe(expectation);
+ },
+ );
+
+ it('is not rendered for "Do not allow" option', () => {
+ createLocalComponent({
+ mr: {
+ commitsCount: 2,
+ enableSquashBeforeMerge: true,
+ squashIsReadonly: true,
+ squashIsSelected: false,
+ },
+ });
+
+ expect(findCheckboxElement().exists()).toBe(false);
+ });
+ });
});
describe('commits count collapsible header', () => {
@@ -709,7 +743,7 @@ describe('ReadyToMerge', () => {
mr: {
ffOnlyEnabled: true,
enableSquashBeforeMerge: true,
- squash: true,
+ squashIsSelected: true,
commitsCount: 2,
},
});
@@ -803,7 +837,7 @@ describe('ReadyToMerge', () => {
createLocalComponent({
mr: {
ffOnlyEnabled: true,
- squash: true,
+ squashIsSelected: true,
enableSquashBeforeMerge: true,
commitsCount: 2,
},
@@ -824,7 +858,7 @@ describe('ReadyToMerge', () => {
createLocalComponent({
mr: {
commitsCount: 2,
- squash: true,
+ squashIsSelected: true,
enableSquashBeforeMerge: true,
},
});
@@ -854,7 +888,7 @@ describe('ReadyToMerge', () => {
createLocalComponent({
mr: {
commitsCount: 2,
- squash: true,
+ squashIsSelected: true,
enableSquashBeforeMerge: true,
},
});
@@ -872,7 +906,7 @@ describe('ReadyToMerge', () => {
it('should be rendered if squash is enabled and there is more than 1 commit', () => {
createLocalComponent({
- mr: { enableSquashBeforeMerge: true, squash: true, commitsCount: 2 },
+ mr: { enableSquashBeforeMerge: true, squashIsSelected: true, commitsCount: 2 },
});
expect(findCommitDropdownElement().exists()).toBeTruthy();
diff --git a/spec/frontend/vue_mr_widget/components/states/mr_widget_squash_before_merge_spec.js b/spec/frontend/vue_mr_widget/components/states/mr_widget_squash_before_merge_spec.js
index b70d580ed04..1542b0939aa 100644
--- a/spec/frontend/vue_mr_widget/components/states/mr_widget_squash_before_merge_spec.js
+++ b/spec/frontend/vue_mr_widget/components/states/mr_widget_squash_before_merge_spec.js
@@ -19,6 +19,8 @@ describe('Squash before merge component', () => {
wrapper.destroy();
});
+ const findLabel = () => wrapper.find('[data-testid="squashLabel"]');
+
describe('checkbox', () => {
const findCheckbox = () => wrapper.find('.js-squash-checkbox');
@@ -63,6 +65,46 @@ describe('Squash before merge component', () => {
});
});
+ describe('label', () => {
+ describe.each`
+ isDisabled | expectation
+ ${true} | ${'grays out text if it is true'}
+ ${false} | ${'does not gray out text if it is false'}
+ `('isDisabled prop', ({ isDisabled, expectation }) => {
+ beforeEach(() => {
+ createComponent({
+ value: false,
+ isDisabled,
+ });
+ });
+
+ it(expectation, () => {
+ expect(findLabel().classes('gl-text-gray-600')).toBe(isDisabled);
+ });
+ });
+ });
+
+ describe('tooltip', () => {
+ const tooltipTitle = () => findLabel().element.dataset.title;
+
+ it('does not render when isDisabled is false', () => {
+ createComponent({
+ value: true,
+ isDisabled: false,
+ });
+ expect(tooltipTitle()).toBeUndefined();
+ });
+
+ it('display message when when isDisabled is true', () => {
+ createComponent({
+ value: true,
+ isDisabled: true,
+ });
+
+ expect(tooltipTitle()).toBe('Required in this project.');
+ });
+ });
+
describe('about link', () => {
it('is not rendered if no help path is passed', () => {
createComponent({
diff --git a/spec/frontend/vue_mr_widget/components/states/pipeline_tour_mock_data.js b/spec/frontend/vue_mr_widget/components/states/pipeline_tour_mock_data.js
deleted file mode 100644
index 39bc89e459c..00000000000
--- a/spec/frontend/vue_mr_widget/components/states/pipeline_tour_mock_data.js
+++ /dev/null
@@ -1,10 +0,0 @@
-export const popoverProps = {
- pipelinePath: '/foo/bar/add/pipeline/path',
- pipelineSvgPath: 'assets/illustrations/something.svg',
- humanAccess: 'maintainer',
- popoverTarget: 'suggest-popover',
- popoverContainer: 'suggest-pipeline',
- trackLabel: 'some_tracking_label',
-};
-
-export const cookieKey = 'suggest_pipeline_dismissed';