diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2019-11-04 15:06:19 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2019-11-04 15:06:19 +0300 |
commit | 38c79b697f45a949701b9961e87b7c9b8de75abf (patch) | |
tree | bae163aa8d437f74ea4086b93fb6b3c2e0f9013f /spec/frontend | |
parent | 2b7a5214342baa2575b35868316ea9413d2afe1f (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/frontend')
5 files changed, 129 insertions, 351 deletions
diff --git a/spec/frontend/helpers/monitor_helper_spec.js b/spec/frontend/helpers/monitor_helper_spec.js index 2e8bff298c4..c36b603b251 100644 --- a/spec/frontend/helpers/monitor_helper_spec.js +++ b/spec/frontend/helpers/monitor_helper_spec.js @@ -41,5 +41,76 @@ describe('monitor helper', () => { ), ).toEqual([{ ...expectedDataSeries[0], data: [[1, 1]] }]); }); + + it('updates series name from templates', () => { + const config = { + ...defaultConfig, + name: '{{cmd}}', + }; + + const [result] = monitorHelper.makeDataSeries( + [{ metric: { cmd: 'brpop' }, values: series }], + config, + ); + + expect(result.name).toEqual('brpop'); + }); + + it('supports space-padded template expressions', () => { + const config = { + ...defaultConfig, + name: 'backend: {{ backend }}', + }; + + const [result] = monitorHelper.makeDataSeries( + [{ metric: { backend: 'HA Server' }, values: series }], + config, + ); + + expect(result.name).toEqual('backend: HA Server'); + }); + + it('supports repeated template variables', () => { + const config = { ...defaultConfig, name: '{{cmd}}, {{cmd}}' }; + + const [result] = monitorHelper.makeDataSeries( + [{ metric: { cmd: 'brpop' }, values: series }], + config, + ); + + expect(result.name).toEqual('brpop, brpop'); + }); + + it('updates multiple series names from templates', () => { + const config = { + ...defaultConfig, + name: '{{job}}: {{cmd}}', + }; + + const [result] = monitorHelper.makeDataSeries( + [{ metric: { cmd: 'brpop', job: 'redis' }, values: series }], + config, + ); + + expect(result.name).toEqual('redis: brpop'); + }); + + it('updates name for each series', () => { + const config = { + ...defaultConfig, + name: '{{cmd}}', + }; + + const [firstSeries, secondSeries] = monitorHelper.makeDataSeries( + [ + { metric: { cmd: 'brpop' }, values: series }, + { metric: { cmd: 'zrangebyscore' }, values: series }, + ], + config, + ); + + expect(firstSeries.name).toEqual('brpop'); + expect(secondSeries.name).toEqual('zrangebyscore'); + }); }); }); diff --git a/spec/frontend/lib/utils/datetime_utility_spec.js b/spec/frontend/lib/utils/datetime_utility_spec.js index 149ce331ae5..e4c97543b03 100644 --- a/spec/frontend/lib/utils/datetime_utility_spec.js +++ b/spec/frontend/lib/utils/datetime_utility_spec.js @@ -428,17 +428,19 @@ describe('newDate', () => { }); describe('getDateInPast', () => { - const date = new Date(1563235200000); // 2019-07-16T00:00:00.000Z; + const date = new Date('2019-07-16T00:00:00.000Z'); const daysInPast = 90; it('returns the correct date in the past', () => { const dateInPast = datetimeUtility.getDateInPast(date, daysInPast); - expect(dateInPast).toBe('2019-04-17T00:00:00.000Z'); + const expectedDateInPast = new Date('2019-04-17T00:00:00.000Z'); + + expect(dateInPast).toStrictEqual(expectedDateInPast); }); it('does not modifiy the original date', () => { datetimeUtility.getDateInPast(date, daysInPast); - expect(date).toStrictEqual(new Date(1563235200000)); + expect(date).toStrictEqual(new Date('2019-07-16T00:00:00.000Z')); }); }); diff --git a/spec/frontend/monitoring/store/actions_spec.js b/spec/frontend/monitoring/store/actions_spec.js new file mode 100644 index 00000000000..513a0e0d103 --- /dev/null +++ b/spec/frontend/monitoring/store/actions_spec.js @@ -0,0 +1,53 @@ +import axios from '~/lib/utils/axios_utils'; +import MockAdapter from 'axios-mock-adapter'; +import { TEST_HOST } from 'helpers/test_constants'; +import { backOffRequest } from '~/monitoring/stores/actions'; +import statusCodes from '~/lib/utils/http_status'; +import { backOff } from '~/lib/utils/common_utils'; + +jest.mock('~/lib/utils/common_utils'); + +const MAX_REQUESTS = 3; + +describe('Monitoring store helpers', () => { + let mock; + + // Mock underlying `backOff` function to remove in-built delay. + backOff.mockImplementation( + callback => + new Promise((resolve, reject) => { + const stop = arg => (arg instanceof Error ? reject(arg) : resolve(arg)); + const next = () => callback(next, stop); + callback(next, stop); + }), + ); + + beforeEach(() => { + mock = new MockAdapter(axios); + }); + + afterEach(() => { + mock.restore(); + }); + + describe('backOffRequest', () => { + it('returns immediately when recieving a 200 status code', () => { + mock.onGet(TEST_HOST).reply(200); + + return backOffRequest(() => axios.get(TEST_HOST)).then(() => { + expect(mock.history.get.length).toBe(1); + }); + }); + + it(`repeats the network call ${MAX_REQUESTS} times when receiving a 204 response`, done => { + mock.onGet(TEST_HOST).reply(statusCodes.NO_CONTENT, {}); + + backOffRequest(() => axios.get(TEST_HOST)) + .then(done.fail) + .catch(() => { + expect(mock.history.get.length).toBe(MAX_REQUESTS); + done(); + }); + }); + }); +}); diff --git a/spec/frontend/releases/list/components/__snapshots__/release_block_spec.js.snap b/spec/frontend/releases/list/components/__snapshots__/release_block_spec.js.snap deleted file mode 100644 index 8f2c0427c83..00000000000 --- a/spec/frontend/releases/list/components/__snapshots__/release_block_spec.js.snap +++ /dev/null @@ -1,332 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Release block with default props matches the snapshot 1`] = ` -<div - class="card release-block" - id="v0.3" -> - <div - class="card-body" - > - <div - class="d-flex align-items-start" - > - <h2 - class="card-title mt-0 mr-auto" - > - - New release - - <!----> - </h2> - - <a - class="btn btn-default js-edit-button ml-2" - data-original-title="Edit this release" - href="http://0.0.0.0:3001/root/release-test/-/releases/v0.3/edit" - title="" - > - <svg - aria-hidden="true" - class="s16 ic-pencil" - > - <use - xlink:href="#pencil" - /> - </svg> - </a> - </div> - - <div - class="card-subtitle d-flex flex-wrap text-secondary" - > - <div - class="append-right-8" - > - <svg - aria-hidden="true" - class="align-middle s16 ic-commit" - > - <use - xlink:href="#commit" - /> - </svg> - - <span - data-original-title="Initial commit" - title="" - > - c22b0728 - </span> - </div> - - <div - class="append-right-8" - > - <svg - aria-hidden="true" - class="align-middle s16 ic-tag" - > - <use - xlink:href="#tag" - /> - </svg> - - <span - data-original-title="Tag" - title="" - > - v0.3 - </span> - </div> - - <div - class="js-milestone-list-label" - > - <svg - aria-hidden="true" - class="align-middle s16 ic-flag" - > - <use - xlink:href="#flag" - /> - </svg> - - <span - class="js-label-text" - > - Milestones - </span> - </div> - - <a - class="append-right-4 prepend-left-4 js-milestone-link" - data-original-title="The 13.6 milestone!" - href="http://0.0.0.0:3001/root/release-test/-/milestones/2" - title="" - > - - 13.6 - - </a> - - • - - <a - class="append-right-4 prepend-left-4 js-milestone-link" - data-original-title="The 13.5 milestone!" - href="http://0.0.0.0:3001/root/release-test/-/milestones/1" - title="" - > - - 13.5 - - </a> - - <!----> - - <div - class="append-right-4" - > - - • - - <span - data-original-title="Aug 26, 2019 5:54pm GMT+0000" - title="" - > - - released 1 month ago - - </span> - </div> - - <div - class="d-flex" - > - - by - - <a - class="user-avatar-link prepend-left-4" - href="" - > - <span> - <img - alt="root's avatar" - class="avatar s20 " - data-original-title="" - data-src="https://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon" - height="20" - src="https://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon" - title="" - width="20" - /> - - <div - aria-hidden="true" - class="js-user-avatar-image-toolip d-none" - style="display: none;" - > - <div> - root - </div> - </div> - </span> - <!----> - </a> - </div> - </div> - - <div - class="card-text prepend-top-default" - > - <b> - - Assets - - <span - class="js-assets-count badge badge-pill" - > - 5 - </span> - </b> - - <ul - class="pl-0 mb-0 prepend-top-8 list-unstyled js-assets-list" - > - <li - class="append-bottom-8" - > - <a - class="" - data-original-title="Download asset" - href="https://google.com" - title="" - > - <svg - aria-hidden="true" - class="align-middle append-right-4 align-text-bottom s16 ic-package" - > - <use - xlink:href="#package" - /> - </svg> - - my link - - <span> - (external source) - </span> - </a> - </li> - <li - class="append-bottom-8" - > - <a - class="" - data-original-title="Download asset" - href="https://gitlab.com/gitlab-org/gitlab-foss/-/jobs/artifacts/v11.6.0-rc4/download?job=rspec-mysql+41%2F50" - title="" - > - <svg - aria-hidden="true" - class="align-middle append-right-4 align-text-bottom s16 ic-package" - > - <use - xlink:href="#package" - /> - </svg> - - my second link - - <!----> - </a> - </li> - </ul> - - <div - class="dropdown" - > - <button - aria-expanded="false" - aria-haspopup="true" - class="btn btn-link" - data-toggle="dropdown" - type="button" - > - <svg - aria-hidden="true" - class="align-top append-right-4 s16 ic-doc-code" - > - <use - xlink:href="#doc-code" - /> - </svg> - - Source code - - <svg - aria-hidden="true" - class="s16 ic-arrow-down" - > - <use - xlink:href="#arrow-down" - /> - </svg> - </button> - - <div - class="js-sources-dropdown dropdown-menu" - > - <li> - <a - class="" - href="http://0.0.0.0:3001/root/release-test/-/archive/v0.3/release-test-v0.3.zip" - > - Download zip - </a> - </li> - <li> - <a - class="" - href="http://0.0.0.0:3001/root/release-test/-/archive/v0.3/release-test-v0.3.tar.gz" - > - Download tar.gz - </a> - </li> - <li> - <a - class="" - href="http://0.0.0.0:3001/root/release-test/-/archive/v0.3/release-test-v0.3.tar.bz2" - > - Download tar.bz2 - </a> - </li> - <li> - <a - class="" - href="http://0.0.0.0:3001/root/release-test/-/archive/v0.3/release-test-v0.3.tar" - > - Download tar - </a> - </li> - </div> - </div> - </div> - - <div - class="card-text prepend-top-default" - > - <div> - <p - data-sourcepos="1:1-1:21" - dir="auto" - > - A super nice release! - </p> - </div> - </div> - </div> -</div> -`; diff --git a/spec/frontend/releases/list/components/release_block_spec.js b/spec/frontend/releases/list/components/release_block_spec.js index 93f202b2977..6601c4265f6 100644 --- a/spec/frontend/releases/list/components/release_block_spec.js +++ b/spec/frontend/releases/list/components/release_block_spec.js @@ -39,34 +39,18 @@ describe('Release block', () => { const milestoneListLabel = () => wrapper.find('.js-milestone-list-label'); const editButton = () => wrapper.find('.js-edit-button'); - const RealDate = Date; beforeEach(() => { - // timeago.js calls Date(), so let's mock that case to avoid time-dependent test failures. - const constantDate = new Date('2019-10-25T00:12:00'); - - /* eslint no-global-assign:off */ - global.Date = jest.fn((...props) => - props.length ? new RealDate(...props) : new RealDate(constantDate), - ); - - Object.assign(Date, RealDate); - releaseClone = JSON.parse(JSON.stringify(release)); }); afterEach(() => { wrapper.destroy(); - global.Date = RealDate; }); describe('with default props', () => { beforeEach(() => factory(release)); - it('matches the snapshot', () => { - expect(wrapper.element).toMatchSnapshot(); - }); - it("renders the block with an id equal to the release's tag name", () => { expect(wrapper.attributes().id).toBe('v0.3'); }); |