summaryrefslogtreecommitdiff
path: root/spec/frontend/gitlab_version_check/index_spec.js
diff options
context:
space:
mode:
Diffstat (limited to 'spec/frontend/gitlab_version_check/index_spec.js')
-rw-r--r--spec/frontend/gitlab_version_check/index_spec.js138
1 files changed, 37 insertions, 101 deletions
diff --git a/spec/frontend/gitlab_version_check/index_spec.js b/spec/frontend/gitlab_version_check/index_spec.js
index 8a11ff48bf2..92bc103cede 100644
--- a/spec/frontend/gitlab_version_check/index_spec.js
+++ b/spec/frontend/gitlab_version_check/index_spec.js
@@ -1,116 +1,52 @@
-import Vue from 'vue';
-import * as Sentry from '@sentry/browser';
-import MockAdapter from 'axios-mock-adapter';
-import axios from '~/lib/utils/axios_utils';
+import { createWrapper } from '@vue/test-utils';
import { setHTMLFixture, resetHTMLFixture } from 'helpers/fixtures';
import initGitlabVersionCheck from '~/gitlab_version_check';
+import {
+ VERSION_CHECK_BADGE_NO_PROP_FIXTURE,
+ VERSION_CHECK_BADGE_NO_SEVERITY_FIXTURE,
+ VERSION_CHECK_BADGE_FIXTURE,
+ VERSION_CHECK_BADGE_FINDER,
+ VERSION_BADGE_TEXT,
+ SECURITY_PATCH_FIXTURE,
+ SECURITY_PATCH_FINDER,
+ SECURITY_PATCH_TEXT,
+ SECURITY_MODAL_FIXTURE,
+ SECURITY_MODAL_FINDER,
+ SECURITY_MODAL_TEXT,
+} from './mock_data';
describe('initGitlabVersionCheck', () => {
- let originalGon;
- let mock;
- let vueApps;
+ let wrapper;
- const defaultResponse = {
- code: 200,
- res: { severity: 'success' },
- };
-
- const dummyGon = {
- relative_url_root: '/',
- };
-
- const createApp = async (mockResponse, htmlClass) => {
- originalGon = window.gon;
-
- const response = {
- ...defaultResponse,
- ...mockResponse,
- };
-
- mock = new MockAdapter(axios);
- mock.onGet().replyOnce(response.code, response.res);
-
- setHTMLFixture(`<div class="${htmlClass}"></div>`);
-
- vueApps = await initGitlabVersionCheck();
+ const createApp = (fixture) => {
+ setHTMLFixture(fixture);
+ initGitlabVersionCheck();
+ wrapper = createWrapper(document.body);
};
afterEach(() => {
- mock.restore();
- window.gon = originalGon;
resetHTMLFixture();
});
- describe('with no .js-gitlab-version-check-badge elements', () => {
- beforeEach(async () => {
- await createApp();
- });
-
- it('does not make axios GET request', () => {
- expect(mock.history.get.length).toBe(0);
- });
-
- it('does not render the Version Check Badge', () => {
- expect(vueApps).toBeNull();
- });
- });
-
- describe('with .js-gitlab-version-check-badge element but API errors', () => {
- beforeEach(async () => {
- jest.spyOn(Sentry, 'captureException');
- await createApp({ code: 500, res: null }, 'js-gitlab-version-check-badge');
- });
-
- it('does make axios GET request', () => {
- expect(mock.history.get.length).toBe(1);
- expect(mock.history.get[0].url).toContain('/admin/version_check.json');
- });
-
- it('logs error to Sentry', () => {
- expect(Sentry.captureException).toHaveBeenCalled();
- });
-
- it('does not render the Version Check Badge', () => {
- expect(vueApps).toBeNull();
- });
- });
-
- describe('with .js-gitlab-version-check-badge element and successful API call', () => {
- beforeEach(async () => {
- await createApp({}, 'js-gitlab-version-check-badge');
- });
-
- it('does make axios GET request', () => {
- expect(mock.history.get.length).toBe(1);
- expect(mock.history.get[0].url).toContain('/admin/version_check.json');
- });
-
- it('does render the Version Check Badge', () => {
- expect(vueApps).toHaveLength(1);
- expect(vueApps[0]).toBeInstanceOf(Vue);
- });
- });
-
describe.each`
- root | description
- ${'/'} | ${'not used (uses its own (sub)domain)'}
- ${'/gitlab'} | ${'custom path'}
- ${'/service/gitlab'} | ${'custom path with 2 depth'}
- `('path for version_check.json', ({ root, description }) => {
- describe(`when relative url is ${description}: ${root}`, () => {
- beforeEach(async () => {
- originalGon = window.gon;
- window.gon = { ...dummyGon };
- window.gon.relative_url_root = root;
- await createApp({}, 'js-gitlab-version-check-badge');
- });
-
- it('reflects the relative url setting', () => {
- expect(mock.history.get.length).toBe(1);
-
- const pathRegex = new RegExp(`^${root}`);
- expect(mock.history.get[0].url).toMatch(pathRegex);
- });
+ description | fixture | finders | componentTexts
+ ${'with no version check elements'} | ${'<div></div>'} | ${[]} | ${[]}
+ ${'with version check badge el but no prop data'} | ${VERSION_CHECK_BADGE_NO_PROP_FIXTURE} | ${[VERSION_CHECK_BADGE_FINDER]} | ${[undefined]}
+ ${'with version check badge el but no severity data'} | ${VERSION_CHECK_BADGE_NO_SEVERITY_FIXTURE} | ${[VERSION_CHECK_BADGE_FINDER]} | ${[undefined]}
+ ${'with version check badge el and version data'} | ${VERSION_CHECK_BADGE_FIXTURE} | ${[VERSION_CHECK_BADGE_FINDER]} | ${[VERSION_BADGE_TEXT]}
+ ${'with security patch el'} | ${SECURITY_PATCH_FIXTURE} | ${[SECURITY_PATCH_FINDER]} | ${[SECURITY_PATCH_TEXT]}
+ ${'with security patch and version badge els'} | ${`${SECURITY_PATCH_FIXTURE}${VERSION_CHECK_BADGE_FIXTURE}`} | ${[SECURITY_PATCH_FINDER, VERSION_CHECK_BADGE_FINDER]} | ${[SECURITY_PATCH_TEXT, VERSION_BADGE_TEXT]}
+ ${'with security modal el'} | ${SECURITY_MODAL_FIXTURE} | ${[SECURITY_MODAL_FINDER]} | ${[SECURITY_MODAL_TEXT]}
+ ${'with security modal, security patch, and version badge els'} | ${`${SECURITY_PATCH_FIXTURE}${SECURITY_MODAL_FIXTURE}${VERSION_CHECK_BADGE_FIXTURE}`} | ${[SECURITY_PATCH_FINDER, SECURITY_MODAL_FINDER, VERSION_CHECK_BADGE_FINDER]} | ${[SECURITY_PATCH_TEXT, SECURITY_MODAL_TEXT, VERSION_BADGE_TEXT]}
+ `('$description', ({ fixture, finders, componentTexts }) => {
+ beforeEach(() => {
+ createApp(fixture);
+ });
+
+ it(`correctly renders the Version Check Components`, () => {
+ const renderedComponentTexts = finders.map((f) => wrapper.find(f)?.element?.innerText.trim());
+
+ expect(renderedComponentTexts).toStrictEqual(componentTexts);
});
});
});