164 lines
5.2 KiB
JavaScript
164 lines
5.2 KiB
JavaScript
import { shallowMountExtended } from 'helpers/vue_test_utils_helper';
|
|
import { trimText } from 'helpers/text_helper';
|
|
import PipelineLabelsComponent from '~/pipelines/components/pipelines_list/pipeline_labels.vue';
|
|
import { mockPipeline } from './mock_data';
|
|
|
|
const projectPath = 'test/test';
|
|
|
|
describe('Pipeline label component', () => {
|
|
let wrapper;
|
|
|
|
const findScheduledTag = () => wrapper.findByTestId('pipeline-url-scheduled');
|
|
const findLatestTag = () => wrapper.findByTestId('pipeline-url-latest');
|
|
const findYamlTag = () => wrapper.findByTestId('pipeline-url-yaml');
|
|
const findStuckTag = () => wrapper.findByTestId('pipeline-url-stuck');
|
|
const findAutoDevopsTag = () => wrapper.findByTestId('pipeline-url-autodevops');
|
|
const findAutoDevopsTagLink = () => wrapper.findByTestId('pipeline-url-autodevops-link');
|
|
const findDetachedTag = () => wrapper.findByTestId('pipeline-url-detached');
|
|
const findFailureTag = () => wrapper.findByTestId('pipeline-url-failure');
|
|
const findForkTag = () => wrapper.findByTestId('pipeline-url-fork');
|
|
const findTrainTag = () => wrapper.findByTestId('pipeline-url-train');
|
|
|
|
const defaultProps = mockPipeline(projectPath);
|
|
|
|
const createComponent = (props) => {
|
|
wrapper = shallowMountExtended(PipelineLabelsComponent, {
|
|
propsData: { ...defaultProps, ...props },
|
|
provide: {
|
|
targetProjectFullPath: projectPath,
|
|
},
|
|
});
|
|
};
|
|
|
|
it('should not render tags when flags are not set', () => {
|
|
createComponent();
|
|
|
|
expect(findStuckTag().exists()).toBe(false);
|
|
expect(findLatestTag().exists()).toBe(false);
|
|
expect(findYamlTag().exists()).toBe(false);
|
|
expect(findAutoDevopsTag().exists()).toBe(false);
|
|
expect(findFailureTag().exists()).toBe(false);
|
|
expect(findScheduledTag().exists()).toBe(false);
|
|
expect(findForkTag().exists()).toBe(false);
|
|
expect(findTrainTag().exists()).toBe(false);
|
|
});
|
|
|
|
it('should render the stuck tag when flag is provided', () => {
|
|
const stuckPipeline = defaultProps.pipeline;
|
|
stuckPipeline.flags.stuck = true;
|
|
|
|
createComponent({
|
|
...stuckPipeline.pipeline,
|
|
});
|
|
|
|
expect(findStuckTag().text()).toContain('stuck');
|
|
});
|
|
|
|
it('should render latest tag when flag is provided', () => {
|
|
const latestPipeline = defaultProps.pipeline;
|
|
latestPipeline.flags.latest = true;
|
|
|
|
createComponent({
|
|
...latestPipeline,
|
|
});
|
|
|
|
expect(findLatestTag().text()).toContain('latest');
|
|
});
|
|
|
|
it('should render a yaml badge when it is invalid', () => {
|
|
const yamlPipeline = defaultProps.pipeline;
|
|
yamlPipeline.flags.yaml_errors = true;
|
|
|
|
createComponent({
|
|
...yamlPipeline,
|
|
});
|
|
|
|
expect(findYamlTag().text()).toContain('yaml invalid');
|
|
});
|
|
|
|
it('should render an autodevops badge when flag is provided', () => {
|
|
const autoDevopsPipeline = defaultProps.pipeline;
|
|
autoDevopsPipeline.flags.auto_devops = true;
|
|
|
|
createComponent({
|
|
...autoDevopsPipeline,
|
|
});
|
|
|
|
expect(trimText(findAutoDevopsTag().text())).toBe('Auto DevOps');
|
|
|
|
expect(findAutoDevopsTagLink().attributes()).toMatchObject({
|
|
href: '/help/topics/autodevops/index.md',
|
|
target: '_blank',
|
|
});
|
|
});
|
|
|
|
it('should render a detached badge when flag is provided', () => {
|
|
const detachedMRPipeline = defaultProps.pipeline;
|
|
detachedMRPipeline.flags.detached_merge_request_pipeline = true;
|
|
|
|
createComponent({
|
|
...detachedMRPipeline,
|
|
});
|
|
|
|
expect(findDetachedTag().text()).toBe('merge request');
|
|
});
|
|
|
|
it('should render error badge when pipeline has a failure reason set', () => {
|
|
const failedPipeline = defaultProps.pipeline;
|
|
failedPipeline.flags.failure_reason = true;
|
|
failedPipeline.failure_reason = 'some reason';
|
|
|
|
createComponent({
|
|
...failedPipeline,
|
|
});
|
|
|
|
expect(findFailureTag().text()).toContain('error');
|
|
expect(findFailureTag().attributes('title')).toContain('some reason');
|
|
});
|
|
|
|
it('should render scheduled badge when pipeline was triggered by a schedule', () => {
|
|
const scheduledPipeline = defaultProps.pipeline;
|
|
scheduledPipeline.source = 'schedule';
|
|
|
|
createComponent({
|
|
...scheduledPipeline,
|
|
});
|
|
|
|
expect(findScheduledTag().exists()).toBe(true);
|
|
expect(findScheduledTag().text()).toContain('Scheduled');
|
|
});
|
|
|
|
it('should render the fork badge when the pipeline was run in a fork', () => {
|
|
const forkedPipeline = defaultProps.pipeline;
|
|
forkedPipeline.project.full_path = '/test/forked';
|
|
|
|
createComponent({
|
|
...forkedPipeline,
|
|
});
|
|
|
|
expect(findForkTag().exists()).toBe(true);
|
|
expect(findForkTag().text()).toBe('fork');
|
|
});
|
|
|
|
it('should render the train badge when the pipeline is a merge train pipeline', () => {
|
|
const mergeTrainPipeline = defaultProps.pipeline;
|
|
mergeTrainPipeline.flags.merge_train_pipeline = true;
|
|
|
|
createComponent({
|
|
...mergeTrainPipeline,
|
|
});
|
|
|
|
expect(findTrainTag().text()).toBe('merge train');
|
|
});
|
|
|
|
it('should not render the train badge when the pipeline is not a merge train pipeline', () => {
|
|
const mergeTrainPipeline = defaultProps.pipeline;
|
|
mergeTrainPipeline.flags.merge_train_pipeline = false;
|
|
|
|
createComponent({
|
|
...mergeTrainPipeline,
|
|
});
|
|
|
|
expect(findTrainTag().exists()).toBe(false);
|
|
});
|
|
});
|