Skip to content

Commit b433c07

Browse files
committed
fix: allow empty scopes in scope-enum check
1 parent c167c8b commit b433c07

File tree

4 files changed

+119
-21
lines changed

4 files changed

+119
-21
lines changed

source/library/ensure-enum.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
export default (value, enums) => {
2-
return enums.length === 0 || enums.indexOf(value) > -1;
2+
return enums.indexOf(value) > -1;
33
};

source/rules/scope-enum.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
11
import ensureEnum from '../library/ensure-enum';
22

33
export default (parsed, when, value) => {
4+
if (!parsed.scope) {
5+
return [true, ''];
6+
}
7+
48
const negated = when === 'never';
5-
const result = ensureEnum(parsed.scope, value);
9+
const result = value.length === 0 || ensureEnum(parsed.scope, value);
10+
611
return [
712
negated ? !result : result,
813
[

test/rules/scope-empty.js

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import test from 'ava';
2-
import scopeEmpty from '../../source/rules/scope-empty';
32
import {sync as parse} from 'conventional-commits-parser';
3+
import scopeEmpty from '../../source/rules/scope-empty';
44

55
const messages = {
66
plain: 'foo(bar): baz',
@@ -14,56 +14,56 @@ const parsed = {
1414
empty: parse(messages.empty)
1515
};
1616

17-
test('scope-empty with plain message', t => {
17+
test('scope-empty with plain message it should succeed for empty keyword', t => {
1818
const [actual] = scopeEmpty(parsed.plain);
1919
const expected = true;
20-
t.deepEqual(actual, expected, 'it should succeed for empty keyword');
20+
t.deepEqual(actual, expected);
2121
});
2222

23-
test('scope-empty with plain message', t => {
23+
test('scope-empty with plain message it should succeed for "never"', t => {
2424
const [actual] = scopeEmpty(parsed.plain, 'never');
2525
const expected = true;
26-
t.deepEqual(actual, expected, 'it should succeed for "never"');
26+
t.deepEqual(actual, expected);
2727
});
2828

29-
test('scope-empty with plain message', t => {
29+
test('scope-empty with plain message it should fail for "always"', t => {
3030
const [actual] = scopeEmpty(parsed.plain, 'always');
3131
const expected = false;
32-
t.deepEqual(actual, expected, 'it should fail for "always"');
32+
t.deepEqual(actual, expected);
3333
});
3434

35-
test('scope-empty with superfluous message', t => {
35+
test('scope-empty with superfluous message it should fail for empty keyword', t => {
3636
const [actual] = scopeEmpty(parsed.superfluous);
3737
const expected = false;
38-
t.deepEqual(actual, expected, 'it should fail for empty keyword');
38+
t.deepEqual(actual, expected);
3939
});
4040

41-
test('scope-empty with superfluous message', t => {
41+
test('scope-empty with superfluous message it should fail for "never"', t => {
4242
const [actual] = scopeEmpty(parsed.superfluous, 'never');
4343
const expected = false;
44-
t.deepEqual(actual, expected, 'it should fail for "never"');
44+
t.deepEqual(actual, expected);
4545
});
4646

47-
test('scope-empty with superfluous message', t => {
47+
test('scope-empty with superfluous message it should fail for "always"', t => {
4848
const [actual] = scopeEmpty(parsed.superfluous, 'always');
4949
const expected = true;
50-
t.deepEqual(actual, expected, 'it should fail for "always"');
50+
t.deepEqual(actual, expected);
5151
});
5252

53-
test('scope-empty with empty message', t => {
53+
test('scope-empty with empty message it should fail for empty keyword', t => {
5454
const [actual] = scopeEmpty(parsed.empty);
5555
const expected = false;
56-
t.deepEqual(actual, expected, 'it should fail for empty keyword');
56+
t.deepEqual(actual, expected);
5757
});
5858

59-
test('scope-empty with empty message', t => {
59+
test('scope-empty with empty message it should fail for "never"', t => {
6060
const [actual] = scopeEmpty(parsed.empty, 'never');
6161
const expected = false;
62-
t.deepEqual(actual, expected, 'it should fail for "never"');
62+
t.deepEqual(actual, expected);
6363
});
6464

65-
test('scope-empty with empty message', t => {
65+
test('scope-empty with empty message it should fail for "always"', t => {
6666
const [actual] = scopeEmpty(parsed.empty, 'always');
6767
const expected = true;
68-
t.deepEqual(actual, expected, 'it should fail for "always"');
68+
t.deepEqual(actual, expected);
6969
});

test/rules/scope-enum.js

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
import test from 'ava';
2+
import {sync as parse} from 'conventional-commits-parser';
3+
import scopeEnum from '../../source/rules/scope-enum';
4+
5+
const messages = {
6+
plain: 'foo(bar): baz',
7+
superfluous: 'foo(): baz',
8+
empty: 'foo: baz'
9+
};
10+
11+
const parsed = {
12+
plain: parse(messages.plain),
13+
superfluous: parse(messages.superfluous),
14+
empty: parse(messages.empty)
15+
};
16+
17+
test('scope-enum with plain message and always should succeed empty enum', t => {
18+
const [actual] = scopeEnum(parsed.plain, 'always', []);
19+
const expected = true;
20+
t.deepEqual(actual, expected);
21+
});
22+
23+
test('scope-enum with plain message and never should error empty enum', t => {
24+
const [actual] = scopeEnum(parsed.plain, 'never', []);
25+
const expected = false;
26+
t.deepEqual(actual, expected);
27+
});
28+
29+
test('scope-enum with plain message should succeed correct enum', t => {
30+
const [actual] = scopeEnum(parsed.plain, 'always', ['bar']);
31+
const expected = true;
32+
t.deepEqual(actual, expected);
33+
});
34+
35+
test('scope-enum with plain message should error false enum', t => {
36+
const [actual] = scopeEnum(parsed.plain, 'always', ['foo']);
37+
const expected = false;
38+
t.deepEqual(actual, expected);
39+
});
40+
41+
test('scope-enum with plain message should error forbidden enum', t => {
42+
const [actual] = scopeEnum(parsed.plain, 'never', ['bar']);
43+
const expected = false;
44+
t.deepEqual(actual, expected);
45+
});
46+
47+
test('scope-enum with plain message should succeed forbidden enum', t => {
48+
const [actual] = scopeEnum(parsed.plain, 'never', ['foo']);
49+
const expected = true;
50+
t.deepEqual(actual, expected);
51+
});
52+
53+
test('scope-enum with superfluous scope should succeed enum', t => {
54+
const [actual] = scopeEnum(parsed.superfluous, 'always', ['bar']);
55+
const expected = true;
56+
t.deepEqual(actual, expected);
57+
});
58+
59+
test('scope-enum with superfluous scope and "never" should succeed', t => {
60+
const [actual] = scopeEnum(parsed.superfluous, 'never', ['bar']);
61+
const expected = true;
62+
t.deepEqual(actual, expected);
63+
});
64+
65+
test('scope-enum with superfluous scope and always should succeed empty enum', t => {
66+
const [actual] = scopeEnum(parsed.superfluous, 'always', []);
67+
const expected = true;
68+
t.deepEqual(actual, expected);
69+
});
70+
71+
test('scope-enum with superfluous scope and never should succeed empty enum', t => {
72+
const [actual] = scopeEnum(parsed.superfluous, 'never', []);
73+
const expected = true;
74+
t.deepEqual(actual, expected);
75+
});
76+
77+
test('scope-enum with empty scope and always should succeed empty enum', t => {
78+
const [actual] = scopeEnum(parsed.superfluous, 'always', []);
79+
const expected = true;
80+
t.deepEqual(actual, expected);
81+
});
82+
83+
test('scope-enum with empty scope and always should succeed filled enum', t => {
84+
const [actual] = scopeEnum(parsed.superfluous, 'always', ['foo']);
85+
const expected = true;
86+
t.deepEqual(actual, expected);
87+
});
88+
89+
test('scope-enum with empty scope and never should succeed empty enum', t => {
90+
const [actual] = scopeEnum(parsed.superfluous, 'never', []);
91+
const expected = true;
92+
t.deepEqual(actual, expected);
93+
});

0 commit comments

Comments
 (0)