Commit beabd19f authored by Kushal Pandya's avatar Kushal Pandya

Merge branch 'grouped-test-reports-spec-update' into 'master'

Update grouped test report spec

See merge request gitlab-org/gitlab!34089
parents d86ee4b7 12d90a25
......@@ -54,7 +54,10 @@ export default {
<ci-icon v-else :status="iconStatus" :size="24" />
</div>
<div class="report-block-list-issue-description">
<div class="report-block-list-issue-description-text">
<div
class="report-block-list-issue-description-text"
data-testid="test-summary-row-description"
>
{{ summary
}}<span v-if="popoverOptions" class="text-nowrap"
>&nbsp;<popover v-if="popoverOptions" :options="popoverOptions" class="align-top" />
......
......@@ -26,7 +26,7 @@ export default {
</script>
<template>
<div class="report-block-list-issue-description prepend-top-5 append-bottom-5">
<div class="report-block-list-issue-description-text">
<div class="report-block-list-issue-description-text" data-testid="test-issue-body-description">
<button
type="button"
class="btn-link btn-blank text-left break-link vulnerability-name-button"
......
import Vue from 'vue';
import MockAdapter from 'axios-mock-adapter';
import axios from '~/lib/utils/axios_utils';
import state from '~/reports/store/state';
import component from '~/reports/components/grouped_test_reports_app.vue';
import mountComponent from '../../helpers/vue_mount_component_helper';
import { mount, createLocalVue } from '@vue/test-utils';
import Vuex from 'vuex';
import GroupedTestReportsApp from '~/reports/components/grouped_test_reports_app.vue';
import store from '~/reports/store';
import { failedReport } from '../mock_data/mock_data';
import successTestReports from '../mock_data/no_failures_report.json';
import newFailedTestReports from '../mock_data/new_failures_report.json';
import newErrorsTestReports from '../mock_data/new_errors_report.json';
import successTestReports from '../mock_data/no_failures_report.json';
import mixedResultsTestReports from '../mock_data/new_and_fixed_failures_report.json';
import resolvedFailures from '../mock_data/resolved_failures.json';
describe('Grouped Test Reports App', () => {
let vm;
let mock;
const Component = Vue.extend(component);
const localVue = createLocalVue();
localVue.use(Vuex);
describe('Grouped test reports app', () => {
const endpoint = 'endpoint.json';
const Component = localVue.extend(GroupedTestReportsApp);
let wrapper;
let mockStore;
const mountComponent = () => {
wrapper = mount(Component, {
store: mockStore,
localVue,
propsData: {
endpoint,
},
methods: {
fetchReports: () => {},
},
});
};
const setReports = reports => {
mockStore.state.status = reports.status;
mockStore.state.summary = reports.summary;
mockStore.state.reports = reports.suites;
};
const findHeader = () => wrapper.find('[data-testid="report-section-code-text"]');
const findSummaryDescription = () => wrapper.find('[data-testid="test-summary-row-description"]');
const findIssueDescription = () => wrapper.find('[data-testid="test-issue-body-description"]');
const findAllIssueDescriptions = () =>
wrapper.findAll('[data-testid="test-issue-body-description"]');
beforeEach(() => {
mock = new MockAdapter(axios);
mockStore = store();
mountComponent();
});
afterEach(() => {
vm.$store.replaceState(state());
vm.$destroy();
mock.restore();
wrapper.destroy();
wrapper = null;
});
describe('with success result', () => {
beforeEach(() => {
mock.onGet('test_results.json').reply(200, successTestReports, {});
vm = mountComponent(Component, {
endpoint: 'test_results.json',
});
setReports(successTestReports);
mountComponent();
});
it('renders success summary text', done => {
setImmediate(() => {
expect(vm.$el.querySelector('.gl-spinner')).toBeNull();
expect(vm.$el.querySelector('.js-code-text').textContent.trim()).toEqual(
'Test summary contained no changed test results out of 11 total tests',
);
expect(vm.$el.textContent).toContain(
'rspec:pg found no changed test results out of 8 total tests',
);
expect(vm.$el.textContent).toContain(
'java ant found no changed test results out of 3 total tests',
);
done();
});
it('renders success summary text', () => {
expect(findHeader().text()).toBe(
'Test summary contained no changed test results out of 11 total tests',
);
});
});
describe('with 204 result', () => {
describe('with new failed result', () => {
beforeEach(() => {
mock.onGet('test_results.json').reply(204, {}, {});
vm = mountComponent(Component, {
endpoint: 'test_results.json',
});
setReports(newFailedTestReports);
mountComponent();
});
it('renders success summary text', done => {
setImmediate(() => {
expect(vm.$el.querySelector('.gl-spinner')).not.toBeNull();
expect(vm.$el.querySelector('.js-code-text').textContent.trim()).toEqual(
'Test summary results are being parsed',
);
done();
});
it('renders failed summary text', () => {
expect(findHeader().text()).toBe('Test summary contained 2 failed out of 11 total tests');
});
});
describe('with new failed result', () => {
beforeEach(() => {
mock.onGet('test_results.json').reply(200, newFailedTestReports, {});
vm = mountComponent(Component, {
endpoint: 'test_results.json',
});
it('renders failed test suite', () => {
expect(findSummaryDescription().text()).toContain(
'rspec:pg found 2 failed out of 8 total tests',
);
});
it('renders failed summary text + new badge', done => {
setImmediate(() => {
expect(vm.$el.querySelector('.gl-spinner')).toBeNull();
expect(vm.$el.querySelector('.js-code-text').textContent.trim()).toEqual(
'Test summary contained 2 failed out of 11 total tests',
);
expect(vm.$el.textContent).toContain('rspec:pg found 2 failed out of 8 total tests');
expect(vm.$el.textContent).toContain('New');
expect(vm.$el.textContent).toContain(
'java ant found no changed test results out of 3 total tests',
);
done();
});
it('renders failed issue in list', () => {
expect(findIssueDescription().text()).toContain('New');
expect(findIssueDescription().text()).toContain(
'Test#sum when a is 1 and b is 2 returns summary',
);
});
});
describe('with new error result', () => {
beforeEach(() => {
mock.onGet('test_results.json').reply(200, newErrorsTestReports, {});
vm = mountComponent(Component, {
endpoint: 'test_results.json',
});
setReports(newErrorsTestReports);
mountComponent();
});
it('renders error summary text', () => {
expect(findHeader().text()).toBe('Test summary contained 2 errors out of 11 total tests');
});
it('renders error test suite', () => {
expect(findSummaryDescription().text()).toContain(
'karma found 2 errors out of 3 total tests',
);
});
it('renders error summary text + new badge', done => {
setImmediate(() => {
expect(vm.$el.querySelector('.gl-spinner')).toBeNull();
expect(vm.$el.querySelector('.js-code-text').textContent.trim()).toEqual(
'Test summary contained 2 errors out of 11 total tests',
);
expect(vm.$el.textContent).toContain('karma found 2 errors out of 3 total tests');
expect(vm.$el.textContent).toContain('New');
expect(vm.$el.textContent).toContain(
'rspec:pg found no changed test results out of 8 total tests',
);
done();
});
it('renders error issue in list', () => {
expect(findIssueDescription().text()).toContain('New');
expect(findIssueDescription().text()).toContain(
'Test#sum when a is 1 and b is 2 returns summary',
);
});
});
describe('with mixed results', () => {
beforeEach(() => {
mock.onGet('test_results.json').reply(200, mixedResultsTestReports, {});
vm = mountComponent(Component, {
endpoint: 'test_results.json',
});
setReports(mixedResultsTestReports);
mountComponent();
});
it('renders summary text', () => {
expect(findHeader().text()).toBe(
'Test summary contained 2 failed and 2 fixed test results out of 11 total tests',
);
});
it('renders summary text', done => {
setImmediate(() => {
expect(vm.$el.querySelector('.gl-spinner')).toBeNull();
expect(vm.$el.querySelector('.js-code-text').textContent.trim()).toEqual(
'Test summary contained 2 failed and 2 fixed test results out of 11 total tests',
);
expect(vm.$el.textContent).toContain(
'rspec:pg found 1 failed and 2 fixed test results out of 8 total tests',
);
expect(vm.$el.textContent).toContain('New');
expect(vm.$el.textContent).toContain(' java ant found 1 failed out of 3 total tests');
done();
});
it('renders failed test suite', () => {
expect(findSummaryDescription().text()).toContain(
'rspec:pg found 1 failed and 2 fixed test results out of 8 total tests',
);
});
it('renders failed issue in list', () => {
expect(findIssueDescription().text()).toContain('New');
expect(findIssueDescription().text()).toContain(
'Test#subtract when a is 2 and b is 1 returns correct result',
);
});
});
describe('with resolved failures and resolved errors', () => {
beforeEach(() => {
mock.onGet('test_results.json').reply(200, resolvedFailures, {});
vm = mountComponent(Component, {
endpoint: 'test_results.json',
});
setReports(resolvedFailures);
mountComponent();
});
it('renders summary text', done => {
setImmediate(() => {
expect(vm.$el.querySelector('.gl-spinner')).toBeNull();
expect(vm.$el.querySelector('.js-code-text').textContent.trim()).toEqual(
'Test summary contained 4 fixed test results out of 11 total tests',
);
expect(vm.$el.textContent).toContain(
'rspec:pg found 4 fixed test results out of 8 total tests',
);
done();
});
it('renders summary text', () => {
expect(findHeader().text()).toBe(
'Test summary contained 4 fixed test results out of 11 total tests',
);
});
it('renders resolved test suite', () => {
expect(findSummaryDescription().text()).toContain(
'rspec:pg found 4 fixed test results out of 8 total tests',
);
});
it('renders resolved failures', done => {
setImmediate(() => {
expect(vm.$el.querySelector('.report-block-container').textContent).toContain(
resolvedFailures.suites[0].resolved_failures[0].name,
);
expect(vm.$el.querySelector('.report-block-container').textContent).toContain(
resolvedFailures.suites[0].resolved_failures[1].name,
);
done();
});
it('renders resolved failures', () => {
expect(findIssueDescription().text()).toContain(
resolvedFailures.suites[0].resolved_failures[0].name,
);
});
it('renders resolved errors', done => {
setImmediate(() => {
expect(vm.$el.querySelector('.report-block-container').textContent).toContain(
resolvedFailures.suites[0].resolved_errors[0].name,
);
expect(vm.$el.querySelector('.report-block-container').textContent).toContain(
resolvedFailures.suites[0].resolved_errors[1].name,
);
done();
});
it('renders resolved errors', () => {
expect(
findAllIssueDescriptions()
.at(2)
.text(),
).toContain(resolvedFailures.suites[0].resolved_errors[0].name);
});
});
describe('with a report that failed to load', () => {
beforeEach(() => {
mock.onGet('test_results.json').reply(200, failedReport, {});
vm = mountComponent(Component, {
endpoint: 'test_results.json',
});
setReports(failedReport);
mountComponent();
});
it('renders an error status for the report', done => {
setImmediate(() => {
const { name } = failedReport.suites[0];
it('renders an error status for the report', () => {
const { name } = failedReport.suites[0];
expect(vm.$el.querySelector('.report-block-list-issue').textContent).toContain(
`An error occurred while loading ${name} results`,
);
done();
});
expect(findSummaryDescription().text()).toContain(
`An error occurred while loading ${name} result`,
);
});
});
describe('with error', () => {
beforeEach(() => {
mock.onGet('test_results.json').reply(500, {}, {});
vm = mountComponent(Component, {
endpoint: 'test_results.json',
});
mockStore.state.isLoading = false;
mockStore.state.hasError = true;
mountComponent();
});
it('renders loading summary text with loading icon', done => {
setImmediate(() => {
expect(vm.$el.querySelector('.js-code-text').textContent.trim()).toEqual(
'Test summary failed loading results',
);
done();
});
it('renders loading state', () => {
expect(findHeader().text()).toBe('Test summary failed loading results');
});
});
describe('while loading', () => {
beforeEach(() => {
mock.onGet('test_results.json').reply(200, {}, {});
vm = mountComponent(Component, {
endpoint: 'test_results.json',
});
mockStore.state.isLoading = true;
mountComponent();
});
it('renders loading summary text with loading icon', done => {
expect(vm.$el.querySelector('.gl-spinner')).not.toBeNull();
expect(vm.$el.querySelector('.js-code-text').textContent.trim()).toEqual(
'Test summary results are being parsed',
);
setImmediate(() => {
done();
});
it('renders loading state', () => {
expect(findHeader().text()).toBe('Test summary results are being parsed');
});
});
});
{
"summary": { "total": 11, "resolved": 0, "errored": 2, "failed": 0 },
"suites": [
{
"name": "rspec:pg",
"summary": { "total": 8, "resolved": 0, "errored": 0, "failed": 0 },
"new_failures": [],
"resolved_failures": [],
"existing_failures": [],
"new_errors": [],
"resolved_errors": [],
"existing_errors": []
},
{
"name": "karma",
"summary": { "total": 3, "resolved": 0, "errored": 2, "failed": 0 },
......@@ -33,6 +23,16 @@
],
"resolved_errors": [],
"existing_errors": []
},
{
"name": "rspec:pg",
"summary": { "total": 8, "resolved": 0, "errored": 0, "failed": 0 },
"new_failures": [],
"resolved_failures": [],
"existing_failures": [],
"new_errors": [],
"resolved_errors": [],
"existing_errors": []
}
]
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment