97 lines
2.5 KiB
JavaScript
97 lines
2.5 KiB
JavaScript
import { GlBadge, GlButton } from '@gitlab/ui';
|
|
import { shallowMount } from '@vue/test-utils';
|
|
import Vue from 'vue';
|
|
import Vuex from 'vuex';
|
|
import { extendedWrapper } from 'helpers/vue_test_utils_helper';
|
|
import IssueStatusIcon from '~/reports/components/issue_status_icon.vue';
|
|
import TestIssueBody from '~/reports/grouped_test_report/components/test_issue_body.vue';
|
|
import { failedIssue, successIssue } from '../../mock_data/mock_data';
|
|
|
|
Vue.use(Vuex);
|
|
|
|
describe('Test issue body', () => {
|
|
let wrapper;
|
|
let store;
|
|
|
|
const findDescription = () => wrapper.findByTestId('test-issue-body-description');
|
|
const findStatusIcon = () => wrapper.findComponent(IssueStatusIcon);
|
|
const findBadge = () => wrapper.findComponent(GlBadge);
|
|
|
|
const actionSpies = {
|
|
openModal: jest.fn(),
|
|
};
|
|
|
|
const createComponent = ({ issue = failedIssue } = {}) => {
|
|
store = new Vuex.Store({
|
|
actions: actionSpies,
|
|
});
|
|
|
|
wrapper = extendedWrapper(
|
|
shallowMount(TestIssueBody, {
|
|
store,
|
|
propsData: {
|
|
issue,
|
|
},
|
|
stubs: {
|
|
GlBadge,
|
|
GlButton,
|
|
IssueStatusIcon,
|
|
},
|
|
}),
|
|
);
|
|
};
|
|
|
|
afterEach(() => {
|
|
wrapper.destroy();
|
|
});
|
|
|
|
describe('when issue has failed status', () => {
|
|
beforeEach(() => {
|
|
createComponent();
|
|
});
|
|
|
|
it('renders issue name', () => {
|
|
expect(findDescription().text()).toContain(failedIssue.name);
|
|
});
|
|
|
|
it('renders failed status icon', () => {
|
|
expect(findStatusIcon().props('status')).toBe('failed');
|
|
});
|
|
|
|
describe('when issue has recent failures', () => {
|
|
it('renders recent failures badge', () => {
|
|
expect(findBadge().exists()).toBe(true);
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('when issue has success status', () => {
|
|
beforeEach(() => {
|
|
createComponent({ issue: successIssue });
|
|
});
|
|
|
|
it('does not render recent failures', () => {
|
|
expect(findBadge().exists()).toBe(false);
|
|
});
|
|
|
|
it('renders issue name', () => {
|
|
expect(findDescription().text()).toBe(successIssue.name);
|
|
});
|
|
|
|
it('renders success status icon', () => {
|
|
expect(findStatusIcon().props('status')).toBe('success');
|
|
});
|
|
});
|
|
|
|
describe('when clicking on an issue', () => {
|
|
it('calls openModal action', () => {
|
|
createComponent();
|
|
wrapper.findComponent(GlButton).trigger('click');
|
|
|
|
expect(actionSpies.openModal).toHaveBeenCalledWith(expect.any(Object), {
|
|
issue: failedIssue,
|
|
});
|
|
});
|
|
});
|
|
});
|