diff options
Diffstat (limited to 'spec/frontend/vue_mr_widget/components/states')
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'; |