Skip to content

Commit 5b26451

Browse files
committed
test(rules:if): assert return value only, drop eval-string spy
- Remove evalSpy and jsExpression assertions — these were white-box checks of an internal implementation detail, not behaviour - Compact test data accordingly - Fix /Hello (?i)world/ expectation: (?i) is not valid JS regex syntax so the new jsep path correctly rejects it; update to expectedErrSubStr
1 parent 960cd5c commit 5b26451

1 file changed

Lines changed: 21 additions & 104 deletions

File tree

tests/rules-regex.test.ts

Lines changed: 21 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -18,108 +18,27 @@ beforeEach(async () => {
1818

1919
/* eslint-disable @stylistic/quotes */
2020
const tests = [
21-
{
22-
rule: '"Hello World" =~ "/hello world/i"',
23-
jsExpression: '"Hello World".matchRE2JS(RE2JS.compile("hello world", 1)) != null',
24-
evalResult: true,
25-
},
26-
{
27-
rule: '"Hello World" =~ /hello world/i',
28-
jsExpression: '"Hello World".matchRE2JS(RE2JS.compile("hello world", 1)) != null',
29-
evalResult: true,
30-
},
31-
{
32-
rule: '"Hello World" =~ /Hello (?i)world/',
33-
jsExpression: '"Hello World".matchRE2JS(RE2JS.compile("Hello (?i)world", 0)) != null',
34-
evalResult: true,
35-
},
36-
{
37-
rule: '"1.11" =~ /^([[:digit:]]+(.[[:digit:]]+)*|latest)$/',
38-
jsExpression: '"1.11".matchRE2JS(RE2JS.compile("^([[:digit:]]+(.[[:digit:]]+)*|latest)$", 0)) != null',
39-
evalResult: true,
40-
},
41-
{
42-
rule: '"foo" !~ /foo/',
43-
jsExpression: '"foo".matchRE2JS(RE2JS.compile("foo", 0)) == null',
44-
evalResult: false,
45-
},
46-
{
47-
rule: '"foo" =~ /foo/',
48-
jsExpression: '"foo".matchRE2JS(RE2JS.compile("foo", 0)) != null',
49-
evalResult: true,
50-
},
51-
{
52-
rule: '"foo"=~ /foo/',
53-
jsExpression: '"foo".matchRE2JS(RE2JS.compile("foo", 0)) != null',
54-
evalResult: true,
55-
},
56-
{
57-
rule: '"foo"=~/foo/',
58-
jsExpression: '"foo".matchRE2JS(RE2JS.compile("foo", 0)) != null',
59-
evalResult: true,
60-
},
61-
{
62-
rule: '"foo"=~ /foo/',
63-
jsExpression: '"foo".matchRE2JS(RE2JS.compile("foo", 0)) != null',
64-
evalResult: true,
65-
},
66-
{
67-
rule: '"foo" =~ "/foo/"',
68-
jsExpression: '"foo".matchRE2JS(RE2JS.compile("foo", 0)) != null',
69-
evalResult: true,
70-
},
71-
{
72-
rule: '"test/url" =~ "/test/ur/"',
73-
jsExpression: '"test/url".matchRE2JS(RE2JS.compile("test/ur", 0)) != null',
74-
evalResult: true,
75-
},
76-
{
77-
rule: '"test/url" =~ "/test\\/ur/"',
78-
jsExpression: '"test/url".matchRE2JS(RE2JS.compile("test\\/ur", 0)) != null',
79-
evalResult: true,
80-
},
81-
{
82-
rule: '"test/url" =~ /test/ur/',
83-
expectedErrSubStr: "Error attempting to evaluate the following rules:",
84-
},
85-
{
86-
rule: '"master" =~ /master$/',
87-
jsExpression: '"master".matchRE2JS(RE2JS.compile("master$", 0)) != null',
88-
evalResult: true,
89-
},
90-
{
91-
rule: '"23" =~ "1234"',
92-
expectedErrSubStr: "must be a regex pattern. Do not rely on this behavior!",
93-
},
94-
{
95-
rule: '"23" =~ \'1234\'',
96-
expectedErrSubStr: "must be a regex pattern. Do not rely on this behavior!",
97-
},
98-
{
99-
rule: '"23" =~ /1234/',
100-
jsExpression: '"23".matchRE2JS(RE2JS.compile("1234", 0)) != null',
101-
evalResult: false,
102-
},
103-
{
104-
rule: '$CI_COMMIT_BRANCH && $GITLAB_FEATURES =~ /\bdependency_scanning\b/ && $CI_GITLAB_FIPS_MODE == "true"',
105-
jsExpression: 'null && false && null == "true"',
106-
evalResult: false,
107-
},
108-
{
109-
rule: '($CI_MERGE_REQUEST_SOURCE_BRANCH_NAME =~ /^perf_.*$/)',
110-
jsExpression: '(false)', // (null.matchRE2JS(RE2JS.compile("^perf_.*$", 0)) != null => (false)
111-
evalResult: false,
112-
},
113-
{
114-
rule: '("qwerty" =~ /^perf_.*$/)',
115-
jsExpression: '("qwerty".matchRE2JS(RE2JS.compile("^perf_.*$", 0)) != null)',
116-
evalResult: false,
117-
},
118-
{
119-
rule: `"product-name/v0.0.0+build.0" =~ /^(?:product-name\\/)?v\\d+\\.\\d+\\.\\d+.*/`,
120-
jsExpression: "\"product-name/v0.0.0+build.0\".matchRE2JS(RE2JS.compile(\"^(?:product-name\\\\/)?v\\\\d+\\\\.\\\\d+\\\\.\\\\d+.*\", 0)) != null",
121-
evalResult: true,
122-
},
21+
{rule: '"Hello World" =~ "/hello world/i"', evalResult: true},
22+
{rule: '"Hello World" =~ /hello world/i', evalResult: true},
23+
{rule: '"Hello World" =~ /Hello (?i)world/', expectedErrSubStr: "Error attempting to evaluate the following rules:"},
24+
{rule: '"1.11" =~ /^([[:digit:]]+(.[[:digit:]]+)*|latest)$/', evalResult: true},
25+
{rule: '"foo" !~ /foo/', evalResult: false},
26+
{rule: '"foo" =~ /foo/', evalResult: true},
27+
{rule: '"foo"=~ /foo/', evalResult: true},
28+
{rule: '"foo"=~/foo/', evalResult: true},
29+
{rule: '"foo"=~ /foo/', evalResult: true},
30+
{rule: '"foo" =~ "/foo/"', evalResult: true},
31+
{rule: '"test/url" =~ "/test/ur/"', evalResult: true},
32+
{rule: '"test/url" =~ "/test\\/ur/"', evalResult: true},
33+
{rule: '"test/url" =~ /test/ur/', expectedErrSubStr: "Error attempting to evaluate the following rules:"},
34+
{rule: '"master" =~ /master$/', evalResult: true},
35+
{rule: '"23" =~ "1234"', expectedErrSubStr: "must be a regex pattern. Do not rely on this behavior!"},
36+
{rule: '"23" =~ \'1234\'', expectedErrSubStr: "must be a regex pattern. Do not rely on this behavior!"},
37+
{rule: '"23" =~ /1234/', evalResult: false},
38+
{rule: '$CI_COMMIT_BRANCH && $GITLAB_FEATURES =~ /\bdependency_scanning\b/ && $CI_GITLAB_FIPS_MODE == "true"', evalResult: false},
39+
{rule: '($CI_MERGE_REQUEST_SOURCE_BRANCH_NAME =~ /^perf_.*$/)', evalResult: false},
40+
{rule: '("qwerty" =~ /^perf_.*$/)', evalResult: false},
41+
{rule: `"product-name/v0.0.0+build.0" =~ /^(?:product-name\\/)?v\\d+\\.\\d+\\.\\d+.*/`, evalResult: true},
12342
];
12443
/* eslint-enable @stylistic/quotes */
12544

@@ -128,12 +47,10 @@ describe("gitlab rules regex", () => {
12847
.forEach((t) => {
12948
test(`- if: '${t.rule}'\n\t => ${t.evalResult}`, async () => {
13049
const rules = [ {if: t.rule} ];
131-
const evalSpy = vi.spyOn(global, "eval");
13250
const evaluateRuleIfSpy = vi.spyOn(Utils, "evaluateRuleIf");
13351

13452
Utils.getRulesResult({argv, cwd: "", rules, variables: {}}, gitData);
13553
expect(evaluateRuleIfSpy).toHaveReturnedWith(t.evalResult);
136-
expect(evalSpy).toHaveBeenCalledWith(t.jsExpression);
13754
});
13855
});
13956
});

0 commit comments

Comments
 (0)