debian-mirror-gitlab/spec/javascripts/vue_mr_widget/components/mr_widget_pipeline_spec.js

314 lines
9.8 KiB
JavaScript
Raw Normal View History

2017-08-17 22:00:37 +05:30
import Vue from 'vue';
2018-03-27 19:54:05 +05:30
import mountComponent from 'spec/helpers/vue_mount_component_helper';
2019-09-04 21:01:54 +05:30
import { trimText } from 'spec/helpers/text_helper';
2020-01-01 13:55:28 +05:30
import pipelineComponent from '~/vue_merge_request_widget/components/mr_widget_pipeline.vue';
2017-08-17 22:00:37 +05:30
import mockData from '../mock_data';
describe('MRWidgetPipeline', () => {
2018-03-17 18:26:18 +05:30
let vm;
let Component;
2017-08-17 22:00:37 +05:30
2018-03-17 18:26:18 +05:30
beforeEach(() => {
Component = Vue.extend(pipelineComponent);
2017-08-17 22:00:37 +05:30
});
2018-03-17 18:26:18 +05:30
afterEach(() => {
vm.$destroy();
2017-08-17 22:00:37 +05:30
});
describe('computed', () => {
2018-03-17 18:26:18 +05:30
describe('hasPipeline', () => {
it('should return true when there is a pipeline', () => {
vm = mountComponent(Component, {
pipeline: mockData.pipeline,
ciStatus: 'success',
hasCi: true,
2018-12-13 13:39:08 +05:30
troubleshootingDocsPath: 'help',
2018-03-17 18:26:18 +05:30
});
2017-08-17 22:00:37 +05:30
2018-03-17 18:26:18 +05:30
expect(vm.hasPipeline).toEqual(true);
});
it('should return false when there is no pipeline', () => {
vm = mountComponent(Component, {
pipeline: {},
2018-12-13 13:39:08 +05:30
troubleshootingDocsPath: 'help',
2018-03-17 18:26:18 +05:30
});
expect(vm.hasPipeline).toEqual(false);
2017-08-17 22:00:37 +05:30
});
});
describe('hasCIError', () => {
it('should return false when there is no CI error', () => {
2018-03-17 18:26:18 +05:30
vm = mountComponent(Component, {
2017-08-17 22:00:37 +05:30
pipeline: mockData.pipeline,
2018-03-17 18:26:18 +05:30
hasCi: true,
2017-08-17 22:00:37 +05:30
ciStatus: 'success',
2018-12-13 13:39:08 +05:30
troubleshootingDocsPath: 'help',
2017-08-17 22:00:37 +05:30
});
2018-03-17 18:26:18 +05:30
expect(vm.hasCIError).toEqual(false);
2017-08-17 22:00:37 +05:30
});
it('should return true when there is a CI error', () => {
2018-03-17 18:26:18 +05:30
vm = mountComponent(Component, {
2017-08-17 22:00:37 +05:30
pipeline: mockData.pipeline,
2018-03-17 18:26:18 +05:30
hasCi: true,
2017-08-17 22:00:37 +05:30
ciStatus: null,
2018-12-13 13:39:08 +05:30
troubleshootingDocsPath: 'help',
2017-08-17 22:00:37 +05:30
});
2018-03-17 18:26:18 +05:30
expect(vm.hasCIError).toEqual(true);
2017-08-17 22:00:37 +05:30
});
});
2020-01-01 13:55:28 +05:30
describe('coverageDeltaClass', () => {
it('should return no class if there is no coverage change', () => {
vm = mountComponent(Component, {
pipeline: mockData.pipeline,
pipelineCoverageDelta: '0',
troubleshootingDocsPath: 'help',
});
expect(vm.coverageDeltaClass).toEqual('');
});
it('should return text-success if the coverage increased', () => {
vm = mountComponent(Component, {
pipeline: mockData.pipeline,
pipelineCoverageDelta: '10',
troubleshootingDocsPath: 'help',
});
expect(vm.coverageDeltaClass).toEqual('text-success');
});
it('should return text-danger if the coverage decreased', () => {
vm = mountComponent(Component, {
pipeline: mockData.pipeline,
pipelineCoverageDelta: '-12',
troubleshootingDocsPath: 'help',
});
expect(vm.coverageDeltaClass).toEqual('text-danger');
});
});
2017-08-17 22:00:37 +05:30
});
2018-03-17 18:26:18 +05:30
describe('rendered output', () => {
it('should render CI error', () => {
vm = mountComponent(Component, {
pipeline: mockData.pipeline,
hasCi: true,
2018-12-13 13:39:08 +05:30
troubleshootingDocsPath: 'help',
2018-03-17 18:26:18 +05:30
});
2017-08-17 22:00:37 +05:30
2018-12-13 13:39:08 +05:30
expect(vm.$el.querySelector('.media-body').textContent.trim()).toContain(
'Could not retrieve the pipeline status. For troubleshooting steps, read the documentation.',
);
2017-08-17 22:00:37 +05:30
});
2019-07-31 22:56:46 +05:30
it('should render CI error when no pipeline is provided', () => {
vm = mountComponent(Component, {
pipeline: {},
hasCi: true,
ciStatus: 'success',
troubleshootingDocsPath: 'help',
});
expect(vm.$el.querySelector('.media-body').textContent.trim()).toContain(
'Could not retrieve the pipeline status. For troubleshooting steps, read the documentation.',
);
});
2018-03-17 18:26:18 +05:30
describe('with a pipeline', () => {
beforeEach(() => {
vm = mountComponent(Component, {
pipeline: mockData.pipeline,
hasCi: true,
ciStatus: 'success',
2020-01-01 13:55:28 +05:30
pipelineCoverageDelta: mockData.pipelineCoverageDelta,
2018-12-13 13:39:08 +05:30
troubleshootingDocsPath: 'help',
2018-03-17 18:26:18 +05:30
});
});
2017-08-17 22:00:37 +05:30
2018-03-17 18:26:18 +05:30
it('should render pipeline ID', () => {
2018-12-13 13:39:08 +05:30
expect(vm.$el.querySelector('.pipeline-id').textContent.trim()).toEqual(
`#${mockData.pipeline.id}`,
);
2018-03-17 18:26:18 +05:30
});
it('should render pipeline status and commit id', () => {
2018-12-13 13:39:08 +05:30
expect(vm.$el.querySelector('.media-body').textContent.trim()).toContain(
mockData.pipeline.details.status.label,
);
2018-03-17 18:26:18 +05:30
2018-12-13 13:39:08 +05:30
expect(vm.$el.querySelector('.js-commit-link').textContent.trim()).toEqual(
mockData.pipeline.commit.short_id,
);
2018-03-17 18:26:18 +05:30
2018-12-13 13:39:08 +05:30
expect(vm.$el.querySelector('.js-commit-link').getAttribute('href')).toEqual(
mockData.pipeline.commit.commit_path,
);
2017-08-17 22:00:37 +05:30
});
2018-03-17 18:26:18 +05:30
it('should render pipeline graph', () => {
expect(vm.$el.querySelector('.mr-widget-pipeline-graph')).toBeDefined();
2018-12-13 13:39:08 +05:30
expect(vm.$el.querySelectorAll('.stage-container').length).toEqual(
mockData.pipeline.details.stages.length,
);
2018-03-17 18:26:18 +05:30
});
2017-08-17 22:00:37 +05:30
2018-10-15 14:42:47 +05:30
it('should render coverage information', () => {
2018-12-13 13:39:08 +05:30
expect(vm.$el.querySelector('.media-body').textContent).toContain(
`Coverage ${mockData.pipeline.coverage}`,
);
2018-10-15 14:42:47 +05:30
});
2020-01-01 13:55:28 +05:30
it('should render pipeline coverage delta information', () => {
expect(vm.$el.querySelector('.js-pipeline-coverage-delta.text-danger')).toBeDefined();
expect(vm.$el.querySelector('.js-pipeline-coverage-delta').textContent).toContain(
`(${mockData.pipelineCoverageDelta}%)`,
);
});
2018-10-15 14:42:47 +05:30
});
describe('without commit path', () => {
beforeEach(() => {
2019-07-07 11:18:12 +05:30
const mockCopy = JSON.parse(JSON.stringify(mockData));
2018-10-15 14:42:47 +05:30
delete mockCopy.pipeline.commit;
vm = mountComponent(Component, {
pipeline: mockCopy.pipeline,
hasCi: true,
ciStatus: 'success',
2018-12-13 13:39:08 +05:30
troubleshootingDocsPath: 'help',
2018-10-15 14:42:47 +05:30
});
});
it('should render pipeline ID', () => {
2018-12-13 13:39:08 +05:30
expect(vm.$el.querySelector('.pipeline-id').textContent.trim()).toEqual(
`#${mockData.pipeline.id}`,
);
2018-10-15 14:42:47 +05:30
});
it('should render pipeline status', () => {
2018-12-13 13:39:08 +05:30
expect(vm.$el.querySelector('.media-body').textContent.trim()).toContain(
mockData.pipeline.details.status.label,
);
2018-10-15 14:42:47 +05:30
2018-12-13 13:39:08 +05:30
expect(vm.$el.querySelector('.js-commit-link')).toBeNull();
2018-10-15 14:42:47 +05:30
});
it('should render pipeline graph', () => {
expect(vm.$el.querySelector('.mr-widget-pipeline-graph')).toBeDefined();
2018-12-13 13:39:08 +05:30
expect(vm.$el.querySelectorAll('.stage-container').length).toEqual(
mockData.pipeline.details.stages.length,
);
2018-10-15 14:42:47 +05:30
});
2018-03-17 18:26:18 +05:30
it('should render coverage information', () => {
2018-12-13 13:39:08 +05:30
expect(vm.$el.querySelector('.media-body').textContent).toContain(
`Coverage ${mockData.pipeline.coverage}`,
);
2017-08-17 22:00:37 +05:30
});
});
2018-03-17 18:26:18 +05:30
describe('without coverage', () => {
it('should not render a coverage', () => {
2019-07-07 11:18:12 +05:30
const mockCopy = JSON.parse(JSON.stringify(mockData));
2018-03-17 18:26:18 +05:30
delete mockCopy.pipeline.coverage;
vm = mountComponent(Component, {
pipeline: mockCopy.pipeline,
hasCi: true,
ciStatus: 'success',
2018-12-13 13:39:08 +05:30
troubleshootingDocsPath: 'help',
2018-03-17 18:26:18 +05:30
});
2017-08-17 22:00:37 +05:30
2018-12-13 13:39:08 +05:30
expect(vm.$el.querySelector('.media-body').textContent).not.toContain('Coverage');
2017-08-17 22:00:37 +05:30
});
});
2018-03-17 18:26:18 +05:30
describe('without a pipeline graph', () => {
it('should not render a pipeline graph', () => {
2019-07-07 11:18:12 +05:30
const mockCopy = JSON.parse(JSON.stringify(mockData));
2018-03-17 18:26:18 +05:30
delete mockCopy.pipeline.details.stages;
vm = mountComponent(Component, {
pipeline: mockCopy.pipeline,
hasCi: true,
ciStatus: 'success',
2018-12-13 13:39:08 +05:30
troubleshootingDocsPath: 'help',
2018-03-17 18:26:18 +05:30
});
2017-08-17 22:00:37 +05:30
2018-03-17 18:26:18 +05:30
expect(vm.$el.querySelector('.js-mini-pipeline-graph')).toEqual(null);
2017-08-17 22:00:37 +05:30
});
});
2019-07-07 11:18:12 +05:30
2019-12-04 20:38:33 +05:30
describe('for each type of pipeline', () => {
let pipeline;
2019-07-07 11:18:12 +05:30
2019-12-04 20:38:33 +05:30
beforeEach(() => {
({ pipeline } = JSON.parse(JSON.stringify(mockData)));
2019-07-07 11:18:12 +05:30
2019-12-04 20:38:33 +05:30
pipeline.details.name = 'Pipeline';
pipeline.merge_request_event_type = undefined;
pipeline.ref.tag = false;
pipeline.ref.branch = false;
2019-07-07 11:18:12 +05:30
});
2019-12-04 20:38:33 +05:30
const factory = () => {
2019-07-07 11:18:12 +05:30
vm = mountComponent(Component, {
pipeline,
hasCi: true,
ciStatus: 'success',
troubleshootingDocsPath: 'help',
2019-12-04 20:38:33 +05:30
sourceBranchLink: mockData.source_branch_link,
2019-07-07 11:18:12 +05:30
});
2019-12-04 20:38:33 +05:30
};
describe('for a branch pipeline', () => {
it('renders a pipeline widget that reads "Pipeline <ID> <status> for <SHA> on <branch>"', () => {
pipeline.ref.branch = true;
2019-07-07 11:18:12 +05:30
2019-12-04 20:38:33 +05:30
factory();
2019-07-07 11:18:12 +05:30
2019-12-04 20:38:33 +05:30
const expected = `Pipeline #${pipeline.id} ${pipeline.details.status.label} for ${pipeline.commit.short_id} on ${mockData.source_branch_link}`;
const actual = trimText(vm.$el.querySelector('.js-pipeline-info-container').innerText);
2019-07-07 11:18:12 +05:30
2019-12-04 20:38:33 +05:30
expect(actual).toBe(expected);
});
2019-07-07 11:18:12 +05:30
});
2019-12-04 20:38:33 +05:30
describe('for a tag pipeline', () => {
it('renders a pipeline widget that reads "Pipeline <ID> <status> for <SHA> on <branch>"', () => {
pipeline.ref.tag = true;
2019-07-07 11:18:12 +05:30
2019-12-04 20:38:33 +05:30
factory();
const expected = `Pipeline #${pipeline.id} ${pipeline.details.status.label} for ${pipeline.commit.short_id}`;
const actual = trimText(vm.$el.querySelector('.js-pipeline-info-container').innerText);
expect(actual).toBe(expected);
2019-07-07 11:18:12 +05:30
});
2019-12-04 20:38:33 +05:30
});
describe('for a detached merge request pipeline', () => {
it('renders a pipeline widget that reads "Detached merge request pipeline <ID> <status> for <SHA>"', () => {
pipeline.details.name = 'Detached merge request pipeline';
pipeline.merge_request_event_type = 'detached';
2019-07-07 11:18:12 +05:30
2019-12-04 20:38:33 +05:30
factory();
2019-07-07 11:18:12 +05:30
2019-12-04 20:38:33 +05:30
const expected = `Detached merge request pipeline #${pipeline.id} ${pipeline.details.status.label} for ${pipeline.commit.short_id}`;
const actual = trimText(vm.$el.querySelector('.js-pipeline-info-container').innerText);
2019-07-07 11:18:12 +05:30
2019-12-04 20:38:33 +05:30
expect(actual).toBe(expected);
});
2019-07-07 11:18:12 +05:30
});
});
2017-08-17 22:00:37 +05:30
});
});