128 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			128 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
| import {
 | |
|   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('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);
 | |
|     });
 | |
|   });
 | |
| });
 |