121 lines
3.2 KiB
JavaScript
121 lines
3.2 KiB
JavaScript
import Vue from 'vue';
|
|
import MockAdapter from 'axios-mock-adapter';
|
|
import axios from '~/lib/utils/axios_utils';
|
|
import { createStore } from '~/ide/stores';
|
|
import List from '~/ide/components/pipelines/list.vue';
|
|
import { createComponentWithStore } from '../../../helpers/vue_mount_component_helper';
|
|
import { pipelines, projectData, stages, jobs } from '../../mock_data';
|
|
|
|
describe('IDE pipelines list', () => {
|
|
const Component = Vue.extend(List);
|
|
let vm;
|
|
let mock;
|
|
|
|
beforeEach(done => {
|
|
const store = createStore();
|
|
|
|
mock = new MockAdapter(axios);
|
|
|
|
store.state.currentProjectId = 'abc/def';
|
|
store.state.currentBranchId = 'master';
|
|
store.state.projects['abc/def'] = {
|
|
...projectData,
|
|
path_with_namespace: 'abc/def',
|
|
branches: {
|
|
master: { commit: { id: '123' } },
|
|
},
|
|
};
|
|
store.state.links = { ciHelpPagePath: gl.TEST_HOST };
|
|
store.state.pipelinesEmptyStateSvgPath = gl.TEST_HOST;
|
|
store.state.pipelines.stages = stages.map((mappedState, i) => ({
|
|
...mappedState,
|
|
id: i,
|
|
dropdownPath: mappedState.dropdown_path,
|
|
jobs: [...jobs],
|
|
isLoading: false,
|
|
isCollapsed: false,
|
|
}));
|
|
|
|
mock
|
|
.onGet('/abc/def/commit/123/pipelines')
|
|
.replyOnce(200, { pipelines: [...pipelines] }, { 'poll-interval': '-1' });
|
|
|
|
vm = createComponentWithStore(Component, store).$mount();
|
|
|
|
setTimeout(done);
|
|
});
|
|
|
|
afterEach(done => {
|
|
vm.$destroy();
|
|
mock.restore();
|
|
|
|
vm.$store
|
|
.dispatch('pipelines/stopPipelinePolling')
|
|
.then(() => vm.$store.dispatch('pipelines/clearEtagPoll'))
|
|
.then(done)
|
|
.catch(done.fail);
|
|
});
|
|
|
|
it('renders pipeline data', () => {
|
|
expect(vm.$el.textContent).toContain('#1');
|
|
});
|
|
|
|
it('renders CI icon', () => {
|
|
expect(vm.$el.querySelector('.ci-status-icon-failed')).not.toBe(null);
|
|
});
|
|
|
|
it('renders list of jobs', () => {
|
|
expect(vm.$el.querySelectorAll('.tab-pane:first-child .ide-job-item').length).toBe(
|
|
jobs.length * stages.length,
|
|
);
|
|
});
|
|
|
|
it('renders list of failed jobs on failed jobs tab', done => {
|
|
vm.$el.querySelectorAll('.tab-links a')[1].click();
|
|
|
|
vm.$nextTick(() => {
|
|
expect(vm.$el.querySelectorAll('.tab-pane.active .ide-job-item').length).toBe(2);
|
|
|
|
done();
|
|
});
|
|
});
|
|
|
|
describe('YAML error', () => {
|
|
it('renders YAML error', done => {
|
|
vm.$store.state.pipelines.latestPipeline.yamlError = 'test yaml error';
|
|
|
|
vm.$nextTick(() => {
|
|
expect(vm.$el.textContent).toContain('Found errors in your .gitlab-ci.yml:');
|
|
expect(vm.$el.textContent).toContain('test yaml error');
|
|
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('empty state', () => {
|
|
it('renders pipelines empty state', done => {
|
|
vm.$store.state.pipelines.latestPipeline = false;
|
|
|
|
vm.$nextTick(() => {
|
|
expect(vm.$el.querySelector('.empty-state')).not.toBe(null);
|
|
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('loading state', () => {
|
|
it('renders loading state when there is no latest pipeline', done => {
|
|
vm.$store.state.pipelines.latestPipeline = null;
|
|
vm.$store.state.pipelines.isLoadingPipeline = true;
|
|
|
|
vm.$nextTick(() => {
|
|
expect(vm.$el.querySelector('.loading-container')).not.toBe(null);
|
|
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
});
|