diff options
Diffstat (limited to 'spec/frontend/vue_merge_request_widget/test_extensions.js')
-rw-r--r-- | spec/frontend/vue_merge_request_widget/test_extensions.js | 192 |
1 files changed, 192 insertions, 0 deletions
diff --git a/spec/frontend/vue_merge_request_widget/test_extensions.js b/spec/frontend/vue_merge_request_widget/test_extensions.js new file mode 100644 index 00000000000..1977f550577 --- /dev/null +++ b/spec/frontend/vue_merge_request_widget/test_extensions.js @@ -0,0 +1,192 @@ +import { EXTENSION_ICONS } from '~/vue_merge_request_widget/constants'; + +export const workingExtension = (shouldCollapse = true) => ({ + name: 'WidgetTestExtension', + props: ['targetProjectFullPath'], + expandEvent: 'test_expand_event', + i18n: { + loading: 'Test extension loading...', + }, + computed: { + summary({ count, targetProjectFullPath } = {}) { + return `Test extension summary count: ${count} & ${targetProjectFullPath}`; + }, + statusIcon({ count } = {}) { + return count > 0 ? EXTENSION_ICONS.warning : EXTENSION_ICONS.success; + }, + shouldCollapse() { + return shouldCollapse; + }, + }, + methods: { + fetchCollapsedData({ targetProjectFullPath }) { + return Promise.resolve({ targetProjectFullPath, count: 1 }); + }, + fetchFullData() { + return Promise.resolve([ + { + id: 1, + text: 'Hello world', + icon: { + name: EXTENSION_ICONS.failed, + }, + badge: { + text: 'Closed', + }, + link: { + href: 'https://gitlab.com', + text: 'GitLab.com', + }, + actions: [{ text: 'Full report', href: 'https://gitlab.com', target: '_blank' }], + }, + ]); + }, + }, +}); + +export const collapsedDataErrorExtension = { + name: 'WidgetTestCollapsedErrorExtension', + props: ['targetProjectFullPath'], + expandEvent: 'test_expand_event', + computed: { + summary({ count, targetProjectFullPath }) { + return `Test extension summary count: ${count} & ${targetProjectFullPath}`; + }, + statusIcon({ count }) { + return count > 0 ? EXTENSION_ICONS.warning : EXTENSION_ICONS.success; + }, + }, + methods: { + fetchCollapsedData() { + return Promise.reject(new Error('Fetch error')); + }, + fetchFullData() { + return Promise.resolve([ + { + id: 1, + text: 'Hello world', + icon: { + name: EXTENSION_ICONS.failed, + }, + badge: { + text: 'Closed', + }, + link: { + href: 'https://gitlab.com', + text: 'GitLab.com', + }, + actions: [{ text: 'Full report', href: 'https://gitlab.com', target: '_blank' }], + }, + ]); + }, + }, +}; + +export const fullDataErrorExtension = { + name: 'WidgetTestCollapsedErrorExtension', + props: ['targetProjectFullPath'], + expandEvent: 'test_expand_event', + computed: { + summary({ count, targetProjectFullPath }) { + return `Test extension summary count: ${count} & ${targetProjectFullPath}`; + }, + statusIcon({ count }) { + return count > 0 ? EXTENSION_ICONS.warning : EXTENSION_ICONS.success; + }, + }, + methods: { + fetchCollapsedData({ targetProjectFullPath }) { + return Promise.resolve({ targetProjectFullPath, count: 1 }); + }, + fetchFullData() { + return Promise.reject(new Error('Fetch error')); + }, + }, +}; + +export const pollingExtension = { + ...workingExtension(), + enablePolling: true, +}; + +export const pollingFullDataExtension = { + ...workingExtension(), + enableExpandedPolling: true, + methods: { + fetchCollapsedData({ targetProjectFullPath }) { + return Promise.resolve({ targetProjectFullPath, count: 1 }); + }, + fetchFullData() { + return Promise.resolve([ + { + headers: { 'poll-interval': 0 }, + status: 200, + data: { + id: 1, + text: 'Hello world', + icon: { + name: EXTENSION_ICONS.failed, + }, + badge: { + text: 'Closed', + }, + link: { + href: 'https://gitlab.com', + text: 'GitLab.com', + }, + actions: [{ text: 'Full report', href: 'https://gitlab.com', target: '_blank' }], + }, + }, + ]); + }, + }, +}; + +export const fullReportExtension = { + ...workingExtension(), + computed: { + ...workingExtension().computed, + tertiaryButtons() { + return [ + { + text: 'test', + href: `testref`, + target: '_blank', + fullReport: true, + }, + ]; + }, + }, +}; + +export const noTelemetryExtension = { + ...fullReportExtension, + telemetry: false, +}; + +export const multiPollingExtension = (endpointsToBePolled) => ({ + name: 'WidgetTestMultiPollingExtension', + props: [], + i18n: { + loading: 'Test extension loading...', + }, + computed: { + summary(data) { + return `Multi polling test extension reports: ${data?.[0]?.reports}, count: ${data.length}`; + }, + statusIcon(data) { + return data?.[0]?.reports === 'parsed' ? EXTENSION_ICONS.success : EXTENSION_ICONS.warning; + }, + }, + enablePolling: true, + methods: { + fetchMultiData() { + return endpointsToBePolled; + }, + }, +}); + +export const pollingErrorExtension = { + ...collapsedDataErrorExtension, + enablePolling: true, +}; |