diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2019-10-22 11:31:16 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2019-10-22 11:31:16 +0000 |
commit | 905c1110b08f93a19661cf42a276c7ea90d0a0ff (patch) | |
tree | 756d138db422392c00471ab06acdff92c5a9b69c /spec/javascripts/pipelines/graph | |
parent | 50d93f8d1686950fc58dda4823c4835fd0d8c14b (diff) | |
download | gitlab-ce-905c1110b08f93a19661cf42a276c7ea90d0a0ff.tar.gz |
Add latest changes from gitlab-org/gitlab@12-4-stable-ee
Diffstat (limited to 'spec/javascripts/pipelines/graph')
4 files changed, 764 insertions, 0 deletions
diff --git a/spec/javascripts/pipelines/graph/graph_component_spec.js b/spec/javascripts/pipelines/graph/graph_component_spec.js index 98e92aff25f..5effbaabcd1 100644 --- a/spec/javascripts/pipelines/graph/graph_component_spec.js +++ b/spec/javascripts/pipelines/graph/graph_component_spec.js @@ -1,10 +1,17 @@ import Vue from 'vue'; import mountComponent from 'spec/helpers/vue_mount_component_helper'; +import PipelineStore from '~/pipelines/stores/pipeline_store'; import graphComponent from '~/pipelines/components/graph/graph_component.vue'; import graphJSON from './mock_data'; +import linkedPipelineJSON from '../linked_pipelines_mock.json'; +import PipelinesMediator from '~/pipelines/pipeline_details_mediator'; describe('graph component', () => { const GraphComponent = Vue.extend(graphComponent); + const store = new PipelineStore(); + store.storePipeline(linkedPipelineJSON); + const mediator = new PipelinesMediator({ endpoint: '' }); + let component; beforeEach(() => { @@ -22,6 +29,7 @@ describe('graph component', () => { component = mountComponent(GraphComponent, { isLoading: true, pipeline: {}, + mediator, }); expect(component.$el.querySelector('.loading-icon')).toBeDefined(); @@ -33,6 +41,7 @@ describe('graph component', () => { component = mountComponent(GraphComponent, { isLoading: false, pipeline: graphJSON, + mediator, }); expect(component.$el.classList.contains('js-pipeline-graph')).toEqual(true); @@ -57,11 +66,205 @@ describe('graph component', () => { }); }); + describe('when linked pipelines are present', () => { + beforeEach(() => { + component = mountComponent(GraphComponent, { + isLoading: false, + pipeline: store.state.pipeline, + mediator, + }); + }); + + describe('rendered output', () => { + it('should include the pipelines graph', () => { + expect(component.$el.classList.contains('js-pipeline-graph')).toEqual(true); + }); + + it('should not include the loading icon', () => { + expect(component.$el.querySelector('.fa-spinner')).toBeNull(); + }); + + it('should include the stage column list', () => { + expect(component.$el.querySelector('.stage-column-list')).not.toBeNull(); + }); + + it('should include the no-margin class on the first child', () => { + const firstStageColumnElement = component.$el.querySelector( + '.stage-column-list .stage-column', + ); + + expect(firstStageColumnElement.classList.contains('no-margin')).toEqual(true); + }); + + it('should include the has-only-one-job class on the first child', () => { + const firstStageColumnElement = component.$el.querySelector( + '.stage-column-list .stage-column', + ); + + expect(firstStageColumnElement.classList.contains('has-only-one-job')).toEqual(true); + }); + + it('should include the left-margin class on the second child', () => { + const firstStageColumnElement = component.$el.querySelector( + '.stage-column-list .stage-column:last-child', + ); + + expect(firstStageColumnElement.classList.contains('left-margin')).toEqual(true); + }); + + it('should include the js-has-linked-pipelines flag', () => { + expect(component.$el.querySelector('.js-has-linked-pipelines')).not.toBeNull(); + }); + }); + + describe('computeds and methods', () => { + describe('capitalizeStageName', () => { + it('it capitalizes the stage name', () => { + expect(component.capitalizeStageName('mystage')).toBe('Mystage'); + }); + }); + + describe('stageConnectorClass', () => { + it('it returns left-margin when there is a triggerer', () => { + expect(component.stageConnectorClass(0, { groups: ['job'] })).toBe('no-margin'); + }); + }); + }); + + describe('linked pipelines components', () => { + beforeEach(() => { + component = mountComponent(GraphComponent, { + isLoading: false, + pipeline: store.state.pipeline, + mediator, + }); + }); + + it('should render an upstream pipelines column', () => { + expect(component.$el.querySelector('.linked-pipelines-column')).not.toBeNull(); + expect(component.$el.innerHTML).toContain('Upstream'); + }); + + it('should render a downstream pipelines column', () => { + expect(component.$el.querySelector('.linked-pipelines-column')).not.toBeNull(); + expect(component.$el.innerHTML).toContain('Downstream'); + }); + + describe('triggered by', () => { + describe('on click', () => { + it('should emit `onClickTriggeredBy` when triggered by linked pipeline is clicked', () => { + spyOn(component, '$emit'); + + component.$el.querySelector('#js-linked-pipeline-12').click(); + + expect(component.$emit).toHaveBeenCalledWith( + 'onClickTriggeredBy', + component.pipeline, + component.pipeline.triggered_by[0], + ); + }); + }); + + describe('with expanded pipeline', () => { + it('should render expanded pipeline', done => { + // expand the pipeline + store.state.pipeline.triggered_by[0].isExpanded = true; + + component = mountComponent(GraphComponent, { + isLoading: false, + pipeline: store.state.pipeline, + mediator, + }); + + Vue.nextTick() + .then(() => { + expect(component.$el.querySelector('.js-upstream-pipeline-12')).not.toBeNull(); + }) + .then(done) + .catch(done.fail); + }); + }); + }); + + describe('triggered', () => { + describe('on click', () => { + it('should emit `onClickTriggered`', () => { + spyOn(component, '$emit'); + + component.$el.querySelector('#js-linked-pipeline-34993051').click(); + + expect(component.$emit).toHaveBeenCalledWith( + 'onClickTriggered', + component.pipeline, + component.pipeline.triggered[0], + ); + }); + }); + + describe('with expanded pipeline', () => { + it('should render expanded pipeline', done => { + // expand the pipeline + store.state.pipeline.triggered[0].isExpanded = true; + + component = mountComponent(GraphComponent, { + isLoading: false, + pipeline: store.state.pipeline, + mediator, + }); + + Vue.nextTick() + .then(() => { + expect( + component.$el.querySelector('.js-downstream-pipeline-34993051'), + ).not.toBeNull(); + }) + .then(done) + .catch(done.fail); + }); + }); + }); + }); + }); + + describe('when linked pipelines are not present', () => { + beforeEach(() => { + const pipeline = Object.assign(linkedPipelineJSON, { triggered: null, triggered_by: null }); + component = mountComponent(GraphComponent, { + isLoading: false, + pipeline, + mediator, + }); + }); + + describe('rendered output', () => { + it('should include the first column with a no margin', () => { + const firstColumn = component.$el.querySelector('.stage-column:first-child'); + + expect(firstColumn.classList.contains('no-margin')).toEqual(true); + }); + + it('should not render a linked pipelines column', () => { + expect(component.$el.querySelector('.linked-pipelines-column')).toBeNull(); + }); + }); + + describe('stageConnectorClass', () => { + it('it returns left-margin when no triggerer and there is one job', () => { + expect(component.stageConnectorClass(0, { groups: ['job'] })).toBe('no-margin'); + }); + + it('it returns left-margin when no triggerer and not the first stage', () => { + expect(component.stageConnectorClass(99, { groups: ['job'] })).toBe('left-margin'); + }); + }); + }); + describe('capitalizeStageName', () => { it('capitalizes and escapes stage name', () => { component = mountComponent(GraphComponent, { isLoading: false, pipeline: graphJSON, + mediator, }); expect( diff --git a/spec/javascripts/pipelines/graph/linked_pipeline_spec.js b/spec/javascripts/pipelines/graph/linked_pipeline_spec.js new file mode 100644 index 00000000000..8d3abf094b6 --- /dev/null +++ b/spec/javascripts/pipelines/graph/linked_pipeline_spec.js @@ -0,0 +1,116 @@ +import Vue from 'vue'; +import LinkedPipelineComponent from '~/pipelines/components/graph/linked_pipeline.vue'; +import mountComponent from 'spec/helpers/vue_mount_component_helper'; +import mockData from './linked_pipelines_mock_data'; + +const mockPipeline = mockData.triggered[0]; + +describe('Linked pipeline', () => { + const Component = Vue.extend(LinkedPipelineComponent); + let vm; + + afterEach(() => { + vm.$destroy(); + }); + + describe('rendered output', () => { + const props = { + pipeline: mockPipeline, + }; + + beforeEach(() => { + vm = mountComponent(Component, props); + }); + + it('should render a list item as the containing element', () => { + expect(vm.$el.tagName).toBe('LI'); + }); + + it('should render a button', () => { + const linkElement = vm.$el.querySelector('.js-linked-pipeline-content'); + + expect(linkElement).not.toBeNull(); + }); + + it('should render the project name', () => { + expect(vm.$el.innerText).toContain(props.pipeline.project.name); + }); + + it('should render an svg within the status container', () => { + const pipelineStatusElement = vm.$el.querySelector('.js-linked-pipeline-status'); + + expect(pipelineStatusElement.querySelector('svg')).not.toBeNull(); + }); + + it('should render the pipeline status icon svg', () => { + expect(vm.$el.querySelector('.js-ci-status-icon-running')).not.toBeNull(); + expect(vm.$el.querySelector('.js-ci-status-icon-running').innerHTML).toContain('<svg'); + }); + + it('should have a ci-status child component', () => { + expect(vm.$el.querySelector('.js-linked-pipeline-status')).not.toBeNull(); + }); + + it('should render the pipeline id', () => { + expect(vm.$el.innerText).toContain(`#${props.pipeline.id}`); + }); + + it('should correctly compute the tooltip text', () => { + expect(vm.tooltipText).toContain(mockPipeline.project.name); + expect(vm.tooltipText).toContain(mockPipeline.details.status.label); + }); + + it('should render the tooltip text as the title attribute', () => { + const tooltipRef = vm.$el.querySelector('.js-linked-pipeline-content'); + const titleAttr = tooltipRef.getAttribute('data-original-title'); + + expect(titleAttr).toContain(mockPipeline.project.name); + expect(titleAttr).toContain(mockPipeline.details.status.label); + }); + + it('does not render the loading icon when isLoading is false', () => { + expect(vm.$el.querySelector('.js-linked-pipeline-loading')).toBeNull(); + }); + }); + + describe('when isLoading is true', () => { + const props = { + pipeline: { ...mockPipeline, isLoading: true }, + }; + + beforeEach(() => { + vm = mountComponent(Component, props); + }); + + it('renders a loading icon', () => { + expect(vm.$el.querySelector('.js-linked-pipeline-loading')).not.toBeNull(); + }); + }); + + describe('on click', () => { + const props = { + pipeline: mockPipeline, + }; + + beforeEach(() => { + vm = mountComponent(Component, props); + }); + + it('emits `pipelineClicked` event', () => { + spyOn(vm, '$emit'); + vm.$el.querySelector('button').click(); + + expect(vm.$emit).toHaveBeenCalledWith('pipelineClicked'); + }); + + it('should emit `bv::hide::tooltip` to close the tooltip', () => { + spyOn(vm.$root, '$emit'); + vm.$el.querySelector('button').click(); + + expect(vm.$root.$emit.calls.argsFor(0)).toEqual([ + 'bv::hide::tooltip', + 'js-linked-pipeline-132', + ]); + }); + }); +}); diff --git a/spec/javascripts/pipelines/graph/linked_pipelines_column_spec.js b/spec/javascripts/pipelines/graph/linked_pipelines_column_spec.js new file mode 100644 index 00000000000..1f835dc4dee --- /dev/null +++ b/spec/javascripts/pipelines/graph/linked_pipelines_column_spec.js @@ -0,0 +1,38 @@ +import Vue from 'vue'; +import LinkedPipelinesColumn from '~/pipelines/components/graph/linked_pipelines_column.vue'; +import mountComponent from 'spec/helpers/vue_mount_component_helper'; +import mockData from './linked_pipelines_mock_data'; + +describe('Linked Pipelines Column', () => { + const Component = Vue.extend(LinkedPipelinesColumn); + const props = { + columnTitle: 'Upstream', + linkedPipelines: mockData.triggered, + graphPosition: 'right', + }; + let vm; + + beforeEach(() => { + vm = mountComponent(Component, props); + }); + + afterEach(() => { + vm.$destroy(); + }); + + it('renders the pipeline orientation', () => { + const titleElement = vm.$el.querySelector('.linked-pipelines-column-title'); + + expect(titleElement.innerText).toContain(props.columnTitle); + }); + + it('has the correct number of linked pipeline child components', () => { + expect(vm.$children.length).toBe(props.linkedPipelines.length); + }); + + it('renders the correct number of linked pipelines', () => { + const linkedPipelineElements = vm.$el.querySelectorAll('.linked-pipeline'); + + expect(linkedPipelineElements.length).toBe(props.linkedPipelines.length); + }); +}); diff --git a/spec/javascripts/pipelines/graph/linked_pipelines_mock_data.js b/spec/javascripts/pipelines/graph/linked_pipelines_mock_data.js new file mode 100644 index 00000000000..f794b8484a7 --- /dev/null +++ b/spec/javascripts/pipelines/graph/linked_pipelines_mock_data.js @@ -0,0 +1,407 @@ +export default { + triggered_by: { + id: 129, + active: true, + path: '/gitlab-org/gitlab-foss/pipelines/129', + project: { + name: 'GitLabCE', + }, + details: { + status: { + icon: 'status_running', + text: 'running', + label: 'running', + group: 'running', + has_details: true, + details_path: '/gitlab-org/gitlab-foss/pipelines/129', + favicon: + '/assets/ci_favicons/dev/favicon_status_running-c3ad2fc53ea6079c174e5b6c1351ff349e99ec3af5a5622fb77b0fe53ea279c1.ico', + }, + }, + flags: { + latest: false, + triggered: false, + stuck: false, + yaml_errors: false, + retryable: true, + cancelable: true, + }, + ref: { + name: '7-5-stable', + path: '/gitlab-org/gitlab-foss/commits/7-5-stable', + tag: false, + branch: true, + }, + commit: { + id: '23433d4d8b20d7e45c103d0b6048faad38a130ab', + short_id: '23433d4d', + title: 'Version 7.5.0.rc1', + created_at: '2014-11-17T15:44:14.000+01:00', + parent_ids: ['30ac909f30f58d319b42ed1537664483894b18cd'], + message: 'Version 7.5.0.rc1\n', + author_name: 'Jacob Vosmaer', + author_email: 'contact@jacobvosmaer.nl', + authored_date: '2014-11-17T15:44:14.000+01:00', + committer_name: 'Jacob Vosmaer', + committer_email: 'contact@jacobvosmaer.nl', + committed_date: '2014-11-17T15:44:14.000+01:00', + author_gravatar_url: + 'http://www.gravatar.com/avatar/e66d11c0eedf8c07b3b18fca46599807?s=80&d=identicon', + commit_url: + 'http://localhost:3000/gitlab-org/gitlab-foss/commit/23433d4d8b20d7e45c103d0b6048faad38a130ab', + commit_path: '/gitlab-org/gitlab-foss/commit/23433d4d8b20d7e45c103d0b6048faad38a130ab', + }, + retry_path: '/gitlab-org/gitlab-foss/pipelines/129/retry', + cancel_path: '/gitlab-org/gitlab-foss/pipelines/129/cancel', + created_at: '2017-05-24T14:46:20.090Z', + updated_at: '2017-05-24T14:46:29.906Z', + }, + triggered: [ + { + id: 132, + active: true, + path: '/gitlab-org/gitlab-foss/pipelines/132', + project: { + name: 'GitLabCE', + }, + details: { + status: { + icon: 'status_running', + text: 'running', + label: 'running', + group: 'running', + has_details: true, + details_path: '/gitlab-org/gitlab-foss/pipelines/132', + favicon: + '/assets/ci_favicons/dev/favicon_status_running-c3ad2fc53ea6079c174e5b6c1351ff349e99ec3af5a5622fb77b0fe53ea279c1.ico', + }, + }, + flags: { + latest: false, + triggered: false, + stuck: false, + yaml_errors: false, + retryable: true, + cancelable: true, + }, + ref: { + name: 'crowd', + path: '/gitlab-org/gitlab-foss/commits/crowd', + tag: false, + branch: true, + }, + commit: { + id: 'b9d58c4cecd06be74c3cc32ccfb522b31544ab2e', + short_id: 'b9d58c4c', + title: 'getting user keys publically through http without any authentication, the github…', + created_at: '2013-10-03T12:50:33.000+05:30', + parent_ids: ['e219cf7246c6a0495e4507deaffeba11e79f13b8'], + message: + 'getting user keys publically through http without any authentication, the github way. E.g: http://github.com/devaroop.keys\n\nchangelog updated to include ssh key retrieval feature update\n', + author_name: 'devaroop', + author_email: 'devaroop123@yahoo.co.in', + authored_date: '2013-10-02T20:39:29.000+05:30', + committer_name: 'devaroop', + committer_email: 'devaroop123@yahoo.co.in', + committed_date: '2013-10-03T12:50:33.000+05:30', + author_gravatar_url: + 'http://www.gravatar.com/avatar/35df4b155ec66a3127d53459941cf8a2?s=80&d=identicon', + commit_url: + 'http://localhost:3000/gitlab-org/gitlab-foss/commit/b9d58c4cecd06be74c3cc32ccfb522b31544ab2e', + commit_path: '/gitlab-org/gitlab-foss/commit/b9d58c4cecd06be74c3cc32ccfb522b31544ab2e', + }, + retry_path: '/gitlab-org/gitlab-foss/pipelines/132/retry', + cancel_path: '/gitlab-org/gitlab-foss/pipelines/132/cancel', + created_at: '2017-05-24T14:46:24.644Z', + updated_at: '2017-05-24T14:48:55.226Z', + }, + { + id: 133, + active: true, + path: '/gitlab-org/gitlab-foss/pipelines/133', + project: { + name: 'GitLabCE', + }, + details: { + status: { + icon: 'status_running', + text: 'running', + label: 'running', + group: 'running', + has_details: true, + details_path: '/gitlab-org/gitlab-foss/pipelines/133', + favicon: + '/assets/ci_favicons/dev/favicon_status_running-c3ad2fc53ea6079c174e5b6c1351ff349e99ec3af5a5622fb77b0fe53ea279c1.ico', + }, + }, + flags: { + latest: false, + triggered: false, + stuck: false, + yaml_errors: false, + retryable: true, + cancelable: true, + }, + ref: { + name: 'crowd', + path: '/gitlab-org/gitlab-foss/commits/crowd', + tag: false, + branch: true, + }, + commit: { + id: 'b6bd4856a33df3d144be66c4ed1f1396009bb08b', + short_id: 'b6bd4856', + title: 'getting user keys publically through http without any authentication, the github…', + created_at: '2013-10-02T20:39:29.000+05:30', + parent_ids: ['e219cf7246c6a0495e4507deaffeba11e79f13b8'], + message: + 'getting user keys publically through http without any authentication, the github way. E.g: http://github.com/devaroop.keys\n', + author_name: 'devaroop', + author_email: 'devaroop123@yahoo.co.in', + authored_date: '2013-10-02T20:39:29.000+05:30', + committer_name: 'devaroop', + committer_email: 'devaroop123@yahoo.co.in', + committed_date: '2013-10-02T20:39:29.000+05:30', + author_gravatar_url: + 'http://www.gravatar.com/avatar/35df4b155ec66a3127d53459941cf8a2?s=80&d=identicon', + commit_url: + 'http://localhost:3000/gitlab-org/gitlab-foss/commit/b6bd4856a33df3d144be66c4ed1f1396009bb08b', + commit_path: '/gitlab-org/gitlab-foss/commit/b6bd4856a33df3d144be66c4ed1f1396009bb08b', + }, + retry_path: '/gitlab-org/gitlab-foss/pipelines/133/retry', + cancel_path: '/gitlab-org/gitlab-foss/pipelines/133/cancel', + created_at: '2017-05-24T14:46:24.648Z', + updated_at: '2017-05-24T14:48:59.673Z', + }, + { + id: 130, + active: true, + path: '/gitlab-org/gitlab-foss/pipelines/130', + project: { + name: 'GitLabCE', + }, + details: { + status: { + icon: 'status_running', + text: 'running', + label: 'running', + group: 'running', + has_details: true, + details_path: '/gitlab-org/gitlab-foss/pipelines/130', + favicon: + '/assets/ci_favicons/dev/favicon_status_running-c3ad2fc53ea6079c174e5b6c1351ff349e99ec3af5a5622fb77b0fe53ea279c1.ico', + }, + }, + flags: { + latest: false, + triggered: false, + stuck: false, + yaml_errors: false, + retryable: true, + cancelable: true, + }, + ref: { + name: 'crowd', + path: '/gitlab-org/gitlab-foss/commits/crowd', + tag: false, + branch: true, + }, + commit: { + id: '6d7ced4a2311eeff037c5575cca1868a6d3f586f', + short_id: '6d7ced4a', + title: 'Whitespace fixes to patch', + created_at: '2013-10-08T13:53:22.000-05:00', + parent_ids: ['1875141a963a4238bda29011d8f7105839485253'], + message: 'Whitespace fixes to patch\n', + author_name: 'Dale Hamel', + author_email: 'dale.hamel@srvthe.net', + authored_date: '2013-10-08T13:53:22.000-05:00', + committer_name: 'Dale Hamel', + committer_email: 'dale.hamel@invenia.ca', + committed_date: '2013-10-08T13:53:22.000-05:00', + author_gravatar_url: + 'http://www.gravatar.com/avatar/cd08930e69fa5ad1a669206e7bafe476?s=80&d=identicon', + commit_url: + 'http://localhost:3000/gitlab-org/gitlab-foss/commit/6d7ced4a2311eeff037c5575cca1868a6d3f586f', + commit_path: '/gitlab-org/gitlab-foss/commit/6d7ced4a2311eeff037c5575cca1868a6d3f586f', + }, + retry_path: '/gitlab-org/gitlab-foss/pipelines/130/retry', + cancel_path: '/gitlab-org/gitlab-foss/pipelines/130/cancel', + created_at: '2017-05-24T14:46:24.630Z', + updated_at: '2017-05-24T14:49:45.091Z', + }, + { + id: 131, + active: true, + path: '/gitlab-org/gitlab-foss/pipelines/132', + project: { + name: 'GitLabCE', + }, + details: { + status: { + icon: 'status_running', + text: 'running', + label: 'running', + group: 'running', + has_details: true, + details_path: '/gitlab-org/gitlab-foss/pipelines/132', + favicon: + '/assets/ci_favicons/dev/favicon_status_running-c3ad2fc53ea6079c174e5b6c1351ff349e99ec3af5a5622fb77b0fe53ea279c1.ico', + }, + }, + flags: { + latest: false, + triggered: false, + stuck: false, + yaml_errors: false, + retryable: true, + cancelable: true, + }, + ref: { + name: 'crowd', + path: '/gitlab-org/gitlab-foss/commits/crowd', + tag: false, + branch: true, + }, + commit: { + id: 'b9d58c4cecd06be74c3cc32ccfb522b31544ab2e', + short_id: 'b9d58c4c', + title: 'getting user keys publically through http without any authentication, the github…', + created_at: '2013-10-03T12:50:33.000+05:30', + parent_ids: ['e219cf7246c6a0495e4507deaffeba11e79f13b8'], + message: + 'getting user keys publically through http without any authentication, the github way. E.g: http://github.com/devaroop.keys\n\nchangelog updated to include ssh key retrieval feature update\n', + author_name: 'devaroop', + author_email: 'devaroop123@yahoo.co.in', + authored_date: '2013-10-02T20:39:29.000+05:30', + committer_name: 'devaroop', + committer_email: 'devaroop123@yahoo.co.in', + committed_date: '2013-10-03T12:50:33.000+05:30', + author_gravatar_url: + 'http://www.gravatar.com/avatar/35df4b155ec66a3127d53459941cf8a2?s=80&d=identicon', + commit_url: + 'http://localhost:3000/gitlab-org/gitlab-foss/commit/b9d58c4cecd06be74c3cc32ccfb522b31544ab2e', + commit_path: '/gitlab-org/gitlab-foss/commit/b9d58c4cecd06be74c3cc32ccfb522b31544ab2e', + }, + retry_path: '/gitlab-org/gitlab-foss/pipelines/132/retry', + cancel_path: '/gitlab-org/gitlab-foss/pipelines/132/cancel', + created_at: '2017-05-24T14:46:24.644Z', + updated_at: '2017-05-24T14:48:55.226Z', + }, + { + id: 134, + active: true, + path: '/gitlab-org/gitlab-foss/pipelines/133', + project: { + name: 'GitLabCE', + }, + details: { + status: { + icon: 'status_running', + text: 'running', + label: 'running', + group: 'running', + has_details: true, + details_path: '/gitlab-org/gitlab-foss/pipelines/133', + favicon: + '/assets/ci_favicons/dev/favicon_status_running-c3ad2fc53ea6079c174e5b6c1351ff349e99ec3af5a5622fb77b0fe53ea279c1.ico', + }, + }, + flags: { + latest: false, + triggered: false, + stuck: false, + yaml_errors: false, + retryable: true, + cancelable: true, + }, + ref: { + name: 'crowd', + path: '/gitlab-org/gitlab-foss/commits/crowd', + tag: false, + branch: true, + }, + commit: { + id: 'b6bd4856a33df3d144be66c4ed1f1396009bb08b', + short_id: 'b6bd4856', + title: 'getting user keys publically through http without any authentication, the github…', + created_at: '2013-10-02T20:39:29.000+05:30', + parent_ids: ['e219cf7246c6a0495e4507deaffeba11e79f13b8'], + message: + 'getting user keys publically through http without any authentication, the github way. E.g: http://github.com/devaroop.keys\n', + author_name: 'devaroop', + author_email: 'devaroop123@yahoo.co.in', + authored_date: '2013-10-02T20:39:29.000+05:30', + committer_name: 'devaroop', + committer_email: 'devaroop123@yahoo.co.in', + committed_date: '2013-10-02T20:39:29.000+05:30', + author_gravatar_url: + 'http://www.gravatar.com/avatar/35df4b155ec66a3127d53459941cf8a2?s=80&d=identicon', + commit_url: + 'http://localhost:3000/gitlab-org/gitlab-foss/commit/b6bd4856a33df3d144be66c4ed1f1396009bb08b', + commit_path: '/gitlab-org/gitlab-foss/commit/b6bd4856a33df3d144be66c4ed1f1396009bb08b', + }, + retry_path: '/gitlab-org/gitlab-foss/pipelines/133/retry', + cancel_path: '/gitlab-org/gitlab-foss/pipelines/133/cancel', + created_at: '2017-05-24T14:46:24.648Z', + updated_at: '2017-05-24T14:48:59.673Z', + }, + { + id: 135, + active: true, + path: '/gitlab-org/gitlab-foss/pipelines/130', + project: { + name: 'GitLabCE', + }, + details: { + status: { + icon: 'status_running', + text: 'running', + label: 'running', + group: 'running', + has_details: true, + details_path: '/gitlab-org/gitlab-foss/pipelines/130', + favicon: + '/assets/ci_favicons/dev/favicon_status_running-c3ad2fc53ea6079c174e5b6c1351ff349e99ec3af5a5622fb77b0fe53ea279c1.ico', + }, + }, + flags: { + latest: false, + triggered: false, + stuck: false, + yaml_errors: false, + retryable: true, + cancelable: true, + }, + ref: { + name: 'crowd', + path: '/gitlab-org/gitlab-foss/commits/crowd', + tag: false, + branch: true, + }, + commit: { + id: '6d7ced4a2311eeff037c5575cca1868a6d3f586f', + short_id: '6d7ced4a', + title: 'Whitespace fixes to patch', + created_at: '2013-10-08T13:53:22.000-05:00', + parent_ids: ['1875141a963a4238bda29011d8f7105839485253'], + message: 'Whitespace fixes to patch\n', + author_name: 'Dale Hamel', + author_email: 'dale.hamel@srvthe.net', + authored_date: '2013-10-08T13:53:22.000-05:00', + committer_name: 'Dale Hamel', + committer_email: 'dale.hamel@invenia.ca', + committed_date: '2013-10-08T13:53:22.000-05:00', + author_gravatar_url: + 'http://www.gravatar.com/avatar/cd08930e69fa5ad1a669206e7bafe476?s=80&d=identicon', + commit_url: + 'http://localhost:3000/gitlab-org/gitlab-foss/commit/6d7ced4a2311eeff037c5575cca1868a6d3f586f', + commit_path: '/gitlab-org/gitlab-foss/commit/6d7ced4a2311eeff037c5575cca1868a6d3f586f', + }, + retry_path: '/gitlab-org/gitlab-foss/pipelines/130/retry', + cancel_path: '/gitlab-org/gitlab-foss/pipelines/130/cancel', + created_at: '2017-05-24T14:46:24.630Z', + updated_at: '2017-05-24T14:49:45.091Z', + }, + ], +}; |