Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2022-07-20 18:40:28 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2022-07-20 18:40:28 +0300
commitb595cb0c1dec83de5bdee18284abe86614bed33b (patch)
tree8c3d4540f193c5ff98019352f554e921b3a41a72 /spec/frontend/vue_mr_widget/mr_widget_options_spec.js
parent2f9104a328fc8a4bddeaa4627b595166d24671d0 (diff)
Add latest changes from gitlab-org/gitlab@15-2-stable-eev15.2.0-rc42
Diffstat (limited to 'spec/frontend/vue_mr_widget/mr_widget_options_spec.js')
-rw-r--r--spec/frontend/vue_mr_widget/mr_widget_options_spec.js169
1 files changed, 83 insertions, 86 deletions
diff --git a/spec/frontend/vue_mr_widget/mr_widget_options_spec.js b/spec/frontend/vue_mr_widget/mr_widget_options_spec.js
index 6abbb052aef..b3af5eba364 100644
--- a/spec/frontend/vue_mr_widget/mr_widget_options_spec.js
+++ b/spec/frontend/vue_mr_widget/mr_widget_options_spec.js
@@ -32,6 +32,7 @@ import {
fullReportExtension,
noTelemetryExtension,
pollingExtension,
+ pollingFullDataExtension,
pollingErrorExtension,
multiPollingExtension,
} from './test_extensions';
@@ -42,6 +43,13 @@ jest.mock('~/smart_interval');
jest.mock('~/lib/utils/favicon');
+jest.mock('@sentry/browser', () => ({
+ setExtra: jest.fn(),
+ setExtras: jest.fn(),
+ captureMessage: jest.fn(),
+ captureException: jest.fn(),
+}));
+
Vue.use(VueApollo);
describe('MrWidgetOptions', () => {
@@ -66,24 +74,16 @@ describe('MrWidgetOptions', () => {
afterEach(() => {
mock.restore();
wrapper.destroy();
- wrapper = null;
gl.mrWidgetData = {};
gon.features = {};
});
- const createComponent = (mrData = mockData, options = {}, glFeatures = {}) => {
- if (wrapper) {
- wrapper.destroy();
- }
-
+ const createComponent = (mrData = mockData, options = {}) => {
wrapper = mount(MrWidgetOptions, {
propsData: {
mrData: { ...mrData },
},
- provide: {
- glFeatures,
- },
...options,
});
@@ -521,7 +521,7 @@ describe('MrWidgetOptions', () => {
describe('rendering relatedLinks', () => {
beforeEach(() => {
- createComponent({
+ return createComponent({
...mockData,
issues_links: {
closing: `
@@ -531,8 +531,10 @@ describe('MrWidgetOptions', () => {
`,
},
});
+ });
- return nextTick();
+ afterEach(() => {
+ wrapper.destroy();
});
it('renders if there are relatedLinks', () => {
@@ -875,8 +877,8 @@ describe('MrWidgetOptions', () => {
});
describe('given feature flag is enabled', () => {
- beforeEach(() => {
- createComponent();
+ beforeEach(async () => {
+ await createComponent();
wrapper.vm.mr.hasCI = false;
});
@@ -905,6 +907,19 @@ describe('MrWidgetOptions', () => {
});
});
+ describe('merge error', () => {
+ it.each`
+ state | show | showText
+ ${'closed'} | ${false} | ${'hides'}
+ ${'merged'} | ${true} | ${'shows'}
+ ${'open'} | ${true} | ${'shows'}
+ `('it $showText merge error when state is $state', ({ state, show }) => {
+ createComponent({ ...mockData, state, merge_error: 'Error!' });
+
+ expect(wrapper.find('[data-testid="merge_error"]').exists()).toBe(show);
+ });
+ });
+
describe('mock extension', () => {
let pollRequest;
@@ -917,8 +932,6 @@ describe('MrWidgetOptions', () => {
});
afterEach(() => {
- pollRequest.mockRestore();
-
registeredExtensions.extensions = [];
});
@@ -970,16 +983,14 @@ describe('MrWidgetOptions', () => {
describe('expansion', () => {
it('hides collapse button', async () => {
registerExtension(workingExtension(false));
- createComponent();
- await waitForPromises();
+ await createComponent();
expect(findExtensionToggleButton().exists()).toBe(false);
});
it('shows collapse button', async () => {
registerExtension(workingExtension(true));
- createComponent();
- await waitForPromises();
+ await createComponent();
expect(findExtensionToggleButton().exists()).toBe(true);
});
@@ -997,17 +1008,7 @@ describe('MrWidgetOptions', () => {
});
afterEach(() => {
- pollRequest.mockRestore();
-
registeredExtensions.extensions = [];
-
- // Clear all left-over timeouts that may be registered in the poll class
- let id = window.setTimeout(() => {}, 0);
-
- while (id > 0) {
- window.clearTimeout(id);
- id -= 1;
- }
});
describe('success - multi polling', () => {
@@ -1058,87 +1059,81 @@ describe('MrWidgetOptions', () => {
describe('success', () => {
it('does not make additional requests after poll is successful', async () => {
registerExtension(pollingExtension);
+
await createComponent();
- // called two times due to parent component polling (mount) and extension polling
- expect(pollRequest).toHaveBeenCalledTimes(2);
+
+ expect(pollRequest).toHaveBeenCalledTimes(6);
});
+ });
+
+ describe('success - full data polling', () => {
+ it('sets data when polling is complete', async () => {
+ registerExtension(pollingFullDataExtension);
- it('keeps polling when poll-interval header is provided', async () => {
- registerExtension({
- ...pollingExtension,
- methods: {
- ...pollingExtension.methods,
- fetchCollapsedData() {
- return Promise.resolve({
- data: {},
- headers: { 'poll-interval': 1 },
- status: 204,
- });
- },
- },
- });
await createComponent();
- expect(findWidgetTestExtension().html()).toContain('Test extension loading...');
+
+ api.trackRedisHllUserEvent.mockClear();
+ api.trackRedisCounterEvent.mockClear();
+
+ findExtensionToggleButton().trigger('click');
+
+ // The default working extension is a "warning" type, which generates a second - more specific - telemetry event for expansions
+ expect(api.trackRedisHllUserEvent).toHaveBeenCalledTimes(2);
+ expect(api.trackRedisHllUserEvent).toHaveBeenCalledWith(
+ 'i_code_review_merge_request_widget_test_extension_expand',
+ );
+ expect(api.trackRedisHllUserEvent).toHaveBeenCalledWith(
+ 'i_code_review_merge_request_widget_test_extension_expand_warning',
+ );
+ expect(api.trackRedisCounterEvent).toHaveBeenCalledTimes(2);
+ expect(api.trackRedisCounterEvent).toHaveBeenCalledWith(
+ 'i_code_review_merge_request_widget_test_extension_count_expand',
+ );
+ expect(api.trackRedisCounterEvent).toHaveBeenCalledWith(
+ 'i_code_review_merge_request_widget_test_extension_count_expand_warning',
+ );
});
});
describe('error', () => {
- let captureException;
-
- beforeEach(() => {
- captureException = jest.spyOn(Sentry, 'captureException');
-
+ it('does not make additional requests after poll has failed', async () => {
registerExtension(pollingErrorExtension);
+ await createComponent();
- createComponent();
+ expect(pollRequest).toHaveBeenCalledTimes(6);
});
- it('does not make additional requests after poll has failed', () => {
- // called two times due to parent component polling (mount) and extension polling
- expect(pollRequest).toHaveBeenCalledTimes(2);
- });
+ it('captures sentry error and displays error when poll has failed', async () => {
+ registerExtension(pollingErrorExtension);
+ await createComponent();
- it('captures sentry error and displays error when poll has failed', () => {
- expect(captureException).toHaveBeenCalledTimes(1);
- expect(captureException).toHaveBeenCalledWith(new Error('Fetch error'));
+ expect(Sentry.captureException).toHaveBeenCalledTimes(5);
+ expect(Sentry.captureException).toHaveBeenCalledWith(new Error('Fetch error'));
expect(wrapper.findComponent(StatusIcon).props('iconName')).toBe('failed');
});
});
});
describe('mock extension errors', () => {
- let captureException;
-
- const itHandlesTheException = () => {
- expect(captureException).toHaveBeenCalledTimes(1);
- expect(captureException).toHaveBeenCalledWith(new Error('Fetch error'));
- expect(wrapper.findComponent(StatusIcon).props('iconName')).toBe('failed');
- };
-
- beforeEach(() => {
- captureException = jest.spyOn(Sentry, 'captureException');
- });
-
afterEach(() => {
registeredExtensions.extensions = [];
- captureException = null;
});
it('handles collapsed data fetch errors', async () => {
registerExtension(collapsedDataErrorExtension);
- createComponent();
- await waitForPromises();
+ await createComponent();
expect(
wrapper.find('[data-testid="widget-extension"] [data-testid="toggle-button"]').exists(),
).toBe(false);
- itHandlesTheException();
+ expect(Sentry.captureException).toHaveBeenCalledTimes(5);
+ expect(Sentry.captureException).toHaveBeenCalledWith(new Error('Fetch error'));
+ expect(wrapper.findComponent(StatusIcon).props('iconName')).toBe('failed');
});
it('handles full data fetch errors', async () => {
registerExtension(fullDataErrorExtension);
- createComponent();
- await waitForPromises();
+ await createComponent();
expect(wrapper.findComponent(StatusIcon).props('iconName')).not.toBe('error');
wrapper
@@ -1148,7 +1143,9 @@ describe('MrWidgetOptions', () => {
await nextTick();
await waitForPromises();
- itHandlesTheException();
+ expect(Sentry.captureException).toHaveBeenCalledTimes(1);
+ expect(Sentry.captureException).toHaveBeenCalledWith(new Error('Fetch error'));
+ expect(wrapper.findComponent(StatusIcon).props('iconName')).toBe('failed');
});
});
@@ -1163,11 +1160,11 @@ describe('MrWidgetOptions', () => {
expect(api.trackRedisHllUserEvent).toHaveBeenCalledTimes(1);
expect(api.trackRedisHllUserEvent).toHaveBeenCalledWith(
- 'i_merge_request_widget_test_extension_view',
+ 'i_code_review_merge_request_widget_test_extension_view',
);
expect(api.trackRedisCounterEvent).toHaveBeenCalledTimes(1);
expect(api.trackRedisCounterEvent).toHaveBeenCalledWith(
- 'i_merge_request_widget_test_extension_count_view',
+ 'i_code_review_merge_request_widget_test_extension_count_view',
);
});
@@ -1186,17 +1183,17 @@ describe('MrWidgetOptions', () => {
// The default working extension is a "warning" type, which generates a second - more specific - telemetry event for expansions
expect(api.trackRedisHllUserEvent).toHaveBeenCalledTimes(2);
expect(api.trackRedisHllUserEvent).toHaveBeenCalledWith(
- 'i_merge_request_widget_test_extension_expand',
+ 'i_code_review_merge_request_widget_test_extension_expand',
);
expect(api.trackRedisHllUserEvent).toHaveBeenCalledWith(
- 'i_merge_request_widget_test_extension_expand_warning',
+ 'i_code_review_merge_request_widget_test_extension_expand_warning',
);
expect(api.trackRedisCounterEvent).toHaveBeenCalledTimes(2);
expect(api.trackRedisCounterEvent).toHaveBeenCalledWith(
- 'i_merge_request_widget_test_extension_count_expand',
+ 'i_code_review_merge_request_widget_test_extension_count_expand',
);
expect(api.trackRedisCounterEvent).toHaveBeenCalledWith(
- 'i_merge_request_widget_test_extension_count_expand_warning',
+ 'i_code_review_merge_request_widget_test_extension_count_expand_warning',
);
});
@@ -1239,11 +1236,11 @@ describe('MrWidgetOptions', () => {
expect(api.trackRedisHllUserEvent).toHaveBeenCalledTimes(1);
expect(api.trackRedisHllUserEvent).toHaveBeenCalledWith(
- 'i_merge_request_widget_test_extension_click_full_report',
+ 'i_code_review_merge_request_widget_test_extension_click_full_report',
);
expect(api.trackRedisCounterEvent).toHaveBeenCalledTimes(1);
expect(api.trackRedisCounterEvent).toHaveBeenCalledWith(
- 'i_merge_request_widget_test_extension_count_click_full_report',
+ 'i_code_review_merge_request_widget_test_extension_count_click_full_report',
);
});