debian-mirror-gitlab/spec/frontend/terraform/components/states_table_spec.js

211 lines
6.4 KiB
JavaScript
Raw Normal View History

2022-04-04 11:22:00 +05:30
import { GlBadge, GlLoadingIcon, GlTooltip } from '@gitlab/ui';
2021-01-29 00:20:46 +05:30
import { mount } from '@vue/test-utils';
2022-04-04 11:22:00 +05:30
import { nextTick } from 'vue';
2021-01-29 00:20:46 +05:30
import { useFakeDate } from 'helpers/fake_date';
import StatesTable from '~/terraform/components/states_table.vue';
2021-03-11 19:13:27 +05:30
import StateActions from '~/terraform/components/states_table_actions.vue';
2021-01-29 00:20:46 +05:30
describe('StatesTable', () => {
let wrapper;
useFakeDate([2020, 10, 15]);
2021-02-22 17:27:13 +05:30
const defaultProps = {
2021-01-29 00:20:46 +05:30
states: [
{
2021-03-11 19:13:27 +05:30
_showDetails: true,
errorMessages: ['State 1 has errored'],
2021-01-29 00:20:46 +05:30
name: 'state-1',
2021-03-11 19:13:27 +05:30
loadingLock: false,
loadingRemove: false,
2021-01-29 00:20:46 +05:30
lockedAt: '2020-10-13T00:00:00Z',
lockedByUser: {
name: 'user-1',
},
updatedAt: '2020-10-13T00:00:00Z',
latestVersion: null,
},
{
2021-03-11 19:13:27 +05:30
_showDetails: false,
errorMessages: [],
2021-01-29 00:20:46 +05:30
name: 'state-2',
2021-03-11 19:13:27 +05:30
loadingLock: true,
loadingRemove: false,
2021-01-29 00:20:46 +05:30
lockedAt: null,
lockedByUser: null,
updatedAt: '2020-10-10T00:00:00Z',
latestVersion: null,
},
{
2021-03-11 19:13:27 +05:30
_showDetails: false,
errorMessages: [],
2021-01-29 00:20:46 +05:30
name: 'state-3',
2021-03-11 19:13:27 +05:30
loadingLock: true,
loadingRemove: false,
2021-01-29 00:20:46 +05:30
lockedAt: '2020-10-10T00:00:00Z',
lockedByUser: {
name: 'user-2',
},
updatedAt: '2020-10-10T00:00:00Z',
latestVersion: {
updatedAt: '2020-10-11T00:00:00Z',
createdByUser: {
name: 'user-3',
},
2021-02-22 17:27:13 +05:30
job: {
detailedStatus: {
detailsPath: '/job-path-3',
group: 'failed',
icon: 'status_failed',
label: 'failed',
text: 'failed',
},
pipeline: {
id: 'gid://gitlab/Ci::Pipeline/3',
path: '/pipeline-path-3',
},
},
2021-01-29 00:20:46 +05:30
},
},
{
2021-03-11 19:13:27 +05:30
_showDetails: true,
errorMessages: ['State 4 has errored'],
2021-01-29 00:20:46 +05:30
name: 'state-4',
2021-03-11 19:13:27 +05:30
loadingLock: false,
loadingRemove: false,
2021-01-29 00:20:46 +05:30
lockedAt: '2020-10-10T00:00:00Z',
lockedByUser: null,
updatedAt: '2020-10-10T00:00:00Z',
latestVersion: {
updatedAt: '2020-10-09T00:00:00Z',
createdByUser: null,
2021-02-22 17:27:13 +05:30
job: {
detailedStatus: {
detailsPath: '/job-path-4',
group: 'passed',
icon: 'status_success',
label: 'passed',
text: 'passed',
},
pipeline: {
id: 'gid://gitlab/Ci::Pipeline/4',
path: '/pipeline-path-4',
},
},
2021-01-29 00:20:46 +05:30
},
},
2021-03-11 19:13:27 +05:30
{
_showDetails: false,
errorMessages: [],
name: 'state-5',
loadingLock: false,
loadingRemove: true,
lockedAt: null,
lockedByUser: null,
updatedAt: '2020-10-10T00:00:00Z',
latestVersion: null,
},
2021-01-29 00:20:46 +05:30
],
};
2022-04-04 11:22:00 +05:30
const createComponent = async (propsData = defaultProps) => {
2021-01-29 00:20:46 +05:30
wrapper = mount(StatesTable, { propsData });
2022-04-04 11:22:00 +05:30
await nextTick();
2021-02-22 17:27:13 +05:30
};
const findActions = () => wrapper.findAll(StateActions);
beforeEach(() => {
return createComponent();
2021-01-29 00:20:46 +05:30
});
afterEach(() => {
wrapper.destroy();
wrapper = null;
});
it.each`
2021-03-11 19:13:27 +05:30
name | toolTipText | locked | loading | lineNumber
${'state-1'} | ${'Locked by user-1 2 days ago'} | ${true} | ${false} | ${0}
${'state-2'} | ${'Locking state'} | ${false} | ${true} | ${1}
${'state-3'} | ${'Unlocking state'} | ${false} | ${true} | ${2}
${'state-4'} | ${'Locked by Unknown User 5 days ago'} | ${true} | ${false} | ${3}
${'state-5'} | ${'Removing'} | ${false} | ${true} | ${4}
2021-01-29 00:20:46 +05:30
`(
'displays the name and locked information "$name" for line "$lineNumber"',
2021-03-11 19:13:27 +05:30
({ name, toolTipText, locked, loading, lineNumber }) => {
2021-01-29 00:20:46 +05:30
const states = wrapper.findAll('[data-testid="terraform-states-table-name"]');
const state = states.at(lineNumber);
const toolTip = state.find(GlTooltip);
expect(state.text()).toContain(name);
2022-04-04 11:22:00 +05:30
expect(state.find(GlBadge).exists()).toBe(locked);
2021-03-11 19:13:27 +05:30
expect(state.find(GlLoadingIcon).exists()).toBe(loading);
2021-01-29 00:20:46 +05:30
expect(toolTip.exists()).toBe(locked);
if (locked) {
expect(toolTip.text()).toMatchInterpolatedText(toolTipText);
}
},
);
it.each`
updateTime | lineNumber
${'updated 2 days ago'} | ${0}
${'updated 5 days ago'} | ${1}
${'user-3 updated 4 days ago'} | ${2}
${'updated 6 days ago'} | ${3}
`('displays the time "$updateTime" for line "$lineNumber"', ({ updateTime, lineNumber }) => {
const states = wrapper.findAll('[data-testid="terraform-states-table-updated"]');
const state = states.at(lineNumber);
expect(state.text()).toMatchInterpolatedText(updateTime);
});
2021-02-22 17:27:13 +05:30
it.each`
pipelineText | toolTipAdded | lineNumber
${''} | ${false} | ${0}
${''} | ${false} | ${1}
${'#3 failed Job status'} | ${true} | ${2}
${'#4 passed Job status'} | ${true} | ${3}
`(
'displays the pipeline information for line "$lineNumber"',
({ pipelineText, toolTipAdded, lineNumber }) => {
const states = wrapper.findAll('[data-testid="terraform-states-table-pipeline"]');
const state = states.at(lineNumber);
expect(state.find(GlTooltip).exists()).toBe(toolTipAdded);
expect(state.text()).toMatchInterpolatedText(pipelineText);
},
);
it('displays no actions dropdown', () => {
expect(findActions().length).toEqual(0);
});
2021-03-11 19:13:27 +05:30
it.each`
errorMessage | lineNumber
${defaultProps.states[0].errorMessages[0]} | ${0}
${defaultProps.states[3].errorMessages[0]} | ${1}
`('displays table error message "$errorMessage"', ({ errorMessage, lineNumber }) => {
const states = wrapper.findAll('[data-testid="terraform-states-table-error"]');
const state = states.at(lineNumber);
expect(state.text()).toBe(errorMessage);
});
2021-02-22 17:27:13 +05:30
describe('when user is a terraform administrator', () => {
beforeEach(() => {
return createComponent({
terraformAdmin: true,
...defaultProps,
});
});
it('displays an actions dropdown for each state', () => {
expect(findActions().length).toEqual(defaultProps.states.length);
});
});
2021-01-29 00:20:46 +05:30
});