diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-08-20 18:42:06 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-08-20 18:42:06 +0000 |
commit | 6e4e1050d9dba2b7b2523fdd1768823ab85feef4 (patch) | |
tree | 78be5963ec075d80116a932011d695dd33910b4e /spec/frontend/helpers | |
parent | 1ce776de4ae122aba3f349c02c17cebeaa8ecf07 (diff) | |
download | gitlab-ce-6e4e1050d9dba2b7b2523fdd1768823ab85feef4.tar.gz |
Add latest changes from gitlab-org/gitlab@13-3-stable-ee
Diffstat (limited to 'spec/frontend/helpers')
-rw-r--r-- | spec/frontend/helpers/backoff_helper.js | 33 | ||||
-rw-r--r-- | spec/frontend/helpers/dom_events_helper.js | 3 | ||||
-rw-r--r-- | spec/frontend/helpers/dom_shims/index.js | 2 | ||||
-rw-r--r-- | spec/frontend/helpers/dom_shims/mutation_observer.js | 7 | ||||
-rw-r--r-- | spec/frontend/helpers/dom_shims/range.js | 13 | ||||
-rw-r--r-- | spec/frontend/helpers/filtered_search_spec_helper.js | 2 | ||||
-rw-r--r-- | spec/frontend/helpers/init_vue_mr_page_helper.js | 1 | ||||
-rw-r--r-- | spec/frontend/helpers/monitor_helper_spec.js | 58 |
8 files changed, 88 insertions, 31 deletions
diff --git a/spec/frontend/helpers/backoff_helper.js b/spec/frontend/helpers/backoff_helper.js new file mode 100644 index 00000000000..e5c0308d3fb --- /dev/null +++ b/spec/frontend/helpers/backoff_helper.js @@ -0,0 +1,33 @@ +/** + * A mock version of a commonUtils `backOff` to test multiple + * retries. + * + * Usage: + * + * ``` + * import * as commonUtils from '~/lib/utils/common_utils'; + * import { backoffMockImplementation } from '../../helpers/backoff_helper'; + * + * beforeEach(() => { + * // ... + * jest.spyOn(commonUtils, 'backOff').mockImplementation(backoffMockImplementation); + * }); + * ``` + * + * @param {Function} callback + */ +export const backoffMockImplementation = callback => { + const q = new Promise((resolve, reject) => { + const stop = arg => (arg instanceof Error ? reject(arg) : resolve(arg)); + const next = () => callback(next, stop); + // Define a timeout based on a mock timer + setTimeout(() => { + callback(next, stop); + }); + }); + // Run all resolved promises in chain + jest.runOnlyPendingTimers(); + return q; +}; + +export default { backoffMockImplementation }; diff --git a/spec/frontend/helpers/dom_events_helper.js b/spec/frontend/helpers/dom_events_helper.js index b66c12daf4f..139e0813397 100644 --- a/spec/frontend/helpers/dom_events_helper.js +++ b/spec/frontend/helpers/dom_events_helper.js @@ -1,3 +1,4 @@ +// eslint-disable-next-line import/prefer-default-export export const triggerDOMEvent = type => { window.document.dispatchEvent( new Event(type, { @@ -6,5 +7,3 @@ export const triggerDOMEvent = type => { }), ); }; - -export default () => {}; diff --git a/spec/frontend/helpers/dom_shims/index.js b/spec/frontend/helpers/dom_shims/index.js index d18bb94c107..2ba5701fc77 100644 --- a/spec/frontend/helpers/dom_shims/index.js +++ b/spec/frontend/helpers/dom_shims/index.js @@ -4,7 +4,7 @@ import './element_scroll_to'; import './form_element'; import './get_client_rects'; import './inner_text'; -import './mutation_observer'; +import './range'; import './window_scroll_to'; import './scroll_by'; import './size_properties'; diff --git a/spec/frontend/helpers/dom_shims/mutation_observer.js b/spec/frontend/helpers/dom_shims/mutation_observer.js deleted file mode 100644 index 68c494f19ea..00000000000 --- a/spec/frontend/helpers/dom_shims/mutation_observer.js +++ /dev/null @@ -1,7 +0,0 @@ -/* eslint-disable class-methods-use-this */ -class MutationObserverStub { - disconnect() {} - observe() {} -} - -global.MutationObserver = MutationObserverStub; diff --git a/spec/frontend/helpers/dom_shims/range.js b/spec/frontend/helpers/dom_shims/range.js new file mode 100644 index 00000000000..4ffdf3280ad --- /dev/null +++ b/spec/frontend/helpers/dom_shims/range.js @@ -0,0 +1,13 @@ +if (window.Range.prototype.getBoundingClientRect) { + throw new Error('window.Range.prototype.getBoundingClientRect already exists. Remove this stub!'); +} +window.Range.prototype.getBoundingClientRect = function getBoundingClientRect() { + return { x: 0, y: 0, width: 0, height: 0, top: 0, right: 0, bottom: 0, left: 0 }; +}; + +if (window.Range.prototype.getClientRects) { + throw new Error('window.Range.prototype.getClientRects already exists. Remove this stub!'); +} +window.Range.prototype.getClientRects = function getClientRects() { + return [this.getBoundingClientRect()]; +}; diff --git a/spec/frontend/helpers/filtered_search_spec_helper.js b/spec/frontend/helpers/filtered_search_spec_helper.js index ceb7982bbc3..ecf10694a16 100644 --- a/spec/frontend/helpers/filtered_search_spec_helper.js +++ b/spec/frontend/helpers/filtered_search_spec_helper.js @@ -15,7 +15,7 @@ export default class FilteredSearchSpecHelper { <div class="value-container"> <div class="value">${value}</div> <div class="remove-token" role="button"> - <i class="fa fa-close"></i> + <svg class="s16 close-icon"></svg> </div> </div> </div> diff --git a/spec/frontend/helpers/init_vue_mr_page_helper.js b/spec/frontend/helpers/init_vue_mr_page_helper.js index c1d608cc5a0..b9aed63d0f6 100644 --- a/spec/frontend/helpers/init_vue_mr_page_helper.js +++ b/spec/frontend/helpers/init_vue_mr_page_helper.js @@ -22,6 +22,7 @@ export default function initVueMRPage() { mrDiscussionsEl.setAttribute('data-noteable-data', JSON.stringify(noteableDataMock)); mrDiscussionsEl.setAttribute('data-notes-data', JSON.stringify(notesDataMock)); mrDiscussionsEl.setAttribute('data-noteable-type', 'merge-request'); + mrDiscussionsEl.setAttribute('data-is-locked', 'false'); mrTestEl.appendChild(mrDiscussionsEl); const discussionCounterEl = document.createElement('div'); diff --git a/spec/frontend/helpers/monitor_helper_spec.js b/spec/frontend/helpers/monitor_helper_spec.js index 083b6404125..219b05e312b 100644 --- a/spec/frontend/helpers/monitor_helper_spec.js +++ b/spec/frontend/helpers/monitor_helper_spec.js @@ -1,12 +1,38 @@ -import * as monitorHelper from '~/helpers/monitor_helper'; +import { getSeriesLabel, makeDataSeries } from '~/helpers/monitor_helper'; describe('monitor helper', () => { const defaultConfig = { default: true, name: 'default name' }; const name = 'data name'; const series = [[1, 1], [2, 2], [3, 3]]; - const data = ({ metric = { default_name: name }, values = series } = {}) => [{ metric, values }]; + + describe('getSeriesLabel', () => { + const metricAttributes = { __name__: 'up', app: 'prometheus' }; + + it('gets a single attribute label', () => { + expect(getSeriesLabel('app', metricAttributes)).toBe('app: prometheus'); + }); + + it('gets a templated label', () => { + expect(getSeriesLabel('{{__name__}}', metricAttributes)).toBe('up'); + expect(getSeriesLabel('{{app}}', metricAttributes)).toBe('prometheus'); + expect(getSeriesLabel('{{missing}}', metricAttributes)).toBe('{{missing}}'); + }); + + it('gets a multiple label', () => { + expect(getSeriesLabel(null, metricAttributes)).toBe('__name__: up, app: prometheus'); + expect(getSeriesLabel('', metricAttributes)).toBe('__name__: up, app: prometheus'); + }); + + it('gets a simple label', () => { + expect(getSeriesLabel('A label', {})).toBe('A label'); + }); + }); describe('makeDataSeries', () => { + const data = ({ metric = { default_name: name }, values = series } = {}) => [ + { metric, values }, + ]; + const expectedDataSeries = [ { ...defaultConfig, @@ -15,19 +41,17 @@ describe('monitor helper', () => { ]; it('converts query results to data series', () => { - expect(monitorHelper.makeDataSeries(data({ metric: {} }), defaultConfig)).toEqual( - expectedDataSeries, - ); + expect(makeDataSeries(data({ metric: {} }), defaultConfig)).toEqual(expectedDataSeries); }); it('returns an empty array if no query results exist', () => { - expect(monitorHelper.makeDataSeries([], defaultConfig)).toEqual([]); + expect(makeDataSeries([], defaultConfig)).toEqual([]); }); it('handles multi-series query results', () => { const expectedData = { ...expectedDataSeries[0], name: 'default name: data name' }; - expect(monitorHelper.makeDataSeries([...data(), ...data()], defaultConfig)).toEqual([ + expect(makeDataSeries([...data(), ...data()], defaultConfig)).toEqual([ expectedData, expectedData, ]); @@ -39,10 +63,7 @@ describe('monitor helper', () => { name: '{{cmd}}', }; - const [result] = monitorHelper.makeDataSeries( - [{ metric: { cmd: 'brpop' }, values: series }], - config, - ); + const [result] = makeDataSeries([{ metric: { cmd: 'brpop' }, values: series }], config); expect(result.name).toEqual('brpop'); }); @@ -53,7 +74,7 @@ describe('monitor helper', () => { name: '', }; - const [result] = monitorHelper.makeDataSeries( + const [result] = makeDataSeries( [ { metric: { @@ -79,7 +100,7 @@ describe('monitor helper', () => { name: 'backend: {{ backend }}', }; - const [result] = monitorHelper.makeDataSeries( + const [result] = makeDataSeries( [{ metric: { backend: 'HA Server' }, values: series }], config, ); @@ -90,10 +111,7 @@ describe('monitor helper', () => { it('supports repeated template variables', () => { const config = { ...defaultConfig, name: '{{cmd}}, {{cmd}}' }; - const [result] = monitorHelper.makeDataSeries( - [{ metric: { cmd: 'brpop' }, values: series }], - config, - ); + const [result] = makeDataSeries([{ metric: { cmd: 'brpop' }, values: series }], config); expect(result.name).toEqual('brpop, brpop'); }); @@ -101,7 +119,7 @@ describe('monitor helper', () => { it('supports hyphenated template variables', () => { const config = { ...defaultConfig, name: 'expired - {{ test-attribute }}' }; - const [result] = monitorHelper.makeDataSeries( + const [result] = makeDataSeries( [{ metric: { 'test-attribute': 'test-attribute-value' }, values: series }], config, ); @@ -115,7 +133,7 @@ describe('monitor helper', () => { name: '{{job}}: {{cmd}}', }; - const [result] = monitorHelper.makeDataSeries( + const [result] = makeDataSeries( [{ metric: { cmd: 'brpop', job: 'redis' }, values: series }], config, ); @@ -129,7 +147,7 @@ describe('monitor helper', () => { name: '{{cmd}}', }; - const [firstSeries, secondSeries] = monitorHelper.makeDataSeries( + const [firstSeries, secondSeries] = makeDataSeries( [ { metric: { cmd: 'brpop' }, values: series }, { metric: { cmd: 'zrangebyscore' }, values: series }, |