diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-09-19 01:45:44 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-09-19 01:45:44 +0000 |
commit | 85dc423f7090da0a52c73eb66faf22ddb20efff9 (patch) | |
tree | 9160f299afd8c80c038f08e1545be119f5e3f1e1 /spec/frontend/pipelines/pipeline_graph/utils_spec.js | |
parent | 15c2c8c66dbe422588e5411eee7e68f1fa440bb8 (diff) | |
download | gitlab-ce-85dc423f7090da0a52c73eb66faf22ddb20efff9.tar.gz |
Add latest changes from gitlab-org/gitlab@13-4-stable-ee
Diffstat (limited to 'spec/frontend/pipelines/pipeline_graph/utils_spec.js')
-rw-r--r-- | spec/frontend/pipelines/pipeline_graph/utils_spec.js | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/spec/frontend/pipelines/pipeline_graph/utils_spec.js b/spec/frontend/pipelines/pipeline_graph/utils_spec.js new file mode 100644 index 00000000000..dd85c8c2bd0 --- /dev/null +++ b/spec/frontend/pipelines/pipeline_graph/utils_spec.js @@ -0,0 +1,150 @@ +import { preparePipelineGraphData } from '~/pipelines/utils'; + +describe('preparePipelineGraphData', () => { + const emptyResponse = { stages: [] }; + const jobName1 = 'build_1'; + const jobName2 = 'build_2'; + const jobName3 = 'test_1'; + const jobName4 = 'deploy_1'; + const job1 = { [jobName1]: { script: 'echo hello', stage: 'build' } }; + const job2 = { [jobName2]: { script: 'echo build', stage: 'build' } }; + const job3 = { [jobName3]: { script: 'echo test', stage: 'test' } }; + const job4 = { [jobName4]: { script: 'echo deploy', stage: 'deploy' } }; + + describe('returns an object with an empty array of stages if', () => { + it('no data is passed', () => { + expect(preparePipelineGraphData({})).toEqual(emptyResponse); + }); + + it('no stages are found', () => { + expect(preparePipelineGraphData({ includes: 'template/myTemplate.gitlab-ci.yml' })).toEqual( + emptyResponse, + ); + }); + }); + + describe('returns the correct array of stages', () => { + it('when multiple jobs are in the same stage', () => { + const expectedData = { + stages: [ + { + name: job1[jobName1].stage, + groups: [ + { + name: jobName1, + jobs: [{ script: job1[jobName1].script, stage: job1[jobName1].stage }], + }, + { + name: jobName2, + jobs: [{ script: job2[jobName2].script, stage: job2[jobName2].stage }], + }, + ], + }, + ], + }; + + expect(preparePipelineGraphData({ ...job1, ...job2 })).toEqual(expectedData); + }); + + it('when stages are defined by the user', () => { + const userDefinedStage = 'myStage'; + const userDefinedStage2 = 'myStage2'; + + const expectedData = { + stages: [ + { + name: userDefinedStage, + groups: [], + }, + { + name: userDefinedStage2, + groups: [], + }, + ], + }; + + expect(preparePipelineGraphData({ stages: [userDefinedStage, userDefinedStage2] })).toEqual( + expectedData, + ); + }); + + it('by combining user defined stage and job stages, it preserves user defined order', () => { + const userDefinedStage = 'myStage'; + const userDefinedStageThatOverlaps = 'deploy'; + + const expectedData = { + stages: [ + { + name: userDefinedStage, + groups: [], + }, + { + name: job4[jobName4].stage, + groups: [ + { + name: jobName4, + jobs: [{ script: job4[jobName4].script, stage: job4[jobName4].stage }], + }, + ], + }, + { + name: job1[jobName1].stage, + groups: [ + { + name: jobName1, + jobs: [{ script: job1[jobName1].script, stage: job1[jobName1].stage }], + }, + { + name: jobName2, + jobs: [{ script: job2[jobName2].script, stage: job2[jobName2].stage }], + }, + ], + }, + { + name: job3[jobName3].stage, + groups: [ + { + name: jobName3, + jobs: [{ script: job3[jobName3].script, stage: job3[jobName3].stage }], + }, + ], + }, + ], + }; + + expect( + preparePipelineGraphData({ + stages: [userDefinedStage, userDefinedStageThatOverlaps], + ...job1, + ...job2, + ...job3, + ...job4, + }), + ).toEqual(expectedData); + }); + + it('with only unique values', () => { + const expectedData = { + stages: [ + { + name: job1[jobName1].stage, + groups: [ + { + name: jobName1, + jobs: [{ script: job1[jobName1].script, stage: job1[jobName1].stage }], + }, + ], + }, + ], + }; + + expect( + preparePipelineGraphData({ + stages: ['build'], + ...job1, + ...job1, + }), + ).toEqual(expectedData); + }); + }); +}); |