summaryrefslogtreecommitdiff
path: root/spec/frontend/ide/lib/errors_spec.js
blob: 8c3fb3783023f59cf22d14a69cfee28ea017a017 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import {
  createUnexpectedCommitError,
  createCodeownersCommitError,
  createBranchChangedCommitError,
  parseCommitError,
} from '~/ide/lib/errors';

const TEST_SPECIAL = '&special<';
const TEST_SPECIAL_ESCAPED = '&amp;special&lt;';
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);
    });
  });
});