diff --git a/spec/frontend/fixtures/pipeline_details.rb b/spec/frontend/fixtures/pipeline_details.rb new file mode 100644 index 0000000000000000000000000000000000000000..af9b11b0841370c7e0bc921192ae80a9808b9ee2 --- /dev/null +++ b/spec/frontend/fixtures/pipeline_details.rb @@ -0,0 +1,38 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe "GraphQL Pipeline details", '(JavaScript fixtures)', type: :request, feature_category: :pipeline_composition do + include ApiHelpers + include GraphqlHelpers + include JavaScriptFixturesHelpers + + let_it_be(:namespace) { create(:namespace, name: 'frontend-fixtures') } + let_it_be(:project) { create(:project, :public, :repository) } + let_it_be(:admin) { project.first_owner } + let_it_be(:commit) { create(:commit, project: project) } + let_it_be(:pipeline) do + create(:ci_pipeline, project: project, sha: commit.id, ref: 'master', user: admin, status: :success) + end + + let_it_be(:build_success) do + create(:ci_build, :dependent, name: 'build_my_app', pipeline: pipeline, stage: 'build', status: :success) + end + + let_it_be(:build_test) { create(:ci_build, :dependent, name: 'test_my_app', pipeline: pipeline, stage: 'test') } + let_it_be(:build_deploy_failed) do + create(:ci_build, :dependent, name: 'deploy_my_app', status: :failed, pipeline: pipeline, stage: 'deploy') + end + + let_it_be(:bridge) { create(:ci_bridge, pipeline: pipeline) } + + let(:pipeline_details_query_path) { 'app/graphql/queries/pipelines/get_pipeline_details.query.graphql' } + + it "pipelines/pipeline_details.json" do + query = get_graphql_query_as_string(pipeline_details_query_path, with_base_path: false) + + post_graphql(query, current_user: admin, variables: { projectPath: project.full_path, iid: pipeline.iid }) + + expect_graphql_errors_to_be_empty + end +end diff --git a/spec/frontend/pipelines/__snapshots__/utils_spec.js.snap b/spec/frontend/pipelines/__snapshots__/utils_spec.js.snap deleted file mode 100644 index 724ec7366d30dfdf539ede8e87d4f17e9ffc3af3..0000000000000000000000000000000000000000 --- a/spec/frontend/pipelines/__snapshots__/utils_spec.js.snap +++ /dev/null @@ -1,471 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`DAG visualization parsing utilities generateColumnsFromLayersList matches the snapshot 1`] = ` -Array [ - Object { - "groups": Array [ - Object { - "__typename": "CiGroup", - "id": "4", - "jobs": Array [ - Object { - "__typename": "CiJob", - "id": "6", - "kind": "BUILD", - "name": "build_a_nlfjkdnlvskfnksvjknlfdjvlvnjdkjdf_nvjkenjkrlngjeknjkl", - "needs": Array [], - "previousStageJobsOrNeeds": Array [], - "scheduledAt": null, - "status": Object { - "__typename": "DetailedStatus", - "action": Object { - "__typename": "StatusAction", - "buttonTitle": "Retry this job", - "icon": "retry", - "id": "8", - "path": "/root/abcd-dag/-/jobs/1482/retry", - "title": "Retry", - }, - "detailsPath": "/root/abcd-dag/-/jobs/1482", - "group": "success", - "hasDetails": true, - "icon": "status_success", - "id": "7", - "label": "passed", - "tooltip": "passed", - }, - }, - ], - "name": "build_a_nlfjkdnlvskfnksvjknlfdjvlvnjdkjdf_nvjkenjkrlngjeknjkl", - "size": 1, - "stageName": "build", - "status": Object { - "__typename": "DetailedStatus", - "group": "success", - "icon": "status_success", - "id": "5", - "label": "passed", - }, - }, - Object { - "__typename": "CiGroup", - "id": "9", - "jobs": Array [ - Object { - "__typename": "CiJob", - "id": "11", - "kind": "BUILD", - "name": "build_b", - "needs": Array [], - "previousStageJobsOrNeeds": Array [], - "scheduledAt": null, - "status": Object { - "__typename": "DetailedStatus", - "action": Object { - "__typename": "StatusAction", - "buttonTitle": "Retry this job", - "icon": "retry", - "id": "13", - "path": "/root/abcd-dag/-/jobs/1515/retry", - "title": "Retry", - }, - "detailsPath": "/root/abcd-dag/-/jobs/1515", - "group": "success", - "hasDetails": true, - "icon": "status_success", - "id": "12", - "label": "passed", - "tooltip": "passed", - }, - }, - ], - "name": "build_b", - "size": 1, - "stageName": "build", - "status": Object { - "__typename": "DetailedStatus", - "group": "success", - "icon": "status_success", - "id": "10", - "label": "passed", - }, - }, - Object { - "__typename": "CiGroup", - "id": "14", - "jobs": Array [ - Object { - "__typename": "CiJob", - "id": "16", - "kind": "BUILD", - "name": "build_c", - "needs": Array [], - "previousStageJobsOrNeeds": Array [], - "scheduledAt": null, - "status": Object { - "__typename": "DetailedStatus", - "action": Object { - "__typename": "StatusAction", - "buttonTitle": "Retry this job", - "icon": "retry", - "id": "18", - "path": "/root/abcd-dag/-/jobs/1484/retry", - "title": "Retry", - }, - "detailsPath": "/root/abcd-dag/-/jobs/1484", - "group": "success", - "hasDetails": true, - "icon": "status_success", - "id": "17", - "label": "passed", - "tooltip": "passed", - }, - }, - ], - "name": "build_c", - "size": 1, - "stageName": "build", - "status": Object { - "__typename": "DetailedStatus", - "group": "success", - "icon": "status_success", - "id": "15", - "label": "passed", - }, - }, - Object { - "__typename": "CiGroup", - "id": "19", - "jobs": Array [ - Object { - "__typename": "CiJob", - "id": "21", - "kind": "BUILD", - "name": "build_d 1/3", - "needs": Array [], - "previousStageJobsOrNeeds": Array [], - "scheduledAt": null, - "status": Object { - "__typename": "DetailedStatus", - "action": Object { - "__typename": "StatusAction", - "buttonTitle": "Retry this job", - "icon": "retry", - "id": "23", - "path": "/root/abcd-dag/-/jobs/1485/retry", - "title": "Retry", - }, - "detailsPath": "/root/abcd-dag/-/jobs/1485", - "group": "success", - "hasDetails": true, - "icon": "status_success", - "id": "22", - "label": "passed", - "tooltip": "passed", - }, - }, - Object { - "__typename": "CiJob", - "id": "24", - "kind": "BUILD", - "name": "build_d 2/3", - "needs": Array [], - "previousStageJobsOrNeeds": Array [], - "scheduledAt": null, - "status": Object { - "__typename": "DetailedStatus", - "action": Object { - "__typename": "StatusAction", - "buttonTitle": "Retry this job", - "icon": "retry", - "id": "26", - "path": "/root/abcd-dag/-/jobs/1486/retry", - "title": "Retry", - }, - "detailsPath": "/root/abcd-dag/-/jobs/1486", - "group": "success", - "hasDetails": true, - "icon": "status_success", - "id": "25", - "label": "passed", - "tooltip": "passed", - }, - }, - Object { - "__typename": "CiJob", - "id": "27", - "kind": "BUILD", - "name": "build_d 3/3", - "needs": Array [], - "previousStageJobsOrNeeds": Array [], - "scheduledAt": null, - "status": Object { - "__typename": "DetailedStatus", - "action": Object { - "__typename": "StatusAction", - "buttonTitle": "Retry this job", - "icon": "retry", - "id": "29", - "path": "/root/abcd-dag/-/jobs/1487/retry", - "title": "Retry", - }, - "detailsPath": "/root/abcd-dag/-/jobs/1487", - "group": "success", - "hasDetails": true, - "icon": "status_success", - "id": "28", - "label": "passed", - "tooltip": "passed", - }, - }, - ], - "name": "build_d", - "size": 3, - "stageName": "build", - "status": Object { - "__typename": "DetailedStatus", - "group": "success", - "icon": "status_success", - "id": "20", - "label": "passed", - }, - }, - Object { - "__typename": "CiGroup", - "id": "57", - "jobs": Array [ - Object { - "__typename": "CiJob", - "id": "59", - "kind": "BUILD", - "name": "test_c", - "needs": Array [], - "previousStageJobsOrNeeds": Array [], - "scheduledAt": null, - "status": Object { - "__typename": "DetailedStatus", - "action": null, - "detailsPath": "/root/kinder-pipe/-/pipelines/154", - "group": "success", - "hasDetails": true, - "icon": "status_success", - "id": "60", - "label": null, - "tooltip": null, - }, - }, - ], - "name": "test_c", - "size": 1, - "stageName": "test", - "status": Object { - "__typename": "DetailedStatus", - "group": "success", - "icon": "status_success", - "id": "58", - "label": null, - }, - }, - ], - "id": "layer-0", - "name": "", - "status": Object { - "action": null, - }, - }, - Object { - "groups": Array [ - Object { - "__typename": "CiGroup", - "id": "32", - "jobs": Array [ - Object { - "__typename": "CiJob", - "id": "34", - "kind": "BUILD", - "name": "test_a", - "needs": Array [ - "build_c", - "build_b", - "build_a_nlfjkdnlvskfnksvjknlfdjvlvnjdkjdf_nvjkenjkrlngjeknjkl", - ], - "previousStageJobsOrNeeds": Array [ - "build_c", - "build_b", - "build_a_nlfjkdnlvskfnksvjknlfdjvlvnjdkjdf_nvjkenjkrlngjeknjkl", - ], - "scheduledAt": null, - "status": Object { - "__typename": "DetailedStatus", - "action": Object { - "__typename": "StatusAction", - "buttonTitle": "Retry this job", - "icon": "retry", - "id": "36", - "path": "/root/abcd-dag/-/jobs/1514/retry", - "title": "Retry", - }, - "detailsPath": "/root/abcd-dag/-/jobs/1514", - "group": "success", - "hasDetails": true, - "icon": "status_success", - "id": "35", - "label": "passed", - "tooltip": "passed", - }, - }, - ], - "name": "test_a", - "size": 1, - "stageName": "test", - "status": Object { - "__typename": "DetailedStatus", - "group": "success", - "icon": "status_success", - "id": "33", - "label": "passed", - }, - }, - Object { - "__typename": "CiGroup", - "id": "40", - "jobs": Array [ - Object { - "__typename": "CiJob", - "id": "42", - "kind": "BUILD", - "name": "test_b 1/2", - "needs": Array [ - "build_d 3/3", - "build_d 2/3", - "build_d 1/3", - "build_b", - "build_a_nlfjkdnlvskfnksvjknlfdjvlvnjdkjdf_nvjkenjkrlngjeknjkl", - ], - "previousStageJobsOrNeeds": Array [ - "build_d 3/3", - "build_d 2/3", - "build_d 1/3", - "build_b", - "build_a_nlfjkdnlvskfnksvjknlfdjvlvnjdkjdf_nvjkenjkrlngjeknjkl", - ], - "scheduledAt": null, - "status": Object { - "__typename": "DetailedStatus", - "action": Object { - "__typename": "StatusAction", - "buttonTitle": "Retry this job", - "icon": "retry", - "id": "44", - "path": "/root/abcd-dag/-/jobs/1489/retry", - "title": "Retry", - }, - "detailsPath": "/root/abcd-dag/-/jobs/1489", - "group": "success", - "hasDetails": true, - "icon": "status_success", - "id": "43", - "label": "passed", - "tooltip": "passed", - }, - }, - Object { - "__typename": "CiJob", - "id": "67", - "kind": "BUILD", - "name": "test_b 2/2", - "needs": Array [ - "build_d 3/3", - "build_d 2/3", - "build_d 1/3", - "build_b", - "build_a_nlfjkdnlvskfnksvjknlfdjvlvnjdkjdf_nvjkenjkrlngjeknjkl", - ], - "previousStageJobsOrNeeds": Array [ - "build_d 3/3", - "build_d 2/3", - "build_d 1/3", - "build_b", - "build_a_nlfjkdnlvskfnksvjknlfdjvlvnjdkjdf_nvjkenjkrlngjeknjkl", - ], - "scheduledAt": null, - "status": Object { - "__typename": "DetailedStatus", - "action": Object { - "__typename": "StatusAction", - "buttonTitle": "Retry this job", - "icon": "retry", - "id": "51", - "path": "/root/abcd-dag/-/jobs/1490/retry", - "title": "Retry", - }, - "detailsPath": "/root/abcd-dag/-/jobs/1490", - "group": "success", - "hasDetails": true, - "icon": "status_success", - "id": "50", - "label": "passed", - "tooltip": "passed", - }, - }, - ], - "name": "test_b", - "size": 2, - "stageName": "test", - "status": Object { - "__typename": "DetailedStatus", - "group": "success", - "icon": "status_success", - "id": "41", - "label": "passed", - }, - }, - Object { - "__typename": "CiGroup", - "id": "61", - "jobs": Array [ - Object { - "__typename": "CiJob", - "id": "53", - "kind": "BUILD", - "name": "test_d", - "needs": Array [ - "build_b", - ], - "previousStageJobsOrNeeds": Array [ - "build_b", - ], - "scheduledAt": null, - "status": Object { - "__typename": "DetailedStatus", - "action": null, - "detailsPath": "/root/abcd-dag/-/pipelines/153", - "group": "success", - "hasDetails": true, - "icon": "status_success", - "id": "64", - "label": null, - "tooltip": null, - }, - }, - ], - "name": "test_d", - "size": 1, - "stageName": "test", - "status": Object { - "__typename": "DetailedStatus", - "group": "success", - "icon": "status_success", - "id": "62", - "label": null, - }, - }, - ], - "id": "layer-1", - "name": "", - "status": Object { - "action": null, - }, - }, -] -`; diff --git a/spec/frontend/pipelines/graph/graph_component_spec.js b/spec/frontend/pipelines/graph/graph_component_spec.js index 95207fd59ff2ba20895999f21195a6b026c197c6..e9bce03780088276b73115ecf811d8729252dcb8 100644 --- a/spec/frontend/pipelines/graph/graph_component_spec.js +++ b/spec/frontend/pipelines/graph/graph_component_spec.js @@ -1,4 +1,5 @@ import { shallowMount } from '@vue/test-utils'; +import mockPipelineResponse from 'test_fixtures/pipelines/pipeline_details.json'; import { mountExtended } from 'helpers/vue_test_utils_helper'; import { LAYER_VIEW, STAGE_VIEW } from '~/pipelines/components/graph/constants'; import PipelineGraph from '~/pipelines/components/graph/graph_component.vue'; @@ -7,11 +8,8 @@ import LinkedPipelinesColumn from '~/pipelines/components/graph/linked_pipelines import StageColumnComponent from '~/pipelines/components/graph/stage_column_component.vue'; import { calculatePipelineLayersInfo } from '~/pipelines/components/graph/utils'; import LinksLayer from '~/pipelines/components/graph_shared/links_layer.vue'; -import { - generateResponse, - mockPipelineResponse, - pipelineWithUpstreamDownstream, -} from './mock_data'; + +import { generateResponse, pipelineWithUpstreamDownstream } from './mock_data'; describe('graph component', () => { let wrapper; diff --git a/spec/frontend/pipelines/graph/graph_component_wrapper_spec.js b/spec/frontend/pipelines/graph/graph_component_wrapper_spec.js index cc952eac1d7b5c997f9690c800211b3ca739f727..9599b5e6b7b391ce5405499e5e24609e5dfb20c4 100644 --- a/spec/frontend/pipelines/graph/graph_component_wrapper_spec.js +++ b/spec/frontend/pipelines/graph/graph_component_wrapper_spec.js @@ -2,6 +2,7 @@ import { GlAlert, GlButton, GlButtonGroup, GlLoadingIcon, GlToggle } from '@gitl import MockAdapter from 'axios-mock-adapter'; import Vue from 'vue'; import VueApollo from 'vue-apollo'; +import mockPipelineResponse from 'test_fixtures/pipelines/pipeline_details.json'; import { useLocalStorageSpy } from 'helpers/local_storage_helper'; import createMockApollo from 'helpers/mock_apollo_helper'; import { mountExtended, shallowMountExtended } from 'helpers/vue_test_utils_helper'; @@ -26,7 +27,6 @@ import { import PipelineGraph from '~/pipelines/components/graph/graph_component.vue'; import PipelineGraphWrapper from '~/pipelines/components/graph/graph_component_wrapper.vue'; import GraphViewSelector from '~/pipelines/components/graph/graph_view_selector.vue'; -import StageColumnComponent from '~/pipelines/components/graph/stage_column_component.vue'; import * as Api from '~/pipelines/components/graph_shared/api'; import LinksLayer from '~/pipelines/components/graph_shared/links_layer.vue'; import * as parsingUtils from '~/pipelines/components/parsing_utils'; @@ -34,7 +34,7 @@ import getPipelineHeaderData from '~/pipelines/graphql/queries/get_pipeline_head import * as sentryUtils from '~/pipelines/utils'; import LocalStorageSync from '~/vue_shared/components/local_storage_sync.vue'; import { mockRunningPipelineHeaderData } from '../mock_data'; -import { mapCallouts, mockCalloutsResponse, mockPipelineResponse } from './mock_data'; +import { mapCallouts, mockCalloutsResponse } from './mock_data'; const defaultProvide = { graphqlResourceEtag: 'frog/amphibirama/etag/', @@ -55,8 +55,6 @@ describe('Pipeline graph wrapper', () => { const findLinksLayer = () => wrapper.findComponent(LinksLayer); const findGraph = () => wrapper.findComponent(PipelineGraph); const findStageColumnTitle = () => wrapper.findByTestId('stage-column-title'); - const findAllStageColumnGroupsInColumn = () => - wrapper.findComponent(StageColumnComponent).findAll('[data-testid="stage-column-group"]'); const findViewSelector = () => wrapper.findComponent(GraphViewSelector); const findViewSelectorToggle = () => findViewSelector().findComponent(GlToggle); const findViewSelectorTrip = () => findViewSelector().findComponent(GlAlert); @@ -316,12 +314,10 @@ describe('Pipeline graph wrapper', () => { }); it('switches between views', async () => { - const groupsInFirstColumn = - mockPipelineResponse.data.project.pipeline.stages.nodes[0].groups.nodes.length; - expect(findAllStageColumnGroupsInColumn()).toHaveLength(groupsInFirstColumn); - expect(findStageColumnTitle().text()).toBe('build'); + expect(findStageColumnTitle().text()).toBe('deploy'); + await findViewSelector().vm.$emit('updateViewType', LAYER_VIEW); - expect(findAllStageColumnGroupsInColumn()).toHaveLength(groupsInFirstColumn + 1); + expect(findStageColumnTitle().text()).toBe(''); }); @@ -507,9 +503,9 @@ describe('Pipeline graph wrapper', () => { }); describe('with metrics path', () => { - const duration = 875; - const numLinks = 7; - const totalGroups = 8; + const duration = 500; + const numLinks = 3; + const totalGroups = 7; const metricsData = { histograms: [ { name: PIPELINES_DETAIL_LINK_DURATION, value: duration / 1000 }, @@ -559,9 +555,6 @@ describe('Pipeline graph wrapper', () => { createComponentWithApollo({ provide: { metricsPath, - glFeatures: { - pipelineGraphLayersView: true, - }, }, data: { currentViewType: LAYER_VIEW, diff --git a/spec/frontend/pipelines/graph/linked_pipelines_column_spec.js b/spec/frontend/pipelines/graph/linked_pipelines_column_spec.js index 6e4b94989186430668fba15e63ee5bc79ab29d7c..bcea140f2dd4f73b9e3f26edca14a4d1fd22c2be 100644 --- a/spec/frontend/pipelines/graph/linked_pipelines_column_spec.js +++ b/spec/frontend/pipelines/graph/linked_pipelines_column_spec.js @@ -1,6 +1,7 @@ import { mount, shallowMount } from '@vue/test-utils'; import Vue, { nextTick } from 'vue'; import VueApollo from 'vue-apollo'; +import mockPipelineResponse from 'test_fixtures/pipelines/pipeline_details.json'; import createMockApollo from 'helpers/mock_apollo_helper'; import waitForPromises from 'helpers/wait_for_promises'; import getPipelineDetails from 'shared_queries/pipelines/get_pipeline_details.query.graphql'; @@ -15,11 +16,8 @@ import LinkedPipeline from '~/pipelines/components/graph/linked_pipeline.vue'; import LinkedPipelinesColumn from '~/pipelines/components/graph/linked_pipelines_column.vue'; import * as parsingUtils from '~/pipelines/components/parsing_utils'; import { LOAD_FAILURE } from '~/pipelines/constants'; -import { - mockPipelineResponse, - pipelineWithUpstreamDownstream, - wrappedPipelineReturn, -} from './mock_data'; + +import { pipelineWithUpstreamDownstream, wrappedPipelineReturn } from './mock_data'; const processedPipeline = pipelineWithUpstreamDownstream(mockPipelineResponse); diff --git a/spec/frontend/pipelines/graph/mock_data.js b/spec/frontend/pipelines/graph/mock_data.js index 08624cc511d6159220170493458779fe6a2dfe29..b012e7f66e1099667fb7da9aa235ac49ce2c773c 100644 --- a/spec/frontend/pipelines/graph/mock_data.js +++ b/spec/frontend/pipelines/graph/mock_data.js @@ -5,710 +5,6 @@ import { RETRY_ACTION_TITLE, } from '~/pipelines/components/graph/constants'; -export const mockPipelineResponse = { - data: { - project: { - __typename: 'Project', - id: '1', - pipeline: { - __typename: 'Pipeline', - id: 163, - iid: '22', - complete: true, - usesNeeds: true, - downstream: null, - upstream: null, - userPermissions: { - __typename: 'PipelinePermissions', - updatePipeline: true, - }, - stages: { - __typename: 'CiStageConnection', - nodes: [ - { - __typename: 'CiStage', - id: '2', - name: 'build', - status: { - __typename: 'DetailedStatus', - id: '3', - action: null, - }, - groups: { - __typename: 'CiGroupConnection', - nodes: [ - { - __typename: 'CiGroup', - id: '4', - name: 'build_a_nlfjkdnlvskfnksvjknlfdjvlvnjdkjdf_nvjkenjkrlngjeknjkl', - size: 1, - status: { - __typename: 'DetailedStatus', - id: '5', - label: 'passed', - group: 'success', - icon: 'status_success', - }, - jobs: { - __typename: 'CiJobConnection', - nodes: [ - { - __typename: 'CiJob', - id: '6', - kind: BUILD_KIND, - name: 'build_a_nlfjkdnlvskfnksvjknlfdjvlvnjdkjdf_nvjkenjkrlngjeknjkl', - scheduledAt: null, - status: { - __typename: 'DetailedStatus', - id: '7', - icon: 'status_success', - tooltip: 'passed', - label: 'passed', - hasDetails: true, - detailsPath: '/root/abcd-dag/-/jobs/1482', - group: 'success', - action: { - __typename: 'StatusAction', - id: '8', - buttonTitle: 'Retry this job', - icon: 'retry', - path: '/root/abcd-dag/-/jobs/1482/retry', - title: 'Retry', - }, - }, - needs: { - __typename: 'CiBuildNeedConnection', - nodes: [], - }, - previousStageJobsOrNeeds: { - __typename: 'CiJobConnection', - nodes: [], - }, - }, - ], - }, - }, - { - __typename: 'CiGroup', - name: 'build_b', - id: '9', - size: 1, - status: { - __typename: 'DetailedStatus', - id: '10', - label: 'passed', - group: 'success', - icon: 'status_success', - }, - jobs: { - __typename: 'CiJobConnection', - nodes: [ - { - __typename: 'CiJob', - id: '11', - name: 'build_b', - kind: BUILD_KIND, - scheduledAt: null, - status: { - __typename: 'DetailedStatus', - id: '12', - icon: 'status_success', - tooltip: 'passed', - label: 'passed', - hasDetails: true, - detailsPath: '/root/abcd-dag/-/jobs/1515', - group: 'success', - action: { - __typename: 'StatusAction', - id: '13', - buttonTitle: 'Retry this job', - icon: 'retry', - path: '/root/abcd-dag/-/jobs/1515/retry', - title: 'Retry', - }, - }, - needs: { - __typename: 'CiBuildNeedConnection', - nodes: [], - }, - previousStageJobsOrNeeds: { - __typename: 'CiJobConnection', - nodes: [], - }, - }, - ], - }, - }, - { - __typename: 'CiGroup', - id: '14', - name: 'build_c', - size: 1, - status: { - __typename: 'DetailedStatus', - id: '15', - label: 'passed', - group: 'success', - icon: 'status_success', - }, - jobs: { - __typename: 'CiJobConnection', - nodes: [ - { - __typename: 'CiJob', - id: '16', - name: 'build_c', - kind: BUILD_KIND, - scheduledAt: null, - status: { - __typename: 'DetailedStatus', - id: '17', - icon: 'status_success', - tooltip: 'passed', - label: 'passed', - hasDetails: true, - detailsPath: '/root/abcd-dag/-/jobs/1484', - group: 'success', - action: { - __typename: 'StatusAction', - id: '18', - buttonTitle: 'Retry this job', - icon: 'retry', - path: '/root/abcd-dag/-/jobs/1484/retry', - title: 'Retry', - }, - }, - needs: { - __typename: 'CiBuildNeedConnection', - nodes: [], - }, - previousStageJobsOrNeeds: { - __typename: 'CiJobConnection', - nodes: [], - }, - }, - ], - }, - }, - { - __typename: 'CiGroup', - id: '19', - name: 'build_d', - size: 3, - status: { - __typename: 'DetailedStatus', - id: '20', - label: 'passed', - group: 'success', - icon: 'status_success', - }, - jobs: { - __typename: 'CiJobConnection', - nodes: [ - { - __typename: 'CiJob', - id: '21', - kind: BUILD_KIND, - name: 'build_d 1/3', - scheduledAt: null, - status: { - __typename: 'DetailedStatus', - id: '22', - icon: 'status_success', - tooltip: 'passed', - label: 'passed', - hasDetails: true, - detailsPath: '/root/abcd-dag/-/jobs/1485', - group: 'success', - action: { - __typename: 'StatusAction', - id: '23', - buttonTitle: 'Retry this job', - icon: 'retry', - path: '/root/abcd-dag/-/jobs/1485/retry', - title: 'Retry', - }, - }, - needs: { - __typename: 'CiBuildNeedConnection', - nodes: [], - }, - previousStageJobsOrNeeds: { - __typename: 'CiJobConnection', - nodes: [], - }, - }, - { - __typename: 'CiJob', - id: '24', - kind: BUILD_KIND, - name: 'build_d 2/3', - scheduledAt: null, - status: { - __typename: 'DetailedStatus', - id: '25', - icon: 'status_success', - tooltip: 'passed', - label: 'passed', - hasDetails: true, - detailsPath: '/root/abcd-dag/-/jobs/1486', - group: 'success', - action: { - __typename: 'StatusAction', - id: '26', - buttonTitle: 'Retry this job', - icon: 'retry', - path: '/root/abcd-dag/-/jobs/1486/retry', - title: 'Retry', - }, - }, - needs: { - __typename: 'CiBuildNeedConnection', - nodes: [], - }, - previousStageJobsOrNeeds: { - __typename: 'CiJobConnection', - nodes: [], - }, - }, - { - __typename: 'CiJob', - id: '27', - kind: BUILD_KIND, - name: 'build_d 3/3', - scheduledAt: null, - status: { - __typename: 'DetailedStatus', - id: '28', - icon: 'status_success', - tooltip: 'passed', - label: 'passed', - hasDetails: true, - detailsPath: '/root/abcd-dag/-/jobs/1487', - group: 'success', - action: { - __typename: 'StatusAction', - id: '29', - buttonTitle: 'Retry this job', - icon: 'retry', - path: '/root/abcd-dag/-/jobs/1487/retry', - title: 'Retry', - }, - }, - needs: { - __typename: 'CiBuildNeedConnection', - nodes: [], - }, - previousStageJobsOrNeeds: { - __typename: 'CiJobConnection', - nodes: [], - }, - }, - ], - }, - }, - ], - }, - }, - { - __typename: 'CiStage', - id: '30', - name: 'test', - status: { - __typename: 'DetailedStatus', - id: '31', - action: null, - }, - groups: { - __typename: 'CiGroupConnection', - nodes: [ - { - __typename: 'CiGroup', - id: '32', - name: 'test_a', - size: 1, - status: { - __typename: 'DetailedStatus', - id: '33', - label: 'passed', - group: 'success', - icon: 'status_success', - }, - jobs: { - __typename: 'CiJobConnection', - nodes: [ - { - __typename: 'CiJob', - id: '34', - kind: BUILD_KIND, - name: 'test_a', - scheduledAt: null, - status: { - __typename: 'DetailedStatus', - id: '35', - icon: 'status_success', - tooltip: 'passed', - label: 'passed', - hasDetails: true, - detailsPath: '/root/abcd-dag/-/jobs/1514', - group: 'success', - action: { - __typename: 'StatusAction', - id: '36', - buttonTitle: 'Retry this job', - icon: 'retry', - path: '/root/abcd-dag/-/jobs/1514/retry', - title: 'Retry', - }, - }, - needs: { - __typename: 'CiBuildNeedConnection', - nodes: [ - { - __typename: 'CiBuildNeed', - id: '37', - name: 'build_c', - }, - { - __typename: 'CiBuildNeed', - id: '38', - name: 'build_b', - }, - { - __typename: 'CiBuildNeed', - id: '39', - name: - 'build_a_nlfjkdnlvskfnksvjknlfdjvlvnjdkjdf_nvjkenjkrlngjeknjkl', - }, - ], - }, - previousStageJobsOrNeeds: { - __typename: 'CiJobConnection', - nodes: [ - { - __typename: 'CiBuildNeed', - id: '37', - name: 'build_c', - }, - { - __typename: 'CiBuildNeed', - id: '38', - name: 'build_b', - }, - { - __typename: 'CiBuildNeed', - id: '39', - name: - 'build_a_nlfjkdnlvskfnksvjknlfdjvlvnjdkjdf_nvjkenjkrlngjeknjkl', - }, - ], - }, - }, - ], - }, - }, - { - __typename: 'CiGroup', - id: '40', - name: 'test_b', - size: 2, - status: { - __typename: 'DetailedStatus', - id: '41', - label: 'passed', - group: 'success', - icon: 'status_success', - }, - jobs: { - __typename: 'CiJobConnection', - nodes: [ - { - __typename: 'CiJob', - id: '42', - kind: BUILD_KIND, - name: 'test_b 1/2', - scheduledAt: null, - status: { - __typename: 'DetailedStatus', - id: '43', - icon: 'status_success', - tooltip: 'passed', - label: 'passed', - hasDetails: true, - detailsPath: '/root/abcd-dag/-/jobs/1489', - group: 'success', - action: { - __typename: 'StatusAction', - id: '44', - buttonTitle: 'Retry this job', - icon: 'retry', - path: '/root/abcd-dag/-/jobs/1489/retry', - title: 'Retry', - }, - }, - needs: { - __typename: 'CiBuildNeedConnection', - nodes: [ - { - __typename: 'CiBuildNeed', - id: '45', - name: 'build_d 3/3', - }, - { - __typename: 'CiBuildNeed', - id: '46', - name: 'build_d 2/3', - }, - { - __typename: 'CiBuildNeed', - id: '47', - name: 'build_d 1/3', - }, - { - __typename: 'CiBuildNeed', - id: '48', - name: 'build_b', - }, - { - __typename: 'CiBuildNeed', - id: '49', - name: - 'build_a_nlfjkdnlvskfnksvjknlfdjvlvnjdkjdf_nvjkenjkrlngjeknjkl', - }, - ], - }, - previousStageJobsOrNeeds: { - __typename: 'CiJobConnection', - nodes: [ - { - __typename: 'CiBuildNeed', - id: '45', - name: 'build_d 3/3', - }, - { - __typename: 'CiBuildNeed', - id: '46', - name: 'build_d 2/3', - }, - { - __typename: 'CiBuildNeed', - id: '47', - name: 'build_d 1/3', - }, - { - __typename: 'CiBuildNeed', - id: '48', - name: 'build_b', - }, - { - __typename: 'CiBuildNeed', - id: '49', - name: - 'build_a_nlfjkdnlvskfnksvjknlfdjvlvnjdkjdf_nvjkenjkrlngjeknjkl', - }, - ], - }, - }, - { - __typename: 'CiJob', - id: '67', - kind: BUILD_KIND, - name: 'test_b 2/2', - scheduledAt: null, - status: { - __typename: 'DetailedStatus', - id: '50', - icon: 'status_success', - tooltip: 'passed', - label: 'passed', - hasDetails: true, - detailsPath: '/root/abcd-dag/-/jobs/1490', - group: 'success', - action: { - __typename: 'StatusAction', - id: '51', - buttonTitle: 'Retry this job', - icon: 'retry', - path: '/root/abcd-dag/-/jobs/1490/retry', - title: 'Retry', - }, - }, - needs: { - __typename: 'CiBuildNeedConnection', - nodes: [ - { - __typename: 'CiBuildNeed', - id: '52', - name: 'build_d 3/3', - }, - { - __typename: 'CiBuildNeed', - id: '53', - name: 'build_d 2/3', - }, - { - __typename: 'CiBuildNeed', - id: '54', - name: 'build_d 1/3', - }, - { - __typename: 'CiBuildNeed', - id: '55', - name: 'build_b', - }, - { - __typename: 'CiBuildNeed', - id: '56', - name: - 'build_a_nlfjkdnlvskfnksvjknlfdjvlvnjdkjdf_nvjkenjkrlngjeknjkl', - }, - ], - }, - previousStageJobsOrNeeds: { - __typename: 'CiJobConnection', - nodes: [ - { - __typename: 'CiBuildNeed', - id: '52', - name: 'build_d 3/3', - }, - { - __typename: 'CiBuildNeed', - id: '53', - name: 'build_d 2/3', - }, - { - __typename: 'CiBuildNeed', - id: '54', - name: 'build_d 1/3', - }, - { - __typename: 'CiBuildNeed', - id: '55', - name: 'build_b', - }, - { - __typename: 'CiBuildNeed', - id: '56', - name: - 'build_a_nlfjkdnlvskfnksvjknlfdjvlvnjdkjdf_nvjkenjkrlngjeknjkl', - }, - ], - }, - }, - ], - }, - }, - { - __typename: 'CiGroup', - name: 'test_c', - id: '57', - size: 1, - status: { - __typename: 'DetailedStatus', - id: '58', - label: null, - group: 'success', - icon: 'status_success', - }, - jobs: { - __typename: 'CiJobConnection', - nodes: [ - { - __typename: 'CiJob', - id: '59', - kind: BUILD_KIND, - name: 'test_c', - scheduledAt: null, - status: { - __typename: 'DetailedStatus', - id: '60', - icon: 'status_success', - tooltip: null, - label: null, - hasDetails: true, - detailsPath: '/root/kinder-pipe/-/pipelines/154', - group: 'success', - action: null, - }, - needs: { - __typename: 'CiBuildNeedConnection', - nodes: [], - }, - previousStageJobsOrNeeds: { - __typename: 'CiJobConnection', - nodes: [], - }, - }, - ], - }, - }, - { - __typename: 'CiGroup', - id: '61', - name: 'test_d', - size: 1, - status: { - id: '62', - __typename: 'DetailedStatus', - label: null, - group: 'success', - icon: 'status_success', - }, - jobs: { - __typename: 'CiJobConnection', - nodes: [ - { - __typename: 'CiJob', - id: '53', - kind: BUILD_KIND, - name: 'test_d', - scheduledAt: null, - status: { - __typename: 'DetailedStatus', - id: '64', - icon: 'status_success', - tooltip: null, - label: null, - hasDetails: true, - detailsPath: '/root/abcd-dag/-/pipelines/153', - group: 'success', - action: null, - }, - needs: { - __typename: 'CiBuildNeedConnection', - nodes: [ - { - __typename: 'CiBuildNeed', - id: '65', - name: 'build_b', - }, - ], - }, - previousStageJobsOrNeeds: { - __typename: 'CiJobConnection', - nodes: [ - { - __typename: 'CiBuildNeed', - id: '65', - name: 'build_b', - }, - ], - }, - }, - ], - }, - }, - ], - }, - }, - ], - }, - }, - }, - }, -}; - export const downstream = { nodes: [ { diff --git a/spec/frontend/pipelines/graph_shared/links_layer_spec.js b/spec/frontend/pipelines/graph_shared/links_layer_spec.js index 9d39c86ed5ece1628cd1a95854c94ea013a11dc5..88ba84c395a530c79ac3b8584b80304db9ce768e 100644 --- a/spec/frontend/pipelines/graph_shared/links_layer_spec.js +++ b/spec/frontend/pipelines/graph_shared/links_layer_spec.js @@ -1,7 +1,9 @@ import { shallowMount } from '@vue/test-utils'; +import mockPipelineResponse from 'test_fixtures/pipelines/pipeline_details.json'; import LinksInner from '~/pipelines/components/graph_shared/links_inner.vue'; import LinksLayer from '~/pipelines/components/graph_shared/links_layer.vue'; -import { generateResponse, mockPipelineResponse } from '../graph/mock_data'; + +import { generateResponse } from '../graph/mock_data'; describe('links layer component', () => { let wrapper; diff --git a/spec/frontend/pipelines/utils_spec.js b/spec/frontend/pipelines/utils_spec.js index 51e0e0705ffb77c6aae2608a986e3583f329b100..286d79edc6c94b55fede876e6f09c604fa6bc06e 100644 --- a/spec/frontend/pipelines/utils_spec.js +++ b/spec/frontend/pipelines/utils_spec.js @@ -1,3 +1,4 @@ +import mockPipelineResponse from 'test_fixtures/pipelines/pipeline_details.json'; import { createSankey } from '~/pipelines/components/dag/drawing_utils'; import { makeLinksFromNodes, @@ -14,7 +15,7 @@ import { createNodeDict } from '~/pipelines/utils'; import { mockDownstreamPipelinesRest } from '../vue_merge_request_widget/mock_data'; import { mockDownstreamPipelinesGraphql } from '../commit/mock_data'; import { mockParsedGraphQLNodes, missingJob } from './components/dag/mock_data'; -import { generateResponse, mockPipelineResponse } from './graph/mock_data'; +import { generateResponse } from './graph/mock_data'; describe('DAG visualization parsing utilities', () => { const nodeDict = createNodeDict(mockParsedGraphQLNodes); @@ -152,14 +153,6 @@ describe('DAG visualization parsing utilities', () => { }); }); }); - - /* - Just as a fallback in case multiple functions change, so tests pass - but the implementation moves away from case. - */ - it('matches the snapshot', () => { - expect(columns).toMatchSnapshot(); - }); }); }); diff --git a/spec/support/helpers/javascript_fixtures_helpers.rb b/spec/support/helpers/javascript_fixtures_helpers.rb index 403456fa48ede4479c760b3c46c0636d70a355c9..417bf4366c52f1507ca6817f133284d48933ab7a 100644 --- a/spec/support/helpers/javascript_fixtures_helpers.rb +++ b/spec/support/helpers/javascript_fixtures_helpers.rb @@ -46,9 +46,8 @@ def remove_repository(project) # # query_path - file path to the GraphQL query, relative to `app/assets/javascripts`. # ee - boolean, when true `query_path` will be looked up in `/ee`. - def get_graphql_query_as_string(query_path, ee: false) - base = (ee ? 'ee/' : '') + 'app/assets/javascripts' - + def get_graphql_query_as_string(query_path, ee: false, with_base_path: true) + base = (ee ? 'ee/' : '') + (with_base_path ? 'app/assets/javascripts' : '') path = Rails.root / base / query_path queries = Gitlab::Graphql::Queries.find(path) if queries.length == 1