diff options
Diffstat (limited to 'spec/javascripts/vue_mr_widget')
24 files changed, 300 insertions, 209 deletions
diff --git a/spec/javascripts/vue_mr_widget/components/deployment_spec.js b/spec/javascripts/vue_mr_widget/components/deployment_spec.js index 97e6ce44348..5fda39ae775 100644 --- a/spec/javascripts/vue_mr_widget/components/deployment_spec.js +++ b/spec/javascripts/vue_mr_widget/components/deployment_spec.js @@ -102,19 +102,20 @@ describe('Deployment component', () => { describe('methods', () => { describe('stopEnvironment', () => { const url = '/foo/bar'; - const returnPromise = () => new Promise((resolve) => { - resolve({ - data: { - redirect_url: url, - }, + const returnPromise = () => + new Promise(resolve => { + resolve({ + data: { + redirect_url: url, + }, + }); }); - }); const mockStopEnvironment = () => { vm.stopEnvironment(deploymentMockData); return vm; }; - it('should show a confirm dialog and call service.stopEnvironment when confirmed', (done) => { + it('should show a confirm dialog and call service.stopEnvironment when confirmed', done => { spyOn(window, 'confirm').and.returnValue(true); spyOn(MRWidgetService, 'stopEnvironment').and.returnValue(returnPromise(true)); const visitUrl = spyOnDependency(deploymentComponent, 'visitUrl').and.returnValue(true); @@ -148,12 +149,16 @@ describe('Deployment component', () => { }); it('renders deployment name', () => { - expect(el.querySelector('.js-deploy-meta').getAttribute('href')).toEqual(deploymentMockData.url); + expect(el.querySelector('.js-deploy-meta').getAttribute('href')).toEqual( + deploymentMockData.url, + ); expect(el.querySelector('.js-deploy-meta').innerText).toContain(deploymentMockData.name); }); it('renders external URL', () => { - expect(el.querySelector('.js-deploy-url').getAttribute('href')).toEqual(deploymentMockData.external_url); + expect(el.querySelector('.js-deploy-url').getAttribute('href')).toEqual( + deploymentMockData.external_url, + ); expect(el.querySelector('.js-deploy-url').innerText).toContain('View app'); }); diff --git a/spec/javascripts/vue_mr_widget/components/mr_widget_author_spec.js b/spec/javascripts/vue_mr_widget/components/mr_widget_author_spec.js index 00f4f2d7c39..b69082082ba 100644 --- a/spec/javascripts/vue_mr_widget/components/mr_widget_author_spec.js +++ b/spec/javascripts/vue_mr_widget/components/mr_widget_author_spec.js @@ -13,9 +13,9 @@ describe('MrWidgetAuthor', () => { name: 'Administrator', username: 'root', webUrl: 'http://localhost:3000/root', - avatarUrl: 'http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon', + avatarUrl: + 'http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon', }, - }); }); @@ -28,9 +28,9 @@ describe('MrWidgetAuthor', () => { }); it('renders image with avatar url', () => { - expect( - vm.$el.querySelector('img').getAttribute('src'), - ).toEqual('http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon'); + expect(vm.$el.querySelector('img').getAttribute('src')).toEqual( + 'http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon', + ); }); it('renders author name', () => { diff --git a/spec/javascripts/vue_mr_widget/components/mr_widget_author_time_spec.js b/spec/javascripts/vue_mr_widget/components/mr_widget_author_time_spec.js index 10143402acf..818d831e706 100644 --- a/spec/javascripts/vue_mr_widget/components/mr_widget_author_time_spec.js +++ b/spec/javascripts/vue_mr_widget/components/mr_widget_author_time_spec.js @@ -14,7 +14,8 @@ describe('MrWidgetAuthorTime', () => { name: 'Administrator', username: 'root', webUrl: 'http://localhost:3000/root', - avatarUrl: 'http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon', + avatarUrl: + 'http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon', }, dateTitle: '2017-03-23T23:02:00.807Z', dateReadable: '12 hours ago', @@ -34,7 +35,9 @@ describe('MrWidgetAuthorTime', () => { }); it('renders provided time', () => { - expect(vm.$el.querySelector('time').getAttribute('data-original-title')).toEqual('2017-03-23T23:02:00.807Z'); + expect(vm.$el.querySelector('time').getAttribute('data-original-title')).toEqual( + '2017-03-23T23:02:00.807Z', + ); expect(vm.$el.querySelector('time').textContent.trim()).toEqual('12 hours ago'); }); }); diff --git a/spec/javascripts/vue_mr_widget/components/mr_widget_header_spec.js b/spec/javascripts/vue_mr_widget/components/mr_widget_header_spec.js index a97458ffc92..15c92dffe9c 100644 --- a/spec/javascripts/vue_mr_widget/components/mr_widget_header_spec.js +++ b/spec/javascripts/vue_mr_widget/components/mr_widget_header_spec.js @@ -59,7 +59,9 @@ describe('MRWidgetHeader', () => { }, }); - expect(vm.commitsBehindText).toEqual('The source branch is <a href="/foo/bar/master">1 commit behind</a> the target branch'); + expect(vm.commitsBehindText).toEqual( + 'The source branch is <a href="/foo/bar/master">1 commit behind</a> the target branch', + ); }); it('returns plural when there is more than one commit', () => { @@ -74,7 +76,9 @@ describe('MRWidgetHeader', () => { }, }); - expect(vm.commitsBehindText).toEqual('The source branch is <a href="/foo/bar/master">2 commits behind</a> the target branch'); + expect(vm.commitsBehindText).toEqual( + 'The source branch is <a href="/foo/bar/master">2 commits behind</a> the target branch', + ); }); }); }); @@ -297,9 +301,16 @@ describe('MRWidgetHeader', () => { }); it('renders diverged commits info', () => { - expect(vm.$el.querySelector('.diverged-commits-count').textContent).toEqual('The source branch is 12 commits behind the target branch'); - expect(vm.$el.querySelector('.diverged-commits-count a').textContent).toEqual('12 commits behind'); - expect(vm.$el.querySelector('.diverged-commits-count a')).toHaveAttr('href', vm.mr.targetBranchPath); + expect(vm.$el.querySelector('.diverged-commits-count').textContent).toEqual( + 'The source branch is 12 commits behind the target branch', + ); + expect(vm.$el.querySelector('.diverged-commits-count a').textContent).toEqual( + '12 commits behind', + ); + expect(vm.$el.querySelector('.diverged-commits-count a')).toHaveAttr( + 'href', + vm.mr.targetBranchPath, + ); }); }); }); diff --git a/spec/javascripts/vue_mr_widget/components/mr_widget_memory_usage_spec.js b/spec/javascripts/vue_mr_widget/components/mr_widget_memory_usage_spec.js index bb7be2fe1c2..4baaea9745a 100644 --- a/spec/javascripts/vue_mr_widget/components/mr_widget_memory_usage_spec.js +++ b/spec/javascripts/vue_mr_widget/components/mr_widget_memory_usage_spec.js @@ -128,13 +128,7 @@ describe('MemoryUsage', () => { describe('computeGraphData', () => { it('should populate sparkline graph', () => { vm.computeGraphData(metrics, deployment_time); - const { - hasMetrics, - memoryMetrics, - deploymentTime, - memoryFrom, - memoryTo, - } = vm; + const { hasMetrics, memoryMetrics, deploymentTime, memoryFrom, memoryTo } = vm; expect(hasMetrics).toBeTruthy(); expect(memoryMetrics.length).toBeGreaterThan(0); @@ -153,18 +147,13 @@ describe('MemoryUsage', () => { }); it('should load metrics data using MRWidgetService', done => { - spyOn(MRWidgetService, 'fetchMetrics').and.returnValue( - returnServicePromise(true), - ); + spyOn(MRWidgetService, 'fetchMetrics').and.returnValue(returnServicePromise(true)); spyOn(vm, 'computeGraphData'); vm.loadMetrics(); setTimeout(() => { expect(MRWidgetService.fetchMetrics).toHaveBeenCalledWith(url); - expect(vm.computeGraphData).toHaveBeenCalledWith( - metrics, - deployment_time, - ); + expect(vm.computeGraphData).toHaveBeenCalledWith(metrics, deployment_time); done(); }, 333); }); @@ -183,17 +172,11 @@ describe('MemoryUsage', () => { vm.loadFailed = false; Vue.nextTick(() => { - expect( - el.querySelector('.js-usage-info.usage-info-loading'), - ).toBeDefined(); + expect(el.querySelector('.js-usage-info.usage-info-loading')).toBeDefined(); - expect( - el.querySelector('.js-usage-info .usage-info-load-spinner'), - ).toBeDefined(); + expect(el.querySelector('.js-usage-info .usage-info-load-spinner')).toBeDefined(); - expect(el.querySelector('.js-usage-info').innerText).toContain( - messages.loadingMetrics, - ); + expect(el.querySelector('.js-usage-info').innerText).toContain(messages.loadingMetrics); done(); }); }); @@ -205,9 +188,7 @@ describe('MemoryUsage', () => { Vue.nextTick(() => { expect(el.querySelector('.memory-graph-container')).toBeDefined(); - expect(el.querySelector('.js-usage-info').innerText).toContain( - messages.hasMetrics, - ); + expect(el.querySelector('.js-usage-info').innerText).toContain(messages.hasMetrics); done(); }); }); @@ -218,13 +199,9 @@ describe('MemoryUsage', () => { vm.loadFailed = true; Vue.nextTick(() => { - expect( - el.querySelector('.js-usage-info.usage-info-failed'), - ).toBeDefined(); + expect(el.querySelector('.js-usage-info.usage-info-failed')).toBeDefined(); - expect(el.querySelector('.js-usage-info').innerText).toContain( - messages.loadFailed, - ); + expect(el.querySelector('.js-usage-info').innerText).toContain(messages.loadFailed); done(); }); }); @@ -235,13 +212,9 @@ describe('MemoryUsage', () => { vm.loadFailed = false; Vue.nextTick(() => { - expect( - el.querySelector('.js-usage-info.usage-info-unavailable'), - ).toBeDefined(); + expect(el.querySelector('.js-usage-info.usage-info-unavailable')).toBeDefined(); - expect(el.querySelector('.js-usage-info').innerText).toContain( - messages.metricsUnavailable, - ); + expect(el.querySelector('.js-usage-info').innerText).toContain(messages.metricsUnavailable); done(); }); }); diff --git a/spec/javascripts/vue_mr_widget/components/mr_widget_merge_help_spec.js b/spec/javascripts/vue_mr_widget/components/mr_widget_merge_help_spec.js index 367c499daaf..dd7137abe0c 100644 --- a/spec/javascripts/vue_mr_widget/components/mr_widget_merge_help_spec.js +++ b/spec/javascripts/vue_mr_widget/components/mr_widget_merge_help_spec.js @@ -23,15 +23,22 @@ describe('MRWidgetMergeHelp', () => { it('renders missing branch information', () => { expect( - vm.$el.textContent.trim().replace(/[\r\n]+/g, ' ').replace(/\s\s+/g, ' '), + vm.$el.textContent + .trim() + .replace(/[\r\n]+/g, ' ') + .replace(/\s\s+/g, ' '), ).toEqual( 'If the this-is-not-the-branch-you-are-looking-for branch exists in your local repository, you can merge this merge request manually using the command line', ); }); it('renders button to open help modal', () => { - expect(vm.$el.querySelector('.js-open-modal-help').getAttribute('data-target')).toEqual('#modal_merge_info'); - expect(vm.$el.querySelector('.js-open-modal-help').getAttribute('data-toggle')).toEqual('modal'); + expect(vm.$el.querySelector('.js-open-modal-help').getAttribute('data-target')).toEqual( + '#modal_merge_info', + ); + expect(vm.$el.querySelector('.js-open-modal-help').getAttribute('data-toggle')).toEqual( + 'modal', + ); }); }); @@ -42,15 +49,20 @@ describe('MRWidgetMergeHelp', () => { it('renders information about how to merge manually', () => { expect( - vm.$el.textContent.trim().replace(/[\r\n]+/g, ' ').replace(/\s\s+/g, ' '), - ).toEqual( - 'You can merge this merge request manually using the command line', - ); + vm.$el.textContent + .trim() + .replace(/[\r\n]+/g, ' ') + .replace(/\s\s+/g, ' '), + ).toEqual('You can merge this merge request manually using the command line'); }); it('renders element to open a modal', () => { - expect(vm.$el.querySelector('.js-open-modal-help').getAttribute('data-target')).toEqual('#modal_merge_info'); - expect(vm.$el.querySelector('.js-open-modal-help').getAttribute('data-toggle')).toEqual('modal'); + expect(vm.$el.querySelector('.js-open-modal-help').getAttribute('data-target')).toEqual( + '#modal_merge_info', + ); + expect(vm.$el.querySelector('.js-open-modal-help').getAttribute('data-toggle')).toEqual( + 'modal', + ); }); }); }); diff --git a/spec/javascripts/vue_mr_widget/components/mr_widget_rebase_spec.js b/spec/javascripts/vue_mr_widget/components/mr_widget_rebase_spec.js index 25763634671..14d6e8d7556 100644 --- a/spec/javascripts/vue_mr_widget/components/mr_widget_rebase_spec.js +++ b/spec/javascripts/vue_mr_widget/components/mr_widget_rebase_spec.js @@ -39,14 +39,16 @@ describe('Merge request widget rebase component', () => { }); it('it should render rebase button and warning message', () => { - const text = vm.$el.querySelector('.rebase-state-find-class-convention span').textContent.trim(); + const text = vm.$el + .querySelector('.rebase-state-find-class-convention span') + .textContent.trim(); expect(text).toContain('Fast-forward merge is not possible.'); expect(text).toContain('Rebase the source branch onto the target branch or merge target'); expect(text).toContain('branch into source branch to allow this merge request to be merged.'); }); - it('it should render error message when it fails', (done) => { + it('it should render error message when it fails', done => { vm.rebasingError = 'Something went wrong!'; Vue.nextTick(() => { @@ -69,7 +71,9 @@ describe('Merge request widget rebase component', () => { service: {}, }); - const text = vm.$el.querySelector('.rebase-state-find-class-convention span').textContent.trim(); + const text = vm.$el + .querySelector('.rebase-state-find-class-convention span') + .textContent.trim(); expect(text).toContain('Fast-forward merge is not possible.'); expect(text).toContain('Rebase the source branch onto'); @@ -79,7 +83,7 @@ describe('Merge request widget rebase component', () => { }); describe('methods', () => { - it('checkRebaseStatus', (done) => { + it('checkRebaseStatus', done => { spyOn(eventHub, '$emit'); vm = mountComponent(Component, { mr: {}, diff --git a/spec/javascripts/vue_mr_widget/components/mr_widget_related_links_spec.js b/spec/javascripts/vue_mr_widget/components/mr_widget_related_links_spec.js index 38031e42230..7a5d0efdea5 100644 --- a/spec/javascripts/vue_mr_widget/components/mr_widget_related_links_spec.js +++ b/spec/javascripts/vue_mr_widget/components/mr_widget_related_links_spec.js @@ -5,7 +5,7 @@ import mountComponent from 'spec/helpers/vue_mount_component_helper'; describe('MRWidgetRelatedLinks', () => { let vm; - const createComponent = (data) => { + const createComponent = data => { const Component = Vue.extend(relatedLinksComponent); return mountComponent(Component, data); diff --git a/spec/javascripts/vue_mr_widget/components/states/mr_widget_archived_spec.js b/spec/javascripts/vue_mr_widget/components/states/mr_widget_archived_spec.js index e818f87b4c8..b90f5881a4d 100644 --- a/spec/javascripts/vue_mr_widget/components/states/mr_widget_archived_spec.js +++ b/spec/javascripts/vue_mr_widget/components/states/mr_widget_archived_spec.js @@ -24,8 +24,8 @@ describe('MRWidgetArchived', () => { }); it('renders information', () => { - expect( - vm.$el.querySelector('.bold').textContent.trim(), - ).toEqual('This project is archived, write access has been disabled'); + expect(vm.$el.querySelector('.bold').textContent.trim()).toEqual( + 'This project is archived, write access has been disabled', + ); }); }); diff --git a/spec/javascripts/vue_mr_widget/components/states/mr_widget_auto_merge_failed_spec.js b/spec/javascripts/vue_mr_widget/components/states/mr_widget_auto_merge_failed_spec.js index d069dc3fcc6..eb4fa0df727 100644 --- a/spec/javascripts/vue_mr_widget/components/states/mr_widget_auto_merge_failed_spec.js +++ b/spec/javascripts/vue_mr_widget/components/states/mr_widget_auto_merge_failed_spec.js @@ -30,7 +30,7 @@ describe('MRWidgetAutoMergeFailed', () => { expect(vm.$el.querySelector('button').textContent.trim()).toEqual('Refresh'); }); - it('emits event and shows loading icon when button is clicked', (done) => { + it('emits event and shows loading icon when button is clicked', done => { spyOn(eventHub, '$emit'); vm.$el.querySelector('button').click(); @@ -38,9 +38,7 @@ describe('MRWidgetAutoMergeFailed', () => { Vue.nextTick(() => { expect(vm.$el.querySelector('button').getAttribute('disabled')).toEqual('disabled'); - expect( - vm.$el.querySelector('button i').classList, - ).toContain('fa-spinner'); + expect(vm.$el.querySelector('button i').classList).toContain('fa-spinner'); done(); }); }); diff --git a/spec/javascripts/vue_mr_widget/components/states/mr_widget_checking_spec.js b/spec/javascripts/vue_mr_widget/components/states/mr_widget_checking_spec.js index 658612aad3c..7da27bb8890 100644 --- a/spec/javascripts/vue_mr_widget/components/states/mr_widget_checking_spec.js +++ b/spec/javascripts/vue_mr_widget/components/states/mr_widget_checking_spec.js @@ -24,6 +24,8 @@ describe('MRWidgetChecking', () => { }); it('renders information about merging', () => { - expect(vm.$el.querySelector('.media-body').textContent.trim()).toEqual('Checking ability to merge automatically'); + expect(vm.$el.querySelector('.media-body').textContent.trim()).toEqual( + 'Checking ability to merge automatically', + ); }); }); diff --git a/spec/javascripts/vue_mr_widget/components/states/mr_widget_closed_spec.js b/spec/javascripts/vue_mr_widget/components/states/mr_widget_closed_spec.js index 0e3c134d3ac..9523e7d5474 100644 --- a/spec/javascripts/vue_mr_widget/components/states/mr_widget_closed_spec.js +++ b/spec/javascripts/vue_mr_widget/components/states/mr_widget_closed_spec.js @@ -7,23 +7,26 @@ describe('MRWidgetClosed', () => { beforeEach(() => { const Component = Vue.extend(closedComponent); - vm = mountComponent(Component, { mr: { - metrics: { - mergedBy: {}, - closedBy: { - name: 'Administrator', - username: 'root', - webUrl: 'http://localhost:3000/root', - avatarUrl: 'http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon', + vm = mountComponent(Component, { + mr: { + metrics: { + mergedBy: {}, + closedBy: { + name: 'Administrator', + username: 'root', + webUrl: 'http://localhost:3000/root', + avatarUrl: + 'http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon', + }, + mergedAt: 'Jan 24, 2018 1:02pm GMT+0000', + closedAt: 'Jan 24, 2018 1:02pm GMT+0000', + readableMergedAt: '', + readableClosedAt: 'less than a minute ago', }, - mergedAt: 'Jan 24, 2018 1:02pm GMT+0000', - closedAt: 'Jan 24, 2018 1:02pm GMT+0000', - readableMergedAt: '', - readableClosedAt: 'less than a minute ago', + targetBranchPath: '/twitter/flight/commits/so_long_jquery', + targetBranch: 'so_long_jquery', }, - targetBranchPath: '/twitter/flight/commits/so_long_jquery', - targetBranch: 'so_long_jquery', - } }); + }); }); afterEach(() => { @@ -36,23 +39,31 @@ describe('MRWidgetClosed', () => { it('renders closed by information with author and time', () => { expect( - vm.$el.querySelector('.js-mr-widget-author').textContent.trim().replace(/\s\s+/g, ' '), - ).toContain( - 'Closed by Administrator less than a minute ago', - ); + vm.$el + .querySelector('.js-mr-widget-author') + .textContent.trim() + .replace(/\s\s+/g, ' '), + ).toContain('Closed by Administrator less than a minute ago'); }); it('links to the user that closed the MR', () => { - expect(vm.$el.querySelector('.author-link').getAttribute('href')).toEqual('http://localhost:3000/root'); + expect(vm.$el.querySelector('.author-link').getAttribute('href')).toEqual( + 'http://localhost:3000/root', + ); }); it('renders information about the changes not being merged', () => { expect( - vm.$el.querySelector('.mr-info-list').textContent.trim().replace(/\s\s+/g, ' '), + vm.$el + .querySelector('.mr-info-list') + .textContent.trim() + .replace(/\s\s+/g, ' '), ).toContain('The changes were not merged into so_long_jquery'); }); it('renders link for target branch', () => { - expect(vm.$el.querySelector('.label-branch').getAttribute('href')).toEqual('/twitter/flight/commits/so_long_jquery'); + expect(vm.$el.querySelector('.label-branch').getAttribute('href')).toEqual( + '/twitter/flight/commits/so_long_jquery', + ); }); }); diff --git a/spec/javascripts/vue_mr_widget/components/states/mr_widget_conflicts_spec.js b/spec/javascripts/vue_mr_widget/components/states/mr_widget_conflicts_spec.js index 3d05dbfa305..f9cd5c8bd3c 100644 --- a/spec/javascripts/vue_mr_widget/components/states/mr_widget_conflicts_spec.js +++ b/spec/javascripts/vue_mr_widget/components/states/mr_widget_conflicts_spec.js @@ -59,7 +59,9 @@ describe('MRWidgetConflicts', () => { }); it('should show proper message', () => { - expect(vm.$el.textContent.trim().replace(/\s\s+/g, ' ')).toContain('ask someone with write access'); + expect(vm.$el.textContent.trim().replace(/\s\s+/g, ' ')).toContain( + 'ask someone with write access', + ); }); it('should not have action buttons', () => { @@ -79,9 +81,9 @@ describe('MRWidgetConflicts', () => { }); it('should tell you to rebase locally', () => { - expect( - removeBreakLine(vm.$el.textContent).trim(), - ).toContain('Fast-forward merge is not possible. To merge this request, first rebase locally.'); + expect(removeBreakLine(vm.$el.textContent).trim()).toContain( + 'Fast-forward merge is not possible. To merge this request, first rebase locally.', + ); }); }); }); diff --git a/spec/javascripts/vue_mr_widget/components/states/mr_widget_merge_when_pipeline_succeeds_spec.js b/spec/javascripts/vue_mr_widget/components/states/mr_widget_merge_when_pipeline_succeeds_spec.js index 04380b23e52..23c51aa1fb2 100644 --- a/spec/javascripts/vue_mr_widget/components/states/mr_widget_merge_when_pipeline_succeeds_spec.js +++ b/spec/javascripts/vue_mr_widget/components/states/mr_widget_merge_when_pipeline_succeeds_spec.js @@ -70,15 +70,17 @@ describe('MRWidgetMergeWhenPipelineSucceeds', () => { describe('methods', () => { describe('cancelAutomaticMerge', () => { - it('should set flag and call service then tell main component to update the widget with data', (done) => { + it('should set flag and call service then tell main component to update the widget with data', done => { const mrObj = { is_new_mr_data: true, }; - spyOn(vm.service, 'cancelAutomaticMerge').and.returnValue(new Promise((resolve) => { - resolve({ - data: mrObj, - }); - })); + spyOn(vm.service, 'cancelAutomaticMerge').and.returnValue( + new Promise(resolve => { + resolve({ + data: mrObj, + }); + }), + ); vm.cancelAutomaticMerge(); setTimeout(() => { @@ -90,12 +92,14 @@ describe('MRWidgetMergeWhenPipelineSucceeds', () => { }); describe('removeSourceBranch', () => { - it('should set flag and call service then request main component to update the widget', (done) => { - spyOn(vm.service, 'merge').and.returnValue(Promise.resolve({ - data: { - status: 'merge_when_pipeline_succeeds', - }, - })); + it('should set flag and call service then request main component to update the widget', done => { + spyOn(vm.service, 'merge').and.returnValue( + Promise.resolve({ + data: { + status: 'merge_when_pipeline_succeeds', + }, + }), + ); vm.removeSourceBranch(); setTimeout(() => { @@ -118,13 +122,17 @@ describe('MRWidgetMergeWhenPipelineSucceeds', () => { expect(vm.$el.innerText).toContain('The changes will be merged into'); expect(vm.$el.innerText).toContain(targetBranch); expect(vm.$el.innerText).toContain('The source branch will not be removed'); - expect(vm.$el.querySelector('.js-cancel-auto-merge').innerText).toContain('Cancel automatic merge'); + expect(vm.$el.querySelector('.js-cancel-auto-merge').innerText).toContain( + 'Cancel automatic merge', + ); expect(vm.$el.querySelector('.js-cancel-auto-merge').getAttribute('disabled')).toBeFalsy(); - expect(vm.$el.querySelector('.js-remove-source-branch').innerText).toContain('Remove source branch'); + expect(vm.$el.querySelector('.js-remove-source-branch').innerText).toContain( + 'Remove source branch', + ); expect(vm.$el.querySelector('.js-remove-source-branch').getAttribute('disabled')).toBeFalsy(); }); - it('should disable cancel auto merge button when the action is in progress', (done) => { + it('should disable cancel auto merge button when the action is in progress', done => { vm.isCancellingAutoMerge = true; Vue.nextTick(() => { @@ -133,7 +141,7 @@ describe('MRWidgetMergeWhenPipelineSucceeds', () => { }); }); - it('should show source branch will be removed text when it source branch set to remove', (done) => { + it('should show source branch will be removed text when it source branch set to remove', done => { vm.mr.shouldRemoveSourceBranch = true; Vue.nextTick(() => { @@ -145,7 +153,7 @@ describe('MRWidgetMergeWhenPipelineSucceeds', () => { }); }); - it('should not show remove source branch button when user not able to remove source branch', (done) => { + it('should not show remove source branch button when user not able to remove source branch', done => { vm.mr.currentUserId = 4; Vue.nextTick(() => { @@ -154,11 +162,13 @@ describe('MRWidgetMergeWhenPipelineSucceeds', () => { }); }); - it('should disable remove source branch button when the action is in progress', (done) => { + it('should disable remove source branch button when the action is in progress', done => { vm.isRemovingSourceBranch = true; Vue.nextTick(() => { - expect(vm.$el.querySelector('.js-remove-source-branch').getAttribute('disabled')).toBeTruthy(); + expect( + vm.$el.querySelector('.js-remove-source-branch').getAttribute('disabled'), + ).toBeTruthy(); done(); }); }); diff --git a/spec/javascripts/vue_mr_widget/components/states/mr_widget_merged_spec.js b/spec/javascripts/vue_mr_widget/components/states/mr_widget_merged_spec.js index 6a21e29e8c9..d68342635ef 100644 --- a/spec/javascripts/vue_mr_widget/components/states/mr_widget_merged_spec.js +++ b/spec/javascripts/vue_mr_widget/components/states/mr_widget_merged_spec.js @@ -30,7 +30,8 @@ describe('MRWidgetMerged', () => { name: 'Administrator', username: 'root', webUrl: 'http://localhost:3000/root', - avatarUrl: 'http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon', + avatarUrl: + 'http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon', }, mergedAt: 'Jan 24, 2018 1:02pm GMT+0000', readableMergedAt: '', @@ -41,7 +42,8 @@ describe('MRWidgetMerged', () => { updatedAt: 'mergedUpdatedAt', shortMergeCommitSha: '958c0475', mergeCommitSha: '958c047516e182dfc52317f721f696e8a1ee85ed', - mergeCommitPath: 'http://localhost:3000/root/nautilus/commit/f7ce827c314c9340b075657fd61c789fb01cf74d', + mergeCommitPath: + 'http://localhost:3000/root/nautilus/commit/f7ce827c314c9340b075657fd61c789fb01cf74d', sourceBranch: 'bar', targetBranch, }; @@ -121,14 +123,16 @@ describe('MRWidgetMerged', () => { describe('methods', () => { describe('removeSourceBranch', () => { - it('should set flag and call service then request main component to update the widget', (done) => { - spyOn(vm.service, 'removeSourceBranch').and.returnValue(new Promise((resolve) => { - resolve({ - data: { - message: 'Branch was removed', - }, - }); - })); + it('should set flag and call service then request main component to update the widget', done => { + spyOn(vm.service, 'removeSourceBranch').and.returnValue( + new Promise(resolve => { + resolve({ + data: { + message: 'Branch was removed', + }, + }); + }), + ); vm.removeSourceBranch(); setTimeout(() => { @@ -164,10 +168,12 @@ describe('MRWidgetMerged', () => { it('shows button to copy commit SHA to clipboard', () => { expect(selectors.copyMergeShaButton).toExist(); - expect(selectors.copyMergeShaButton.getAttribute('data-clipboard-text')).toBe(vm.mr.mergeCommitSha); + expect(selectors.copyMergeShaButton.getAttribute('data-clipboard-text')).toBe( + vm.mr.mergeCommitSha, + ); }); - it('hides button to copy commit SHA if SHA does not exist', (done) => { + it('hides button to copy commit SHA if SHA does not exist', done => { vm.mr.mergeCommitSha = null; Vue.nextTick(() => { @@ -183,7 +189,7 @@ describe('MRWidgetMerged', () => { expect(selectors.mergeCommitShaLink.href).toBe(vm.mr.mergeCommitPath); }); - it('should not show source branch removed text', (done) => { + it('should not show source branch removed text', done => { vm.mr.sourceBranchRemoved = false; Vue.nextTick(() => { @@ -193,7 +199,7 @@ describe('MRWidgetMerged', () => { }); }); - it('should show source branch removing text', (done) => { + it('should show source branch removing text', done => { vm.mr.isRemovingSourceBranch = true; vm.mr.sourceBranchRemoved = false; @@ -206,8 +212,8 @@ describe('MRWidgetMerged', () => { }); it('should use mergedEvent mergedAt as tooltip title', () => { - expect( - vm.$el.querySelector('time').getAttribute('data-original-title'), - ).toBe('Jan 24, 2018 1:02pm GMT+0000'); + expect(vm.$el.querySelector('time').getAttribute('data-original-title')).toBe( + 'Jan 24, 2018 1:02pm GMT+0000', + ); }); }); diff --git a/spec/javascripts/vue_mr_widget/components/states/mr_widget_merging_spec.js b/spec/javascripts/vue_mr_widget/components/states/mr_widget_merging_spec.js index 0781cd389fc..57773d1648a 100644 --- a/spec/javascripts/vue_mr_widget/components/states/mr_widget_merging_spec.js +++ b/spec/javascripts/vue_mr_widget/components/states/mr_widget_merging_spec.js @@ -7,10 +7,12 @@ describe('MRWidgetMerging', () => { beforeEach(() => { const Component = Vue.extend(mergingComponent); - vm = mountComponent(Component, { mr: { - targetBranchPath: '/branch-path', - targetBranch: 'branch', - } }); + vm = mountComponent(Component, { + mr: { + targetBranchPath: '/branch-path', + targetBranch: 'branch', + }, + }); }); afterEach(() => { @@ -19,17 +21,23 @@ describe('MRWidgetMerging', () => { it('renders information about merge request being merged', () => { expect( - vm.$el.querySelector('.media-body').textContent.trim().replace(/\s\s+/g, ' ').replace(/[\r\n]+/g, ' '), + vm.$el + .querySelector('.media-body') + .textContent.trim() + .replace(/\s\s+/g, ' ') + .replace(/[\r\n]+/g, ' '), ).toContain('This merge request is in the process of being merged'); }); it('renders branch information', () => { expect( - vm.$el.querySelector('.mr-info-list').textContent.trim().replace(/\s\s+/g, ' ').replace(/[\r\n]+/g, ' '), + vm.$el + .querySelector('.mr-info-list') + .textContent.trim() + .replace(/\s\s+/g, ' ') + .replace(/[\r\n]+/g, ' '), ).toEqual('The changes will be merged into branch'); - expect( - vm.$el.querySelector('a').getAttribute('href'), - ).toEqual('/branch-path'); + expect(vm.$el.querySelector('a').getAttribute('href')).toEqual('/branch-path'); }); }); diff --git a/spec/javascripts/vue_mr_widget/components/states/mr_widget_not_allowed_spec.js b/spec/javascripts/vue_mr_widget/components/states/mr_widget_not_allowed_spec.js index 9f8b96c118b..6b95ca3460b 100644 --- a/spec/javascripts/vue_mr_widget/components/states/mr_widget_not_allowed_spec.js +++ b/spec/javascripts/vue_mr_widget/components/states/mr_widget_not_allowed_spec.js @@ -19,6 +19,8 @@ describe('MRWidgetNotAllowed', () => { it('renders informative text', () => { expect(vm.$el.innerText).toContain('Ready to be merged automatically.'); - expect(vm.$el.innerText).toContain('Ask someone with write access to this repository to merge this request'); + expect(vm.$el.innerText).toContain( + 'Ask someone with write access to this repository to merge this request', + ); }); }); diff --git a/spec/javascripts/vue_mr_widget/components/states/mr_widget_nothing_to_merge_spec.js b/spec/javascripts/vue_mr_widget/components/states/mr_widget_nothing_to_merge_spec.js index 2a762c9336e..5b80f9b8380 100644 --- a/spec/javascripts/vue_mr_widget/components/states/mr_widget_nothing_to_merge_spec.js +++ b/spec/javascripts/vue_mr_widget/components/states/mr_widget_nothing_to_merge_spec.js @@ -15,7 +15,9 @@ describe('NothingToMerge', () => { it('should have correct elements', () => { expect(vm.$el.classList.contains('mr-widget-body')).toBeTruthy(); expect(vm.$el.querySelector('a').href).toContain(newBlobPath); - expect(vm.$el.innerText).toContain('Currently there are no changes in this merge request\'s source branch'); + expect(vm.$el.innerText).toContain( + "Currently there are no changes in this merge request's source branch", + ); expect(vm.$el.innerText).toContain('Please push new commits or use a different branch.'); }); diff --git a/spec/javascripts/vue_mr_widget/components/states/mr_widget_pipeline_blocked_spec.js b/spec/javascripts/vue_mr_widget/components/states/mr_widget_pipeline_blocked_spec.js index ab096a56918..477041fa383 100644 --- a/spec/javascripts/vue_mr_widget/components/states/mr_widget_pipeline_blocked_spec.js +++ b/spec/javascripts/vue_mr_widget/components/states/mr_widget_pipeline_blocked_spec.js @@ -19,8 +19,8 @@ describe('MRWidgetPipelineBlocked', () => { }); it('renders information text', () => { - expect( - removeBreakLine(vm.$el.textContent).trim(), - ).toContain('Pipeline blocked. The pipeline for this merge request requires a manual action to proceed'); + expect(removeBreakLine(vm.$el.textContent).trim()).toContain( + 'Pipeline blocked. The pipeline for this merge request requires a manual action to proceed', + ); }); }); diff --git a/spec/javascripts/vue_mr_widget/components/states/mr_widget_pipeline_failed_spec.js b/spec/javascripts/vue_mr_widget/components/states/mr_widget_pipeline_failed_spec.js index 5573d7c5c93..f7523a01963 100644 --- a/spec/javascripts/vue_mr_widget/components/states/mr_widget_pipeline_failed_spec.js +++ b/spec/javascripts/vue_mr_widget/components/states/mr_widget_pipeline_failed_spec.js @@ -11,9 +11,9 @@ describe('PipelineFailed', () => { it('should have correct elements', () => { expect(vm.$el.classList.contains('mr-widget-body')).toBeTruthy(); expect(vm.$el.querySelector('button').getAttribute('disabled')).toBeTruthy(); - expect( - removeBreakLine(vm.$el.innerText).trim(), - ).toContain('The pipeline for this merge request failed. Please retry the job or push a new commit to fix the failure'); + expect(removeBreakLine(vm.$el.innerText).trim()).toContain( + 'The pipeline for this merge request failed. Please retry the job or push a new commit to fix the failure', + ); }); }); }); diff --git a/spec/javascripts/vue_mr_widget/components/states/mr_widget_ready_to_merge_spec.js b/spec/javascripts/vue_mr_widget/components/states/mr_widget_ready_to_merge_spec.js index b795ce680ce..2119a3b927a 100644 --- a/spec/javascripts/vue_mr_widget/components/states/mr_widget_ready_to_merge_spec.js +++ b/spec/javascripts/vue_mr_widget/components/states/mr_widget_ready_to_merge_spec.js @@ -318,15 +318,16 @@ describe('ReadyToMerge', () => { }); describe('handleMergeButtonClick', () => { - const returnPromise = status => new Promise((resolve) => { - resolve({ - data: { - status, - }, + const returnPromise = status => + new Promise(resolve => { + resolve({ + data: { + status, + }, + }); }); - }); - it('should handle merge when pipeline succeeds', (done) => { + it('should handle merge when pipeline succeeds', done => { spyOn(eventHub, '$emit'); spyOn(vm.service, 'merge').and.returnValue(returnPromise('merge_when_pipeline_succeeds')); vm.removeSourceBranch = false; @@ -347,7 +348,7 @@ describe('ReadyToMerge', () => { }, 333); }); - it('should handle merge failed', (done) => { + it('should handle merge failed', done => { spyOn(eventHub, '$emit'); spyOn(vm.service, 'merge').and.returnValue(returnPromise('failed')); vm.handleMergeButtonClick(false, true); @@ -365,7 +366,7 @@ describe('ReadyToMerge', () => { }, 333); }); - it('should handle merge action accepted case', (done) => { + it('should handle merge action accepted case', done => { spyOn(vm.service, 'merge').and.returnValue(returnPromise('success')); spyOn(vm, 'initiateMergePolling'); vm.handleMergeButtonClick(); @@ -394,20 +395,21 @@ describe('ReadyToMerge', () => { }); describe('handleMergePolling', () => { - const returnPromise = state => new Promise((resolve) => { - resolve({ - data: { - state, - source_branch_exists: true, - }, + const returnPromise = state => + new Promise(resolve => { + resolve({ + data: { + state, + source_branch_exists: true, + }, + }); }); - }); beforeEach(() => { loadFixtures('merge_requests/merge_request_of_current_user.html.raw'); }); - it('should call start and stop polling when MR merged', (done) => { + it('should call start and stop polling when MR merged', done => { spyOn(eventHub, '$emit'); spyOn(vm.service, 'poll').and.returnValue(returnPromise('merged')); spyOn(vm, 'initiateRemoveSourceBranchPolling'); @@ -415,7 +417,14 @@ describe('ReadyToMerge', () => { let cpc = false; // continuePollingCalled let spc = false; // stopPollingCalled - vm.handleMergePolling(() => { cpc = true; }, () => { spc = true; }); + vm.handleMergePolling( + () => { + cpc = true; + }, + () => { + spc = true; + }, + ); setTimeout(() => { expect(vm.service.poll).toHaveBeenCalled(); expect(eventHub.$emit).toHaveBeenCalledWith('MRWidgetUpdateRequested'); @@ -428,7 +437,7 @@ describe('ReadyToMerge', () => { }, 333); }); - it('updates status box', (done) => { + it('updates status box', done => { spyOn(vm.service, 'poll').and.returnValue(returnPromise('merged')); spyOn(vm, 'initiateRemoveSourceBranchPolling'); @@ -444,7 +453,7 @@ describe('ReadyToMerge', () => { }); }); - it('hides close button', (done) => { + it('hides close button', done => { spyOn(vm.service, 'poll').and.returnValue(returnPromise('merged')); spyOn(vm, 'initiateRemoveSourceBranchPolling'); @@ -457,7 +466,7 @@ describe('ReadyToMerge', () => { }); }); - it('updates merge request count badge', (done) => { + it('updates merge request count badge', done => { spyOn(vm.service, 'poll').and.returnValue(returnPromise('merged')); spyOn(vm, 'initiateRemoveSourceBranchPolling'); @@ -470,14 +479,21 @@ describe('ReadyToMerge', () => { }); }); - it('should continue polling until MR is merged', (done) => { + it('should continue polling until MR is merged', done => { spyOn(vm.service, 'poll').and.returnValue(returnPromise('some_other_state')); spyOn(vm, 'initiateRemoveSourceBranchPolling'); let cpc = false; // continuePollingCalled let spc = false; // stopPollingCalled - vm.handleMergePolling(() => { cpc = true; }, () => { spc = true; }); + vm.handleMergePolling( + () => { + cpc = true; + }, + () => { + spc = true; + }, + ); setTimeout(() => { expect(cpc).toBeTruthy(); expect(spc).toBeFalsy(); @@ -500,22 +516,30 @@ describe('ReadyToMerge', () => { }); describe('handleRemoveBranchPolling', () => { - const returnPromise = state => new Promise((resolve) => { - resolve({ - data: { - source_branch_exists: state, - }, + const returnPromise = state => + new Promise(resolve => { + resolve({ + data: { + source_branch_exists: state, + }, + }); }); - }); - it('should call start and stop polling when MR merged', (done) => { + it('should call start and stop polling when MR merged', done => { spyOn(eventHub, '$emit'); spyOn(vm.service, 'poll').and.returnValue(returnPromise(false)); let cpc = false; // continuePollingCalled let spc = false; // stopPollingCalled - vm.handleRemoveBranchPolling(() => { cpc = true; }, () => { spc = true; }); + vm.handleRemoveBranchPolling( + () => { + cpc = true; + }, + () => { + spc = true; + }, + ); setTimeout(() => { expect(vm.service.poll).toHaveBeenCalled(); @@ -534,13 +558,20 @@ describe('ReadyToMerge', () => { }, 333); }); - it('should continue polling until MR is merged', (done) => { + it('should continue polling until MR is merged', done => { spyOn(vm.service, 'poll').and.returnValue(returnPromise(true)); let cpc = false; // continuePollingCalled let spc = false; // stopPollingCalled - vm.handleRemoveBranchPolling(() => { cpc = true; }, () => { spc = true; }); + vm.handleRemoveBranchPolling( + () => { + cpc = true; + }, + () => { + spc = true; + }, + ); setTimeout(() => { expect(cpc).toBeTruthy(); expect(spc).toBeFalsy(); diff --git a/spec/javascripts/vue_mr_widget/components/states/mr_widget_sha_mismatch_spec.js b/spec/javascripts/vue_mr_widget/components/states/mr_widget_sha_mismatch_spec.js index abf642c166a..36f8c7a9683 100644 --- a/spec/javascripts/vue_mr_widget/components/states/mr_widget_sha_mismatch_spec.js +++ b/spec/javascripts/vue_mr_widget/components/states/mr_widget_sha_mismatch_spec.js @@ -18,8 +18,8 @@ describe('ShaMismatch', () => { it('should render information message', () => { expect(vm.$el.querySelector('button').disabled).toEqual(true); - expect( - removeBreakLine(vm.$el.textContent).trim(), - ).toContain('The source branch HEAD has recently changed. Please reload the page and review the changes before merging'); + expect(removeBreakLine(vm.$el.textContent).trim()).toContain( + 'The source branch HEAD has recently changed. Please reload the page and review the changes before merging', + ); }); }); diff --git a/spec/javascripts/vue_mr_widget/components/states/mr_widget_unresolved_discussions_spec.js b/spec/javascripts/vue_mr_widget/components/states/mr_widget_unresolved_discussions_spec.js index d797f1266df..d84fee247be 100644 --- a/spec/javascripts/vue_mr_widget/components/states/mr_widget_unresolved_discussions_spec.js +++ b/spec/javascripts/vue_mr_widget/components/states/mr_widget_unresolved_discussions_spec.js @@ -12,13 +12,17 @@ describe('UnresolvedDiscussions', () => { describe('with discussions path', () => { beforeEach(() => { - vm = mountComponent(Component, { mr: { - createIssueToResolveDiscussionsPath: gl.TEST_HOST, - } }); + vm = mountComponent(Component, { + mr: { + createIssueToResolveDiscussionsPath: gl.TEST_HOST, + }, + }); }); it('should have correct elements', () => { - expect(vm.$el.innerText).toContain('There are unresolved discussions. Please resolve these discussions'); + expect(vm.$el.innerText).toContain( + 'There are unresolved discussions. Please resolve these discussions', + ); expect(vm.$el.innerText).toContain('Create an issue to resolve them later'); expect(vm.$el.querySelector('.js-create-issue').getAttribute('href')).toEqual(gl.TEST_HOST); }); @@ -30,7 +34,9 @@ describe('UnresolvedDiscussions', () => { }); it('should not show create issue link if user cannot create issue', () => { - expect(vm.$el.innerText).toContain('There are unresolved discussions. Please resolve these discussions'); + expect(vm.$el.innerText).toContain( + 'There are unresolved discussions. Please resolve these discussions', + ); expect(vm.$el.querySelector('.js-create-issue')).toEqual(null); }); }); diff --git a/spec/javascripts/vue_mr_widget/components/states/mr_widget_wip_spec.js b/spec/javascripts/vue_mr_widget/components/states/mr_widget_wip_spec.js index 518466cea8b..88937df2f7b 100644 --- a/spec/javascripts/vue_mr_widget/components/states/mr_widget_wip_spec.js +++ b/spec/javascripts/vue_mr_widget/components/states/mr_widget_wip_spec.js @@ -44,22 +44,27 @@ describe('Wip', () => { }; describe('removeWIP', () => { - it('should make a request to service and handle response', (done) => { + it('should make a request to service and handle response', done => { const vm = createComponent(); spyOn(window, 'Flash').and.returnValue(true); spyOn(eventHub, '$emit'); - spyOn(vm.service, 'removeWIP').and.returnValue(new Promise((resolve) => { - resolve({ - data: mrObj, - }); - })); + spyOn(vm.service, 'removeWIP').and.returnValue( + new Promise(resolve => { + resolve({ + data: mrObj, + }); + }), + ); vm.removeWIP(); setTimeout(() => { expect(vm.isMakingRequest).toBeTruthy(); expect(eventHub.$emit).toHaveBeenCalledWith('UpdateWidgetData', mrObj); - expect(window.Flash).toHaveBeenCalledWith('The merge request can now be merged.', 'notice'); + expect(window.Flash).toHaveBeenCalledWith( + 'The merge request can now be merged.', + 'notice', + ); done(); }, 333); }); @@ -83,7 +88,7 @@ describe('Wip', () => { expect(el.querySelector('.js-remove-wip').innerText).toContain('Resolve WIP status'); }); - it('should not show removeWIP button is user cannot update MR', (done) => { + it('should not show removeWIP button is user cannot update MR', done => { vm.mr.removeWIPPath = ''; Vue.nextTick(() => { |