summaryrefslogtreecommitdiff
path: root/spec/javascripts/pipelines/pipelines_spec.js
diff options
context:
space:
mode:
Diffstat (limited to 'spec/javascripts/pipelines/pipelines_spec.js')
-rw-r--r--spec/javascripts/pipelines/pipelines_spec.js76
1 files changed, 76 insertions, 0 deletions
diff --git a/spec/javascripts/pipelines/pipelines_spec.js b/spec/javascripts/pipelines/pipelines_spec.js
index d79544f83ad..ff17602da2b 100644
--- a/spec/javascripts/pipelines/pipelines_spec.js
+++ b/spec/javascripts/pipelines/pipelines_spec.js
@@ -4,6 +4,7 @@ import axios from '~/lib/utils/axios_utils';
import pipelinesComp from '~/pipelines/components/pipelines.vue';
import Store from '~/pipelines/stores/pipelines_store';
import mountComponent from 'spec/helpers/vue_mount_component_helper';
+import { pipelineWithStages, stageReply } from './mock_data';
describe('Pipelines', () => {
const jsonFixtureName = 'pipelines/pipelines.json';
@@ -668,4 +669,79 @@ describe('Pipelines', () => {
});
});
});
+
+ describe('updates results when a staged is clicked', () => {
+ beforeEach(() => {
+ const copyPipeline = Object.assign({}, pipelineWithStages);
+ copyPipeline.id += 1;
+ mock
+ .onGet('twitter/flight/pipelines.json').reply(200, {
+ pipelines: [pipelineWithStages],
+ count: {
+ all: 1,
+ finished: 1,
+ pending: 0,
+ running: 0,
+ },
+ }, {
+ 'POLL-INTERVAL': 100,
+ })
+ .onGet(pipelineWithStages.details.stages[0].dropdown_path)
+ .reply(200, stageReply);
+
+ vm = mountComponent(PipelinesComponent, {
+ store: new Store(),
+ hasGitlabCi: true,
+ canCreatePipeline: true,
+ ...paths,
+ });
+ });
+
+ describe('when a request is being made', () => {
+ it('stops polling, cancels the request, fetches pipelines & restarts polling', (done) => {
+ spyOn(vm.poll, 'stop');
+ spyOn(vm.poll, 'restart');
+ spyOn(vm, 'getPipelines').and.returnValue(Promise.resolve());
+ spyOn(vm.service.cancelationSource, 'cancel').and.callThrough();
+
+ setTimeout(() => {
+ vm.isMakingRequest = true;
+ return vm.$nextTick()
+ .then(() => {
+ vm.$el.querySelector('.js-builds-dropdown-button').click();
+ })
+ .then(() => {
+ expect(vm.service.cancelationSource.cancel).toHaveBeenCalled();
+ expect(vm.poll.stop).toHaveBeenCalled();
+
+ setTimeout(() => {
+ expect(vm.getPipelines).toHaveBeenCalled();
+ expect(vm.poll.restart).toHaveBeenCalled();
+ done();
+ }, 0);
+ });
+ }, 0);
+ });
+ });
+
+ describe('when no request is being made', () => {
+ it('stops polling, fetches pipelines & restarts polling', (done) => {
+ spyOn(vm.poll, 'stop');
+ spyOn(vm.poll, 'restart');
+ spyOn(vm, 'getPipelines').and.returnValue(Promise.resolve());
+
+ setTimeout(() => {
+ vm.$el.querySelector('.js-builds-dropdown-button').click();
+
+ expect(vm.poll.stop).toHaveBeenCalled();
+
+ setTimeout(() => {
+ expect(vm.getPipelines).toHaveBeenCalled();
+ expect(vm.poll.restart).toHaveBeenCalled();
+ done();
+ }, 0);
+ }, 0);
+ });
+ });
+ });
});