debian-mirror-gitlab/spec/frontend/performance_bar/components/detailed_metric_spec.js

148 lines
4.1 KiB
JavaScript
Raw Normal View History

2020-01-01 13:55:28 +05:30
import { shallowMount } from '@vue/test-utils';
2020-10-24 23:57:45 +05:30
import { trimText } from 'helpers/text_helper';
2019-12-21 20:55:43 +05:30
import DetailedMetric from '~/performance_bar/components/detailed_metric.vue';
import RequestWarning from '~/performance_bar/components/request_warning.vue';
describe('detailedMetric', () => {
2020-06-23 00:09:42 +05:30
let wrapper;
const createComponent = props => {
wrapper = shallowMount(DetailedMetric, {
2019-12-21 20:55:43 +05:30
propsData: {
...props,
},
});
2020-06-23 00:09:42 +05:30
};
afterEach(() => {
wrapper.destroy();
});
2019-12-21 20:55:43 +05:30
describe('when the current request has no details', () => {
2020-06-23 00:09:42 +05:30
beforeEach(() => {
createComponent({
currentRequest: {},
metric: 'gitaly',
header: 'Gitaly calls',
details: 'details',
keys: ['feature', 'request'],
});
2019-12-21 20:55:43 +05:30
});
it('does not render the element', () => {
expect(wrapper.isEmpty()).toBe(true);
});
});
describe('when the current request has details', () => {
const requestDetails = [
{ duration: '100', feature: 'find_commit', request: 'abcdef', backtrace: ['hello', 'world'] },
{ duration: '23', feature: 'rebase_in_progress', request: '', backtrace: ['world', 'hello'] },
];
describe('with a default metric name', () => {
2020-06-23 00:09:42 +05:30
beforeEach(() => {
createComponent({
currentRequest: {
details: {
gitaly: {
duration: '123ms',
calls: '456',
details: requestDetails,
warnings: ['gitaly calls: 456 over 30'],
},
2019-12-21 20:55:43 +05:30
},
},
2020-06-23 00:09:42 +05:30
metric: 'gitaly',
header: 'Gitaly calls',
keys: ['feature', 'request'],
});
2019-12-21 20:55:43 +05:30
});
it('displays details', () => {
expect(wrapper.text().replace(/\s+/g, ' ')).toContain('123ms / 456');
});
it('adds a modal with a table of the details', () => {
wrapper
.findAll('.performance-bar-modal td:nth-child(1)')
.wrappers.forEach((duration, index) => {
expect(duration.text()).toContain(requestDetails[index].duration);
});
wrapper
.findAll('.performance-bar-modal td:nth-child(2)')
.wrappers.forEach((feature, index) => {
expect(feature.text()).toContain(requestDetails[index].feature);
});
wrapper
.findAll('.performance-bar-modal td:nth-child(2)')
.wrappers.forEach((request, index) => {
expect(request.text()).toContain(requestDetails[index].request);
});
expect(wrapper.find('.text-expander.js-toggle-button')).not.toBeNull();
wrapper.findAll('.performance-bar-modal td:nth-child(2)').wrappers.forEach(request => {
expect(request.text()).toContain('world');
});
});
it('displays the metric title', () => {
expect(wrapper.text()).toContain('gitaly');
});
it('displays request warnings', () => {
expect(wrapper.find(RequestWarning).exists()).toBe(true);
});
});
describe('when using a custom metric title', () => {
2020-06-23 00:09:42 +05:30
beforeEach(() => {
createComponent({
currentRequest: {
details: {
gitaly: {
duration: '123ms',
calls: '456',
details: requestDetails,
},
},
},
metric: 'gitaly',
title: 'custom',
header: 'Gitaly calls',
keys: ['feature', 'request'],
});
});
it('displays the custom title', () => {
expect(wrapper.text()).toContain('custom');
});
});
});
describe('when the details has no duration', () => {
beforeEach(() => {
createComponent({
2019-12-21 20:55:43 +05:30
currentRequest: {
details: {
2020-06-23 00:09:42 +05:30
bullet: {
2019-12-21 20:55:43 +05:30
calls: '456',
2020-06-23 00:09:42 +05:30
details: [{ notification: 'notification', backtrace: 'backtrace' }],
2019-12-21 20:55:43 +05:30
},
},
},
2020-06-23 00:09:42 +05:30
metric: 'bullet',
header: 'Bullet notifications',
keys: ['notification'],
2019-12-21 20:55:43 +05:30
});
2020-06-23 00:09:42 +05:30
});
2019-12-21 20:55:43 +05:30
2020-06-23 00:09:42 +05:30
it('renders only the number of calls', () => {
expect(trimText(wrapper.text())).toEqual('456 notification backtrace bullet');
2019-12-21 20:55:43 +05:30
});
});
});