import { CI_CONFIG_STATUS_VALID } from '~/pipeline_editor/constants'; import { unwrapStagesWithNeeds } from '~/pipelines/components/unwrapping_utils'; export const mockProjectNamespace = 'user1'; export const mockProjectPath = 'project1'; export const mockProjectFullPath = `${mockProjectNamespace}/${mockProjectPath}`; export const mockDefaultBranch = 'master'; export const mockNewMergeRequestPath = '/-/merge_requests/new'; export const mockCommitSha = 'aabbccdd'; export const mockCommitNextSha = 'eeffgghh'; export const mockLintHelpPagePath = '/-/lint-help'; export const mockYmlHelpPagePath = '/-/yml-help'; export const mockCommitMessage = 'My commit message'; export const mockCiConfigPath = '.gitlab-ci.yml'; export const mockCiYml = ` stages: - test - build job_test_1: stage: test script: - echo "test 1" job_test_2: stage: test script: - echo "test 2" job_build: stage: build script: - echo "build" needs: ["job_test_2"] `; const mockJobFields = { beforeScript: [], afterScript: [], environment: null, allowFailure: false, tags: [], when: 'on_success', only: { refs: ['branches', 'tags'], __typename: 'CiJobLimitType' }, except: null, needs: { nodes: [], __typename: 'CiConfigNeedConnection' }, __typename: 'CiConfigJob', }; // Mock result of the graphql query at: // app/assets/javascripts/pipeline_editor/graphql/queries/ci_config.graphql export const mockCiConfigQueryResponse = { data: { ciConfig: { errors: [], mergedYaml: mockCiYml, status: CI_CONFIG_STATUS_VALID, stages: { __typename: 'CiConfigStageConnection', nodes: [ { name: 'test', groups: { nodes: [ { name: 'job_test_1', size: 1, jobs: { nodes: [ { name: 'job_test_1', script: ['echo "test 1"'], ...mockJobFields, }, ], __typename: 'CiConfigJobConnection', }, __typename: 'CiConfigGroup', }, { name: 'job_test_2', size: 1, jobs: { nodes: [ { name: 'job_test_2', script: ['echo "test 2"'], ...mockJobFields, }, ], __typename: 'CiConfigJobConnection', }, __typename: 'CiConfigGroup', }, ], __typename: 'CiConfigGroupConnection', }, __typename: 'CiConfigStage', }, { name: 'build', groups: { nodes: [ { name: 'job_build', size: 1, jobs: { nodes: [ { name: 'job_build', script: ['echo "build"'], ...mockJobFields, }, ], __typename: 'CiConfigJobConnection', }, __typename: 'CiConfigGroup', }, ], __typename: 'CiConfigGroupConnection', }, __typename: 'CiConfigStage', }, ], }, __typename: 'CiConfig', }, }, }; export const mergeUnwrappedCiConfig = (mergedConfig) => { const { ciConfig } = mockCiConfigQueryResponse.data; return { ...ciConfig, stages: unwrapStagesWithNeeds(ciConfig.stages.nodes), ...mergedConfig, }; }; export const mockProjectBranches = { __typename: 'Project', repository: { __typename: 'Repository', branches: [ { __typename: 'Branch', name: 'master' }, { __typename: 'Branch', name: 'main' }, { __typename: 'Branch', name: 'develop' }, { __typename: 'Branch', name: 'production' }, { __typename: 'Branch', name: 'test' }, ], }, }; export const mockProjectPipeline = { pipeline: { commitPath: '/-/commit/aabbccdd', id: 'gid://gitlab/Ci::Pipeline/118', iid: '28', shortSha: mockCommitSha, status: 'SUCCESS', detailedStatus: { detailsPath: '/root/sample-ci-project/-/pipelines/118"', group: 'success', icon: 'status_success', text: 'passed', }, }, }; export const mockLintResponse = { valid: true, mergedYaml: mockCiYml, status: CI_CONFIG_STATUS_VALID, errors: [], warnings: [], jobs: [ { name: 'job_1', stage: 'test', before_script: ["echo 'before script 1'"], script: ["echo 'script 1'"], after_script: ["echo 'after script 1"], tag_list: ['tag 1'], environment: 'prd', when: 'on_success', allow_failure: false, only: null, except: { refs: ['master@gitlab-org/gitlab', '/^release/.*$/@gitlab-org/gitlab'] }, }, { name: 'job_2', stage: 'test', before_script: ["echo 'before script 2'"], script: ["echo 'script 2'"], after_script: ["echo 'after script 2"], tag_list: ['tag 2'], environment: 'stg', when: 'on_success', allow_failure: true, only: { refs: ['web', 'chat', 'pushes'] }, except: { refs: ['master@gitlab-org/gitlab', '/^release/.*$/@gitlab-org/gitlab'] }, }, ], }; export const mockJobs = [ { name: 'job_1', stage: 'build', beforeScript: [], script: ["echo 'Building'"], afterScript: [], tagList: [], environment: null, when: 'on_success', allowFailure: true, only: { refs: ['web', 'chat', 'pushes'] }, except: null, }, { name: 'multi_project_job', stage: 'test', beforeScript: [], script: [], afterScript: [], tagList: [], environment: null, when: 'on_success', allowFailure: false, only: { refs: ['branches', 'tags'] }, except: null, }, { name: 'job_2', stage: 'test', beforeScript: ["echo 'before script'"], script: ["echo 'script'"], afterScript: ["echo 'after script"], tagList: [], environment: null, when: 'on_success', allowFailure: false, only: { refs: ['branches@gitlab-org/gitlab'] }, except: { refs: ['master@gitlab-org/gitlab', '/^release/.*$/@gitlab-org/gitlab'] }, }, ]; export const mockErrors = [ '"job_1 job: chosen stage does not exist; available stages are .pre, build, test, deploy, .post"', ]; export const mockWarnings = [ '"jobs:multi_project_job may allow multiple pipelines to run for a single action due to `rules:when` clause with no `workflow:rules` - read more: https://docs.gitlab.com/ee/ci/troubleshooting.html#pipeline-warnings"', ];