diff options
author | Robert Speicher <rspeicher@gmail.com> | 2021-01-20 22:34:23 +0300 |
---|---|---|
committer | Robert Speicher <rspeicher@gmail.com> | 2021-01-20 22:34:23 +0300 |
commit | 6438df3a1e0fb944485cebf07976160184697d72 (patch) | |
tree | 00b09bfd170e77ae9391b1a2f5a93ef6839f2597 /spec/frontend/editor/editor_ci_schema_ext_spec.js | |
parent | 42bcd54d971da7ef2854b896a7b34f4ef8601067 (diff) |
Add latest changes from gitlab-org/gitlab@13-8-stable-eev13.8.0-rc42
Diffstat (limited to 'spec/frontend/editor/editor_ci_schema_ext_spec.js')
-rw-r--r-- | spec/frontend/editor/editor_ci_schema_ext_spec.js | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/spec/frontend/editor/editor_ci_schema_ext_spec.js b/spec/frontend/editor/editor_ci_schema_ext_spec.js new file mode 100644 index 00000000000..9dd88aad7e6 --- /dev/null +++ b/spec/frontend/editor/editor_ci_schema_ext_spec.js @@ -0,0 +1,107 @@ +import { languages } from 'monaco-editor'; +import { TEST_HOST } from 'helpers/test_constants'; +import EditorLite from '~/editor/editor_lite'; +import { CiSchemaExtension } from '~/editor/extensions/editor_ci_schema_ext'; +import { EXTENSION_CI_SCHEMA_FILE_NAME_MATCH } from '~/editor/constants'; + +describe('~/editor/editor_ci_config_ext', () => { + const defaultBlobPath = '.gitlab-ci.yml'; + + let editor; + let instance; + let editorEl; + let originalGitlabUrl; + + const createMockEditor = ({ blobPath = defaultBlobPath } = {}) => { + setFixtures('<div id="editor"></div>'); + editorEl = document.getElementById('editor'); + editor = new EditorLite(); + instance = editor.createInstance({ + el: editorEl, + blobPath, + blobContent: '', + }); + instance.use(new CiSchemaExtension()); + }; + + beforeAll(() => { + originalGitlabUrl = gon.gitlab_url; + gon.gitlab_url = TEST_HOST; + }); + + afterAll(() => { + gon.gitlab_url = originalGitlabUrl; + }); + + beforeEach(() => { + createMockEditor(); + }); + + afterEach(() => { + instance.dispose(); + editorEl.remove(); + }); + + describe('registerCiSchema', () => { + beforeEach(() => { + jest.spyOn(languages.yaml.yamlDefaults, 'setDiagnosticsOptions'); + }); + + describe('register validations options with monaco for yaml language', () => { + const mockProjectNamespace = 'namespace1'; + const mockProjectPath = 'project1'; + + const getConfiguredYmlSchema = () => { + return languages.yaml.yamlDefaults.setDiagnosticsOptions.mock.calls[0][0].schemas[0]; + }; + + it('with expected basic validation configuration', () => { + instance.registerCiSchema({ + projectNamespace: mockProjectNamespace, + projectPath: mockProjectPath, + }); + + const expectedOptions = { + validate: true, + enableSchemaRequest: true, + hover: true, + completion: true, + }; + + expect(languages.yaml.yamlDefaults.setDiagnosticsOptions).toHaveBeenCalledTimes(1); + expect(languages.yaml.yamlDefaults.setDiagnosticsOptions).toHaveBeenCalledWith( + expect.objectContaining(expectedOptions), + ); + }); + + it('with an schema uri that contains project and ref', () => { + const mockRef = 'AABBCCDD'; + + instance.registerCiSchema({ + projectNamespace: mockProjectNamespace, + projectPath: mockProjectPath, + ref: mockRef, + }); + + expect(getConfiguredYmlSchema()).toEqual({ + uri: `${TEST_HOST}/${mockProjectNamespace}/${mockProjectPath}/-/schema/${mockRef}/${EXTENSION_CI_SCHEMA_FILE_NAME_MATCH}`, + fileMatch: [defaultBlobPath], + }); + }); + + it('with an alternative file name match', () => { + createMockEditor({ blobPath: 'dir1/dir2/another-ci-filename.yml' }); + + instance.registerCiSchema({ + projectNamespace: mockProjectNamespace, + projectPath: mockProjectPath, + }); + + expect(getConfiguredYmlSchema()).toEqual({ + uri: `${TEST_HOST}/${mockProjectNamespace}/${mockProjectPath}/-/schema/master/${EXTENSION_CI_SCHEMA_FILE_NAME_MATCH}`, + fileMatch: ['another-ci-filename.yml'], + }); + }); + }); + }); +}); |