diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-11-18 16:16:36 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-11-18 16:16:36 +0300 |
commit | 311b0269b4eb9839fa63f80c8d7a58f32b8138a0 (patch) | |
tree | 07e7870bca8aed6d61fdcc810731c50d2c40af47 /spec/frontend/vue_mr_widget | |
parent | 27909cef6c4170ed9205afa7426b8d3de47cbb0c (diff) |
Add latest changes from gitlab-org/gitlab@14-5-stable-eev14.5.0-rc42
Diffstat (limited to 'spec/frontend/vue_mr_widget')
19 files changed, 131 insertions, 72 deletions
diff --git a/spec/frontend/vue_mr_widget/components/approvals/approvals_summary_spec.js b/spec/frontend/vue_mr_widget/components/approvals/approvals_summary_spec.js index c9dea4394f9..c2606346292 100644 --- a/spec/frontend/vue_mr_widget/components/approvals/approvals_summary_spec.js +++ b/spec/frontend/vue_mr_widget/components/approvals/approvals_summary_spec.js @@ -1,14 +1,20 @@ import { shallowMount } from '@vue/test-utils'; import { toNounSeriesText } from '~/lib/utils/grammar'; import ApprovalsSummary from '~/vue_merge_request_widget/components/approvals/approvals_summary.vue'; -import { APPROVED_MESSAGE } from '~/vue_merge_request_widget/components/approvals/messages'; +import { + APPROVED_BY_OTHERS, + APPROVED_BY_YOU, + APPROVED_BY_YOU_AND_OTHERS, +} from '~/vue_merge_request_widget/components/approvals/messages'; import UserAvatarList from '~/vue_shared/components/user_avatar/user_avatar_list.vue'; +const exampleUserId = 1; const testApprovers = () => Array.from({ length: 5 }, (_, i) => i).map((id) => ({ id })); const testRulesLeft = () => ['Lorem', 'Ipsum', 'dolar & sit']; const TEST_APPROVALS_LEFT = 3; describe('MRWidget approvals summary', () => { + const originalUserId = gon.current_user_id; let wrapper; const createComponent = (props = {}) => { @@ -28,6 +34,7 @@ describe('MRWidget approvals summary', () => { afterEach(() => { wrapper.destroy(); wrapper = null; + gon.current_user_id = originalUserId; }); describe('when approved', () => { @@ -38,7 +45,7 @@ describe('MRWidget approvals summary', () => { }); it('shows approved message', () => { - expect(wrapper.text()).toContain(APPROVED_MESSAGE); + expect(wrapper.text()).toContain(APPROVED_BY_OTHERS); }); it('renders avatar list for approvers', () => { @@ -51,6 +58,48 @@ describe('MRWidget approvals summary', () => { }), ); }); + + describe('by the current user', () => { + beforeEach(() => { + gon.current_user_id = exampleUserId; + createComponent({ + approvers: [{ id: exampleUserId }], + approved: true, + }); + }); + + it('shows "Approved by you" message', () => { + expect(wrapper.text()).toContain(APPROVED_BY_YOU); + }); + }); + + describe('by the current user and others', () => { + beforeEach(() => { + gon.current_user_id = exampleUserId; + createComponent({ + approvers: [{ id: exampleUserId }, { id: exampleUserId + 1 }], + approved: true, + }); + }); + + it('shows "Approved by you and others" message', () => { + expect(wrapper.text()).toContain(APPROVED_BY_YOU_AND_OTHERS); + }); + }); + + describe('by other users than the current user', () => { + beforeEach(() => { + gon.current_user_id = exampleUserId; + createComponent({ + approvers: [{ id: exampleUserId + 1 }], + approved: true, + }); + }); + + it('shows "Approved by others" message', () => { + expect(wrapper.text()).toContain(APPROVED_BY_OTHERS); + }); + }); }); describe('when not approved', () => { diff --git a/spec/frontend/vue_mr_widget/components/extensions/actions_spec.js b/spec/frontend/vue_mr_widget/components/extensions/actions_spec.js index d5d779d7a34..a13db2f4d72 100644 --- a/spec/frontend/vue_mr_widget/components/extensions/actions_spec.js +++ b/spec/frontend/vue_mr_widget/components/extensions/actions_spec.js @@ -24,6 +24,18 @@ describe('MR widget extension actions', () => { expect(wrapper.findAllComponents(GlButton)).toHaveLength(1); }); + it('calls action click handler', async () => { + const onClick = jest.fn(); + + factory({ + tertiaryButtons: [{ text: 'hello world', onClick }], + }); + + await wrapper.findComponent(GlButton).vm.$emit('click'); + + expect(onClick).toHaveBeenCalled(); + }); + it('renders tertiary actions in dropdown', () => { factory({ tertiaryButtons: [{ text: 'hello world', href: 'https://gitlab.com', target: '_blank' }], diff --git a/spec/frontend/vue_mr_widget/components/mr_widget_pipeline_spec.js b/spec/frontend/vue_mr_widget/components/mr_widget_pipeline_spec.js index ecaca16a2cd..6347e3c3be3 100644 --- a/spec/frontend/vue_mr_widget/components/mr_widget_pipeline_spec.js +++ b/spec/frontend/vue_mr_widget/components/mr_widget_pipeline_spec.js @@ -1,5 +1,7 @@ import { GlLoadingIcon } from '@gitlab/ui'; import { shallowMount, mount } from '@vue/test-utils'; +import axios from 'axios'; +import MockAdapter from 'axios-mock-adapter'; import { trimText } from 'helpers/text_helper'; import { extendedWrapper } from 'helpers/vue_test_utils_helper'; import PipelineMiniGraph from '~/pipelines/components/pipelines_list/pipeline_mini_graph.vue'; @@ -39,6 +41,8 @@ describe('MRWidgetPipeline', () => { const findMonitoringPipelineMessage = () => wrapper.findByTestId('monitoring-pipeline-message'); const findLoadingIcon = () => wrapper.findComponent(GlLoadingIcon); + const mockArtifactsRequest = () => new MockAdapter(axios).onGet().reply(200, []); + const createWrapper = (props = {}, mountFn = shallowMount) => { wrapper = extendedWrapper( mountFn(PipelineComponent, { @@ -71,6 +75,8 @@ describe('MRWidgetPipeline', () => { describe('with a pipeline', () => { beforeEach(() => { + mockArtifactsRequest(); + createWrapper( { pipelineCoverageDelta: mockData.pipelineCoverageDelta, diff --git a/spec/frontend/vue_mr_widget/components/mr_widget_suggest_pipeline_spec.js b/spec/frontend/vue_mr_widget/components/mr_widget_suggest_pipeline_spec.js index b5afc1ab21a..8e710b6d65f 100644 --- a/spec/frontend/vue_mr_widget/components/mr_widget_suggest_pipeline_spec.js +++ b/spec/frontend/vue_mr_widget/components/mr_widget_suggest_pipeline_spec.js @@ -1,4 +1,4 @@ -import { GlLink, GlSprintf } from '@gitlab/ui'; +import { GlSprintf } from '@gitlab/ui'; import { mount, shallowMount } from '@vue/test-utils'; import MockAdapter from 'axios-mock-adapter'; import { mockTracking, triggerEvent, unmockTracking } from 'helpers/tracking_helper'; @@ -7,9 +7,7 @@ import MrWidgetIcon from '~/vue_merge_request_widget/components/mr_widget_icon.v import suggestPipelineComponent from '~/vue_merge_request_widget/components/mr_widget_suggest_pipeline.vue'; import { SP_TRACK_LABEL, - SP_LINK_TRACK_EVENT, SP_SHOW_TRACK_EVENT, - SP_LINK_TRACK_VALUE, SP_SHOW_TRACK_VALUE, SP_HELP_URL, } from '~/vue_merge_request_widget/constants'; @@ -52,15 +50,8 @@ describe('MRWidgetSuggestPipeline', () => { mockAxios.restore(); }); - it('renders add pipeline file link', () => { - const link = wrapper.find(GlLink); - - expect(link.exists()).toBe(true); - expect(link.attributes().href).toBe(suggestProps.pipelinePath); - }); - it('renders the expected text', () => { - const messageText = /\s*No pipeline\s*Add the .gitlab-ci.yml file\s*to create one./; + const messageText = /Looks like there's no pipeline here./; expect(wrapper.text()).toMatch(messageText); }); @@ -109,18 +100,6 @@ describe('MRWidgetSuggestPipeline', () => { }); }); - it('send an event when add pipeline link is clicked', () => { - mockTrackingOnWrapper(); - const link = wrapper.find('[data-testid="add-pipeline-link"]'); - triggerEvent(link.element); - - expect(trackingSpy).toHaveBeenCalledWith('_category_', SP_LINK_TRACK_EVENT, { - label: SP_TRACK_LABEL, - property: suggestProps.humanAccess, - value: SP_LINK_TRACK_VALUE.toString(), - }); - }); - it('send an event when ok button is clicked', () => { mockTrackingOnWrapper(); const okBtn = findOkBtn(); diff --git a/spec/frontend/vue_mr_widget/components/states/__snapshots__/mr_widget_auto_merge_enabled_spec.js.snap b/spec/frontend/vue_mr_widget/components/states/__snapshots__/mr_widget_auto_merge_enabled_spec.js.snap index 5981d2d7849..56a0218b374 100644 --- a/spec/frontend/vue_mr_widget/components/states/__snapshots__/mr_widget_auto_merge_enabled_spec.js.snap +++ b/spec/frontend/vue_mr_widget/components/states/__snapshots__/mr_widget_auto_merge_enabled_spec.js.snap @@ -50,7 +50,7 @@ exports[`MRWidgetAutoMergeEnabled when graphql is disabled template should have <span class="gl-mr-3" > - The source branch will not be deleted + Does not delete the source branch </span> <gl-button-stub @@ -122,7 +122,7 @@ exports[`MRWidgetAutoMergeEnabled when graphql is enabled template should have c <span class="gl-mr-3" > - The source branch will not be deleted + Does not delete the source branch </span> <gl-button-stub diff --git a/spec/frontend/vue_mr_widget/components/states/__snapshots__/new_ready_to_merge_spec.js.snap b/spec/frontend/vue_mr_widget/components/states/__snapshots__/new_ready_to_merge_spec.js.snap index a6c36764c41..f9936f22ea3 100644 --- a/spec/frontend/vue_mr_widget/components/states/__snapshots__/new_ready_to_merge_spec.js.snap +++ b/spec/frontend/vue_mr_widget/components/states/__snapshots__/new_ready_to_merge_spec.js.snap @@ -9,7 +9,7 @@ exports[`New ready to merge state component renders permission text if canMerge /> <p - class="media-body gl-m-0! gl-font-weight-bold" + class="media-body gl-m-0! gl-font-weight-bold gl-text-gray-900!" > Ready to merge by members who can write to the target branch. @@ -27,7 +27,7 @@ exports[`New ready to merge state component renders permission text if canMerge /> <p - class="media-body gl-m-0! gl-font-weight-bold" + class="media-body gl-m-0! gl-font-weight-bold gl-text-gray-900!" > Ready to merge! diff --git a/spec/frontend/vue_mr_widget/components/states/commit_edit_spec.js b/spec/frontend/vue_mr_widget/components/states/commit_edit_spec.js index 8214cedc4a1..f965fc32dc1 100644 --- a/spec/frontend/vue_mr_widget/components/states/commit_edit_spec.js +++ b/spec/frontend/vue_mr_widget/components/states/commit_edit_spec.js @@ -3,6 +3,7 @@ import CommitEdit from '~/vue_merge_request_widget/components/states/commit_edit const testCommitMessage = 'Test commit message'; const testLabel = 'Test label'; +const testTextMuted = 'Test text muted'; const testInputId = 'test-input-id'; describe('Commits edit component', () => { @@ -63,7 +64,7 @@ describe('Commits edit component', () => { beforeEach(() => { createComponent({ header: `<div class="test-header">${testCommitMessage}</div>`, - checkbox: `<label class="test-checkbox">${testLabel}</label >`, + 'text-muted': `<p class="test-text-muted">${testTextMuted}</p>`, }); }); @@ -74,11 +75,11 @@ describe('Commits edit component', () => { expect(headerSlotElement.text()).toBe(testCommitMessage); }); - it('renders checkbox slot correctly', () => { - const checkboxSlotElement = wrapper.find('.test-checkbox'); + it('renders text-muted slot correctly', () => { + const textMutedElement = wrapper.find('.test-text-muted'); - expect(checkboxSlotElement.exists()).toBe(true); - expect(checkboxSlotElement.text()).toBe(testLabel); + expect(textMutedElement.exists()).toBe(true); + expect(textMutedElement.text()).toBe(testTextMuted); }); }); }); 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 4c1534574f5..d0a6af9970e 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 @@ -270,8 +270,8 @@ describe('MRWidgetAutoMergeEnabled', () => { const normalizedText = wrapper.text().replace(/\s+/g, ' '); - expect(normalizedText).toContain('The source branch will be deleted'); - expect(normalizedText).not.toContain('The source branch will not be deleted'); + expect(normalizedText).toContain('Deletes the source branch'); + expect(normalizedText).not.toContain('Does not delete the source branch'); }); it('should not show delete source branch button when user not able to delete source branch', () => { diff --git a/spec/frontend/vue_mr_widget/components/states/mr_widget_commits_header_spec.js b/spec/frontend/vue_mr_widget/components/states/mr_widget_commits_header_spec.js index 2ff94a547f4..5858654e518 100644 --- a/spec/frontend/vue_mr_widget/components/states/mr_widget_commits_header_spec.js +++ b/spec/frontend/vue_mr_widget/components/states/mr_widget_commits_header_spec.js @@ -1,4 +1,4 @@ -import { shallowMount } from '@vue/test-utils'; +import { mount } from '@vue/test-utils'; import { GlSprintf } from '@gitlab/ui'; import CommitsHeader from '~/vue_merge_request_widget/components/states/commits_header.vue'; @@ -6,7 +6,7 @@ describe('Commits header component', () => { let wrapper; const createComponent = (props) => { - wrapper = shallowMount(CommitsHeader, { + wrapper = mount(CommitsHeader, { stubs: { GlSprintf, }, diff --git a/spec/frontend/vue_mr_widget/components/states/mr_widget_merged_spec.js b/spec/frontend/vue_mr_widget/components/states/mr_widget_merged_spec.js index 9c3a6d581e8..e0f1f091129 100644 --- a/spec/frontend/vue_mr_widget/components/states/mr_widget_merged_spec.js +++ b/spec/frontend/vue_mr_widget/components/states/mr_widget_merged_spec.js @@ -191,7 +191,7 @@ describe('MRWidgetMerged', () => { }); it('shows button to copy commit SHA to clipboard', () => { - expect(selectors.copyMergeShaButton).toExist(); + expect(selectors.copyMergeShaButton).not.toBe(null); expect(selectors.copyMergeShaButton.getAttribute('data-clipboard-text')).toBe( vm.mr.mergeCommitSha, ); @@ -201,14 +201,14 @@ describe('MRWidgetMerged', () => { vm.mr.mergeCommitSha = null; Vue.nextTick(() => { - expect(selectors.copyMergeShaButton).not.toExist(); + expect(selectors.copyMergeShaButton).toBe(null); expect(vm.$el.querySelector('.mr-info-list').innerText).not.toContain('with'); done(); }); }); it('shows merge commit SHA link', () => { - expect(selectors.mergeCommitShaLink).toExist(); + expect(selectors.mergeCommitShaLink).not.toBe(null); expect(selectors.mergeCommitShaLink.text).toContain(vm.mr.shortMergeCommitSha); expect(selectors.mergeCommitShaLink.href).toBe(vm.mr.mergeCommitPath); }); diff --git a/spec/frontend/vue_mr_widget/components/states/mr_widget_merging_spec.js b/spec/frontend/vue_mr_widget/components/states/mr_widget_merging_spec.js index b6c16958993..e6b2e9fa176 100644 --- a/spec/frontend/vue_mr_widget/components/states/mr_widget_merging_spec.js +++ b/spec/frontend/vue_mr_widget/components/states/mr_widget_merging_spec.js @@ -42,7 +42,7 @@ describe('MRWidgetMerging', () => { .trim() .replace(/\s\s+/g, ' ') .replace(/[\r\n]+/g, ' '), - ).toEqual('The changes will be merged into branch'); + ).toEqual('Merges changes into branch'); expect(wrapper.find('a').attributes('href')).toBe('/branch-path'); }); 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 f0fbb1d5851..016b6b2220b 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 @@ -269,19 +269,6 @@ describe('ReadyToMerge', () => { }); describe('methods', () => { - describe('updateMergeCommitMessage', () => { - it('should revert flag and change commitMessage', () => { - createComponent(); - - wrapper.vm.updateMergeCommitMessage(true); - - expect(wrapper.vm.commitMessage).toEqual(commitMessageWithDescription); - wrapper.vm.updateMergeCommitMessage(false); - - expect(wrapper.vm.commitMessage).toEqual(commitMessage); - }); - }); - describe('handleMergeButtonClick', () => { const returnPromise = (status) => new Promise((resolve) => { 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 8ead0002950..6abdbd11f5e 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 @@ -1,4 +1,4 @@ -import { GlFormCheckbox } from '@gitlab/ui'; +import { GlFormCheckbox, GlLink } from '@gitlab/ui'; import { createLocalVue, shallowMount } from '@vue/test-utils'; import SquashBeforeMerge from '~/vue_merge_request_widget/components/states/squash_before_merge.vue'; import { SQUASH_BEFORE_MERGE } from '~/vue_merge_request_widget/i18n'; @@ -77,7 +77,7 @@ describe('Squash before merge component', () => { value: false, }); - const aboutLink = wrapper.find('a'); + const aboutLink = wrapper.findComponent(GlLink); expect(aboutLink.exists()).toBe(false); }); @@ -88,7 +88,7 @@ describe('Squash before merge component', () => { helpPath: 'test-path', }); - const aboutLink = wrapper.find('a'); + const aboutLink = wrapper.findComponent(GlLink); expect(aboutLink.exists()).toBe(true); }); @@ -99,7 +99,7 @@ describe('Squash before merge component', () => { helpPath: 'test-path', }); - const aboutLink = wrapper.find('a'); + const aboutLink = wrapper.findComponent(GlLink); expect(aboutLink.attributes('href')).toEqual('test-path'); }); diff --git a/spec/frontend/vue_mr_widget/components/states/mr_widget_wip_spec.js b/spec/frontend/vue_mr_widget/components/states/mr_widget_wip_spec.js index be15e4df66d..0fb0d5b0b68 100644 --- a/spec/frontend/vue_mr_widget/components/states/mr_widget_wip_spec.js +++ b/spec/frontend/vue_mr_widget/components/states/mr_widget_wip_spec.js @@ -46,7 +46,7 @@ describe('Wip', () => { is_new_mr_data: true, }; - describe('handleRemoveWIP', () => { + describe('handleRemoveDraft', () => { it('should make a request to service and handle response', (done) => { const vm = createComponent(); @@ -59,7 +59,7 @@ describe('Wip', () => { }), ); - vm.handleRemoveWIP(); + vm.handleRemoveDraft(); setImmediate(() => { expect(vm.isMakingRequest).toBeTruthy(); expect(eventHub.$emit).toHaveBeenCalledWith('UpdateWidgetData', mrObj); @@ -84,7 +84,7 @@ describe('Wip', () => { expect(el.innerText).toContain('This merge request is still a draft.'); expect(el.querySelector('button').getAttribute('disabled')).toBeTruthy(); expect(el.querySelector('button').innerText).toContain('Merge'); - expect(el.querySelector('.js-remove-wip').innerText.replace(/\s\s+/g, ' ')).toContain( + expect(el.querySelector('.js-remove-draft').innerText.replace(/\s\s+/g, ' ')).toContain( 'Mark as ready', ); }); @@ -93,7 +93,7 @@ describe('Wip', () => { vm.mr.removeWIPPath = ''; Vue.nextTick(() => { - expect(el.querySelector('.js-remove-wip')).toEqual(null); + expect(el.querySelector('.js-remove-draft')).toEqual(null); done(); }); }); diff --git a/spec/frontend/vue_mr_widget/mock_data.js b/spec/frontend/vue_mr_widget/mock_data.js index 34a741cf8f2..f0c1da346a1 100644 --- a/spec/frontend/vue_mr_widget/mock_data.js +++ b/spec/frontend/vue_mr_widget/mock_data.js @@ -51,7 +51,7 @@ export default { target_branch: 'main', target_project_id: 19, target_project_full_path: '/group2/project2', - merge_request_add_ci_config_path: '/group2/project2/new/pipeline', + merge_request_add_ci_config_path: '/root/group2/project2/-/ci/editor', is_dismissed_suggest_pipeline: false, user_callouts_path: 'some/callout/path', suggest_pipeline_feature_id: 'suggest_pipeline', diff --git a/spec/frontend/vue_mr_widget/mr_widget_options_spec.js b/spec/frontend/vue_mr_widget/mr_widget_options_spec.js index 5aba6982886..550f156d095 100644 --- a/spec/frontend/vue_mr_widget/mr_widget_options_spec.js +++ b/spec/frontend/vue_mr_widget/mr_widget_options_spec.js @@ -1,4 +1,4 @@ -import { GlBadge, GlLink, GlIcon } from '@gitlab/ui'; +import { GlBadge, GlLink, GlIcon, GlButton, GlDropdown } from '@gitlab/ui'; import { mount } from '@vue/test-utils'; import MockAdapter from 'axios-mock-adapter'; import Vue, { nextTick } from 'vue'; @@ -6,6 +6,7 @@ import VueApollo from 'vue-apollo'; import createMockApollo from 'helpers/mock_apollo_helper'; import waitForPromises from 'helpers/wait_for_promises'; import { securityReportMergeRequestDownloadPathsQueryResponse } from 'jest/vue_shared/security_reports/mock_data'; +import api from '~/api'; import axios from '~/lib/utils/axios_utils'; import { setFaviconOverlay } from '~/lib/utils/favicon'; import notify from '~/lib/utils/notify'; @@ -23,6 +24,8 @@ import { faviconDataUrl, overlayDataUrl } from '../lib/utils/mock_data'; import mockData from './mock_data'; import testExtension from './test_extension'; +jest.mock('~/api.js'); + jest.mock('~/smart_interval'); jest.mock('~/lib/utils/favicon'); @@ -540,7 +543,7 @@ describe('MrWidgetOptions', () => { nextTick(() => { const tooltip = wrapper.find('[data-testid="question-o-icon"]'); - expect(wrapper.text()).toContain('The source branch will be deleted'); + expect(wrapper.text()).toContain('Deletes the source branch'); expect(tooltip.attributes('title')).toBe( 'A user with write access to the source branch selected this option', ); @@ -556,7 +559,7 @@ describe('MrWidgetOptions', () => { nextTick(() => { expect(wrapper.text()).toContain('The source branch has been deleted'); - expect(wrapper.text()).not.toContain('The source branch will be deleted'); + expect(wrapper.text()).not.toContain('Deletes the source branch'); done(); }); @@ -904,6 +907,18 @@ describe('MrWidgetOptions', () => { expect(wrapper.text()).toContain('Test extension summary count: 1'); }); + it('triggers trackRedisHllUserEvent API call', async () => { + await waitForPromises(); + + wrapper + .find('[data-testid="widget-extension"] [data-testid="toggle-button"]') + .trigger('click'); + + await Vue.nextTick(); + + expect(api.trackRedisHllUserEvent).toHaveBeenCalledWith('test_expand_event'); + }); + it('renders full data', async () => { await waitForPromises(); @@ -913,6 +928,10 @@ describe('MrWidgetOptions', () => { await Vue.nextTick(); + expect( + wrapper.find('[data-testid="widget-extension-top-level"]').find(GlDropdown).exists(), + ).toBe(false); + const collapsedSection = wrapper.find('[data-testid="widget-extension-collapsed-section"]'); expect(collapsedSection.exists()).toBe(true); expect(collapsedSection.text()).toContain('Hello world'); @@ -928,6 +947,9 @@ describe('MrWidgetOptions', () => { // Renders a link in the row expect(collapsedSection.find(GlLink).exists()).toBe(true); expect(collapsedSection.find(GlLink).text()).toBe('GitLab.com'); + + expect(collapsedSection.find(GlButton).exists()).toBe(true); + expect(collapsedSection.find(GlButton).text()).toBe('Full report'); }); }); }); diff --git a/spec/frontend/vue_mr_widget/stores/get_state_key_spec.js b/spec/frontend/vue_mr_widget/stores/get_state_key_spec.js index 631d4647b17..fc760f5c5be 100644 --- a/spec/frontend/vue_mr_widget/stores/get_state_key_spec.js +++ b/spec/frontend/vue_mr_widget/stores/get_state_key_spec.js @@ -15,7 +15,7 @@ describe('getStateKey', () => { branchMissing: false, commitsCount: 2, hasConflicts: false, - workInProgress: false, + draft: false, }; const bound = getStateKey.bind(context); @@ -49,9 +49,9 @@ describe('getStateKey', () => { expect(bound()).toEqual('unresolvedDiscussions'); - context.workInProgress = true; + context.draft = true; - expect(bound()).toEqual('workInProgress'); + expect(bound()).toEqual('draft'); context.onlyAllowMergeIfPipelineSucceeds = true; context.isPipelineFailed = true; @@ -74,6 +74,7 @@ describe('getStateKey', () => { expect(bound()).toEqual('nothingToMerge'); + context.commitsCount = 1; context.branchMissing = true; expect(bound()).toEqual('missingBranch'); @@ -98,7 +99,7 @@ describe('getStateKey', () => { branchMissing: false, commitsCount: 2, hasConflicts: false, - workInProgress: false, + draft: false, }; const bound = getStateKey.bind(context); diff --git a/spec/frontend/vue_mr_widget/stores/mr_widget_store_spec.js b/spec/frontend/vue_mr_widget/stores/mr_widget_store_spec.js index febcfcd4019..6eb68a1b00d 100644 --- a/spec/frontend/vue_mr_widget/stores/mr_widget_store_spec.js +++ b/spec/frontend/vue_mr_widget/stores/mr_widget_store_spec.js @@ -129,7 +129,7 @@ describe('MergeRequestStore', () => { it('should set the add ci config path', () => { store.setPaths({ ...mockData }); - expect(store.mergeRequestAddCiConfigPath).toBe('/group2/project2/new/pipeline'); + expect(store.mergeRequestAddCiConfigPath).toBe('/root/group2/project2/-/ci/editor'); }); it('should set humanAccess=Maintainer when user has that role', () => { diff --git a/spec/frontend/vue_mr_widget/test_extension.js b/spec/frontend/vue_mr_widget/test_extension.js index a29a4d2fb46..65c1bd8473b 100644 --- a/spec/frontend/vue_mr_widget/test_extension.js +++ b/spec/frontend/vue_mr_widget/test_extension.js @@ -3,6 +3,7 @@ import { EXTENSION_ICONS } from '~/vue_merge_request_widget/constants'; export default { name: 'WidgetTestExtension', props: ['targetProjectFullPath'], + expandEvent: 'test_expand_event', computed: { summary({ count, targetProjectFullPath }) { return `Test extension summary count: ${count} & ${targetProjectFullPath}`; @@ -30,6 +31,7 @@ export default { href: 'https://gitlab.com', text: 'GitLab.com', }, + actions: [{ text: 'Full report', href: 'https://gitlab.com', target: '_blank' }], }, ]); }, |