Welcome to mirror list, hosted at ThFree Co, Russian Federation.

ref_validator_spec.js « utils « lib « frontend « spec - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 97896d74dff6c31f7749d1d73926137ed4dacaf0 (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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
import { validateTag, validationMessages } from '~/lib/utils/ref_validator';

describe('~/lib/utils/ref_validator', () => {
  describe('validateTag', () => {
    describe.each([
      ['foo'],
      ['FOO'],
      ['foo/a.lockx'],
      ['foo.123'],
      ['foo/123'],
      ['foo/bar/123'],
      ['foo.bar.123'],
      ['foo-bar_baz'],
      ['head'],
      ['"foo"-'],
      ['foo@bar'],
      ['\ud83e\udd8a'],
      ['ünicöde'],
      ['\x80}'],
    ])('tag with the name "%s"', (tagName) => {
      it('is valid', () => {
        const result = validateTag(tagName);
        expect(result.isValid).toBe(true);
        expect(result.validationErrors).toEqual([]);
      });
    });

    describe.each([
      ['  ', validationMessages.EmptyNameValidationMessage],

      ['refs/heads/tagName', validationMessages.DisallowedPrefixesValidationMessage],
      ['/foo', validationMessages.DisallowedPrefixesValidationMessage],
      ['-tagName', validationMessages.DisallowedPrefixesValidationMessage],

      ['HEAD', validationMessages.DisallowedNameValidationMessage],
      ['@', validationMessages.DisallowedNameValidationMessage],

      ['tag name with spaces', validationMessages.DisallowedSubstringsValidationMessage],
      ['tag\\name', validationMessages.DisallowedSubstringsValidationMessage],
      ['tag^name', validationMessages.DisallowedSubstringsValidationMessage],
      ['tag..name', validationMessages.DisallowedSubstringsValidationMessage],
      ['..', validationMessages.DisallowedSubstringsValidationMessage],
      ['tag?name', validationMessages.DisallowedSubstringsValidationMessage],
      ['tag*name', validationMessages.DisallowedSubstringsValidationMessage],
      ['tag[name', validationMessages.DisallowedSubstringsValidationMessage],
      ['tag@{name', validationMessages.DisallowedSubstringsValidationMessage],
      ['tag:name', validationMessages.DisallowedSubstringsValidationMessage],
      ['tag~name', validationMessages.DisallowedSubstringsValidationMessage],

      ['/', validationMessages.DisallowedSequenceEmptyValidationMessage],
      ['//', validationMessages.DisallowedSequenceEmptyValidationMessage],
      ['foo//123', validationMessages.DisallowedSequenceEmptyValidationMessage],

      ['.', validationMessages.DisallowedSequencePrefixesValidationMessage],
      ['/./', validationMessages.DisallowedSequencePrefixesValidationMessage],
      ['./.', validationMessages.DisallowedSequencePrefixesValidationMessage],
      ['.tagName', validationMessages.DisallowedSequencePrefixesValidationMessage],
      ['tag/.Name', validationMessages.DisallowedSequencePrefixesValidationMessage],
      ['foo/.123/bar', validationMessages.DisallowedSequencePrefixesValidationMessage],

      ['foo.', validationMessages.DisallowedSequencePostfixesValidationMessage],
      ['a.lock', validationMessages.DisallowedSequencePostfixesValidationMessage],
      ['foo/a.lock', validationMessages.DisallowedSequencePostfixesValidationMessage],
      ['foo/a.lock/b', validationMessages.DisallowedSequencePostfixesValidationMessage],
      ['foo.123.', validationMessages.DisallowedSequencePostfixesValidationMessage],

      ['foo/', validationMessages.DisallowedPostfixesValidationMessage],
    ])('tag with name "%s"', (tagName, validationMessage) => {
      it(`should be invalid with validation message "${validationMessage}"`, () => {
        const result = validateTag(tagName);
        expect(result.isValid).toBe(false);
        expect(result.validationErrors).toContain(validationMessage);
      });
    });

    // NOTE: control characters cannot be used in test names because they cause test report XML parsing errors
    describe.each([
      [
        'control-character x7f',
        'control-character\x7f',
        validationMessages.ControlCharactersValidationMessage,
      ],
      [
        'control-character x15',
        'control-character\x15',
        validationMessages.ControlCharactersValidationMessage,
      ],
    ])('tag with name "%s"', (_, tagName, validationMessage) => {
      it(`should be invalid with validation message "${validationMessage}"`, () => {
        const result = validateTag(tagName);
        expect(result.isValid).toBe(false);
        expect(result.validationErrors).toContain(validationMessage);
      });
    });
  });
});