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>2019-11-04 15:06:19 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2019-11-04 15:06:19 +0300
commit38c79b697f45a949701b9961e87b7c9b8de75abf (patch)
treebae163aa8d437f74ea4086b93fb6b3c2e0f9013f /spec/frontend
parent2b7a5214342baa2575b35868316ea9413d2afe1f (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/frontend')
-rw-r--r--spec/frontend/helpers/monitor_helper_spec.js71
-rw-r--r--spec/frontend/lib/utils/datetime_utility_spec.js8
-rw-r--r--spec/frontend/monitoring/store/actions_spec.js53
-rw-r--r--spec/frontend/releases/list/components/__snapshots__/release_block_spec.js.snap332
-rw-r--r--spec/frontend/releases/list/components/release_block_spec.js16
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');
});