gitlab-org--gitlab-foss/spec/frontend/pipelines/unwrapping_utils_spec.js

151 lines
3.3 KiB
JavaScript

import {
unwrapArrayOfJobs,
unwrapGroups,
unwrapNodesWithName,
unwrapStagesWithNeeds,
} from '~/pipelines/components/unwrapping_utils';
const groupsArray = [
{
name: 'build_a',
size: 1,
status: {
label: 'passed',
group: 'success',
icon: 'status_success',
},
},
{
name: 'bob_the_build',
size: 1,
status: {
label: 'passed',
group: 'success',
icon: 'status_success',
},
},
];
const basicStageInfo = {
name: 'center_stage',
status: {
action: null,
},
};
const stagesAndGroups = [
{
...basicStageInfo,
groups: {
nodes: groupsArray,
},
},
];
const needArray = [
{
name: 'build_b',
},
];
const elephantArray = [
{
name: 'build_b',
elephant: 'gray',
},
];
const baseJobs = {
name: 'test_d',
status: {
icon: 'status_success',
tooltip: null,
hasDetails: true,
detailsPath: '/root/abcd-dag/-/pipelines/162',
group: 'success',
action: null,
},
};
const jobArrayWithNeeds = [
{
...baseJobs,
needs: {
nodes: needArray,
},
},
];
const jobArrayWithElephant = [
{
...baseJobs,
needs: {
nodes: elephantArray,
},
},
];
const completeMock = [
{
...basicStageInfo,
groups: {
nodes: groupsArray.map((group) => ({ ...group, jobs: { nodes: jobArrayWithNeeds } })),
},
},
];
describe('Shared pipeline unwrapping utils', () => {
describe('unwrapArrayOfJobs', () => {
it('returns an empty array if the input is an empty undefined', () => {
expect(unwrapArrayOfJobs(undefined)).toEqual([]);
});
it('returns an empty array if the input is an empty array', () => {
expect(unwrapArrayOfJobs([])).toEqual([]);
});
it('returns a flatten array of each job with their data and stage name', () => {
expect(
unwrapArrayOfJobs([
{ name: 'build', groups: [{ name: 'job_a_1' }, { name: 'job_a_2' }] },
{ name: 'test', groups: [{ name: 'job_b' }] },
]),
).toMatchObject([
{ category: 'build', name: 'job_a_1' },
{ category: 'build', name: 'job_a_2' },
{ category: 'test', name: 'job_b' },
]);
});
});
describe('unwrapGroups', () => {
it('takes stages without nodes and returns the unwrapped groups', () => {
expect(unwrapGroups(stagesAndGroups)[0].groups).toEqual(groupsArray);
});
it('keeps other stage properties intact', () => {
expect(unwrapGroups(stagesAndGroups)[0]).toMatchObject(basicStageInfo);
});
});
describe('unwrapNodesWithName', () => {
it('works with no field argument', () => {
expect(unwrapNodesWithName(jobArrayWithNeeds, 'needs')[0].needs).toEqual([needArray[0].name]);
});
it('works with custom field argument', () => {
expect(unwrapNodesWithName(jobArrayWithElephant, 'needs', 'elephant')[0].needs).toEqual([
elephantArray[0].elephant,
]);
});
});
describe('unwrapStagesWithNeeds', () => {
it('removes nodes from groups, jobs, and needs', () => {
const firstProcessedGroup = unwrapStagesWithNeeds(completeMock)[0].groups[0];
expect(firstProcessedGroup).toMatchObject(groupsArray[0]);
expect(firstProcessedGroup.jobs[0]).toMatchObject(baseJobs);
expect(firstProcessedGroup.jobs[0].needs[0]).toBe(needArray[0].name);
});
});
});