diff options
Diffstat (limited to 'spec/frontend/ide/lib')
-rw-r--r-- | spec/frontend/ide/lib/editor_spec.js | 22 | ||||
-rw-r--r-- | spec/frontend/ide/lib/errors_spec.js | 70 | ||||
-rw-r--r-- | spec/frontend/ide/lib/files_spec.js | 19 |
3 files changed, 71 insertions, 40 deletions
diff --git a/spec/frontend/ide/lib/editor_spec.js b/spec/frontend/ide/lib/editor_spec.js index 529f80e6f6f..01c2eab33a5 100644 --- a/spec/frontend/ide/lib/editor_spec.js +++ b/spec/frontend/ide/lib/editor_spec.js @@ -202,28 +202,6 @@ describe('Multi-file editor library', () => { }); }); - describe('schemas', () => { - let originalGon; - - beforeEach(() => { - originalGon = window.gon; - window.gon = { features: { schemaLinting: true } }; - - delete Editor.editorInstance; - instance = Editor.create(); - }); - - afterEach(() => { - window.gon = originalGon; - }); - - it('registers custom schemas defined with Monaco', () => { - expect(monacoLanguages.yaml.yamlDefaults.diagnosticsOptions).toMatchObject({ - schemas: [{ fileMatch: ['*.gitlab-ci.yml'] }], - }); - }); - }); - describe('replaceSelectedText', () => { let model; let editor; diff --git a/spec/frontend/ide/lib/errors_spec.js b/spec/frontend/ide/lib/errors_spec.js new file mode 100644 index 00000000000..8c3fb378302 --- /dev/null +++ b/spec/frontend/ide/lib/errors_spec.js @@ -0,0 +1,70 @@ +import { + createUnexpectedCommitError, + createCodeownersCommitError, + createBranchChangedCommitError, + parseCommitError, +} from '~/ide/lib/errors'; + +const TEST_SPECIAL = '&special<'; +const TEST_SPECIAL_ESCAPED = '&special<'; +const TEST_MESSAGE = 'Test message.'; +const CODEOWNERS_MESSAGE = + 'Push to protected branches that contain changes to files matching CODEOWNERS is not allowed'; +const CHANGED_MESSAGE = 'Things changed since you started editing'; + +describe('~/ide/lib/errors', () => { + const createResponseError = message => ({ + response: { + data: { + message, + }, + }, + }); + + describe('createCodeownersCommitError', () => { + it('uses given message', () => { + expect(createCodeownersCommitError(TEST_MESSAGE)).toEqual({ + title: 'CODEOWNERS rule violation', + messageHTML: TEST_MESSAGE, + canCreateBranch: true, + }); + }); + + it('escapes special chars', () => { + expect(createCodeownersCommitError(TEST_SPECIAL)).toEqual({ + title: 'CODEOWNERS rule violation', + messageHTML: TEST_SPECIAL_ESCAPED, + canCreateBranch: true, + }); + }); + }); + + describe('createBranchChangedCommitError', () => { + it.each` + message | expectedMessage + ${TEST_MESSAGE} | ${`${TEST_MESSAGE}<br/><br/>Would you like to create a new branch?`} + ${TEST_SPECIAL} | ${`${TEST_SPECIAL_ESCAPED}<br/><br/>Would you like to create a new branch?`} + `('uses given message="$message"', ({ message, expectedMessage }) => { + expect(createBranchChangedCommitError(message)).toEqual({ + title: 'Branch changed', + messageHTML: expectedMessage, + canCreateBranch: true, + }); + }); + }); + + describe('parseCommitError', () => { + it.each` + message | expectation + ${null} | ${createUnexpectedCommitError()} + ${{}} | ${createUnexpectedCommitError()} + ${{ response: {} }} | ${createUnexpectedCommitError()} + ${{ response: { data: {} } }} | ${createUnexpectedCommitError()} + ${createResponseError('test')} | ${createUnexpectedCommitError()} + ${createResponseError(CODEOWNERS_MESSAGE)} | ${createCodeownersCommitError(CODEOWNERS_MESSAGE)} + ${createResponseError(CHANGED_MESSAGE)} | ${createBranchChangedCommitError(CHANGED_MESSAGE)} + `('parses message into error object with "$message"', ({ message, expectation }) => { + expect(parseCommitError(message)).toEqual(expectation); + }); + }); +}); diff --git a/spec/frontend/ide/lib/files_spec.js b/spec/frontend/ide/lib/files_spec.js index 6974cdc4074..8ca6f01d9a6 100644 --- a/spec/frontend/ide/lib/files_spec.js +++ b/spec/frontend/ide/lib/files_spec.js @@ -1,29 +1,16 @@ -import { viewerInformationForPath } from '~/vue_shared/components/content_viewer/lib/viewer_utils'; import { decorateFiles, splitParent } from '~/ide/lib/files'; import { decorateData } from '~/ide/stores/utils'; -const TEST_BRANCH_ID = 'lorem-ipsum'; -const TEST_PROJECT_ID = 10; - const createEntries = paths => { const createEntry = (acc, { path, type, children }) => { - // Sometimes we need to end the url with a '/' - const createUrl = base => (type === 'tree' ? `${base}/` : base); - const { name, parent } = splitParent(path); - const previewMode = viewerInformationForPath(name); acc[path] = { ...decorateData({ - projectId: TEST_PROJECT_ID, - branchId: TEST_BRANCH_ID, id: path, name, path, - url: createUrl(`/${TEST_PROJECT_ID}/${type}/${TEST_BRANCH_ID}/-/${path}`), type, - previewMode, - binary: (previewMode && previewMode.binary) || false, parentPath: parent, }), tree: children.map(childName => expect.objectContaining({ name: childName })), @@ -56,11 +43,7 @@ describe('IDE lib decorate files', () => { { path: 'README.md', type: 'blob', children: [] }, ]); - const { entries, treeList } = decorateFiles({ - data, - branchId: TEST_BRANCH_ID, - projectId: TEST_PROJECT_ID, - }); + const { entries, treeList } = decorateFiles({ data }); // Here we test the keys and then each key/value individually because `expect(entries).toEqual(expectedEntries)` // was taking a very long time for some reason. Probably due to large objects and nested `expect.objectContaining`. |