Skip to content

Commit 853dd99

Browse files
authored
test(ci): add tests for release process (#241)
* test(ci): add tests for release process * chore: update test case * chore: update tests
1 parent 2481779 commit 853dd99

File tree

4 files changed

+426
-108
lines changed

4 files changed

+426
-108
lines changed
Lines changed: 239 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,239 @@
1+
import {
2+
parseCommit,
3+
getVersionChangesText,
4+
decideReleaseStrategy,
5+
} from '../create-release-issue';
6+
7+
describe('create release issue', () => {
8+
it('parses commit', () => {
9+
expect(parseCommit(`abcdefg fix(javascript): fix the thing`)).toEqual({
10+
hash: 'abcdefg',
11+
lang: 'javascript',
12+
message: 'fix the thing',
13+
raw: 'abcdefg fix(javascript): fix the thing',
14+
type: 'fix',
15+
});
16+
});
17+
18+
it('returns error when language scope is missing', () => {
19+
expect(parseCommit(`abcdefg fix: fix the thing`)).toEqual({
20+
error: 'missing-language-scope',
21+
});
22+
});
23+
24+
it('returns error when language scope is unknown', () => {
25+
expect(parseCommit(`abcdefg fix(basic): fix the thing`)).toEqual({
26+
error: 'unknown-language-scope',
27+
});
28+
});
29+
30+
it('generates text for version changes', () => {
31+
expect(
32+
getVersionChangesText({
33+
javascript: {
34+
current: '0.0.1',
35+
next: '0.0.2',
36+
},
37+
php: {
38+
current: '0.0.1',
39+
next: '0.0.2',
40+
},
41+
java: {
42+
current: '0.0.1',
43+
next: '0.0.2',
44+
},
45+
})
46+
).toMatchInlineSnapshot(`
47+
"- [x] javascript: v0.0.1 -> v0.0.2
48+
- [x] java: v0.0.1 -> v0.0.2
49+
- [x] php: v0.0.1 -> v0.0.2"
50+
`);
51+
});
52+
53+
it('generates text for version changes with a language with no commit', () => {
54+
expect(
55+
getVersionChangesText({
56+
javascript: {
57+
current: '0.0.1',
58+
next: '0.0.2',
59+
},
60+
php: {
61+
current: '0.0.1',
62+
next: '0.0.1',
63+
noCommit: true,
64+
},
65+
java: {
66+
current: '0.0.1',
67+
next: '0.0.2',
68+
},
69+
})
70+
).toMatchInlineSnapshot(`
71+
"- [x] javascript: v0.0.1 -> v0.0.2
72+
- [x] java: v0.0.1 -> v0.0.2
73+
- ~php: v0.0.1 (no commit)~"
74+
`);
75+
});
76+
77+
it('generates text for version changes with a language to skip', () => {
78+
expect(
79+
getVersionChangesText({
80+
javascript: {
81+
current: '0.0.1',
82+
next: '0.0.2',
83+
},
84+
php: {
85+
current: '0.0.1',
86+
next: '0.0.1',
87+
},
88+
java: {
89+
current: '0.0.1',
90+
next: '0.0.2',
91+
skipRelease: true,
92+
},
93+
})
94+
).toMatchInlineSnapshot(`
95+
"- [x] javascript: v0.0.1 -> v0.0.2
96+
- [ ] java: v0.0.1 -> v0.0.2
97+
- No \`feat\` or \`fix\` commit, thus unchecked by default.
98+
- [x] php: v0.0.1 -> v0.0.1"
99+
`);
100+
});
101+
102+
it('bumps major version for BREAKING CHANGE', () => {
103+
const versions = decideReleaseStrategy({
104+
versions: {
105+
javascript: {
106+
current: '0.0.1',
107+
},
108+
java: {
109+
current: '0.0.1',
110+
},
111+
php: {
112+
current: '0.0.1',
113+
},
114+
},
115+
commits: [
116+
{
117+
hash: 'abcdefg',
118+
type: 'feat',
119+
lang: 'javascript',
120+
message: 'update the API (BREAKING CHANGE)',
121+
raw: 'abcdefg feat(javascript): update the API (BREAKING CHANGE)',
122+
},
123+
],
124+
});
125+
126+
expect(versions.javascript.next).toEqual('1.0.0');
127+
});
128+
129+
it('bumps minor version for feat', () => {
130+
const versions = decideReleaseStrategy({
131+
versions: {
132+
javascript: {
133+
current: '0.0.1',
134+
},
135+
java: {
136+
current: '0.0.1',
137+
},
138+
php: {
139+
current: '0.0.1',
140+
},
141+
},
142+
commits: [
143+
{
144+
hash: 'abcdefg',
145+
type: 'feat',
146+
lang: 'php',
147+
message: 'update the API',
148+
raw: 'abcdefg feat(php): update the API',
149+
},
150+
],
151+
});
152+
153+
expect(versions.php.next).toEqual('0.1.0');
154+
});
155+
156+
it('bumps patch version for fix', () => {
157+
const versions = decideReleaseStrategy({
158+
versions: {
159+
javascript: {
160+
current: '0.0.1',
161+
},
162+
java: {
163+
current: '0.0.1',
164+
},
165+
php: {
166+
current: '0.0.1',
167+
},
168+
},
169+
commits: [
170+
{
171+
hash: 'abcdefg',
172+
type: 'fix',
173+
lang: 'java',
174+
message: 'fix some bug',
175+
raw: 'abcdefg fix(java): fix some bug',
176+
},
177+
],
178+
});
179+
180+
expect(versions.java.next).toEqual('0.0.2');
181+
});
182+
183+
it('marks noCommit for languages without any commit', () => {
184+
const versions = decideReleaseStrategy({
185+
versions: {
186+
javascript: {
187+
current: '0.0.1',
188+
},
189+
java: {
190+
current: '0.0.1',
191+
},
192+
php: {
193+
current: '0.0.1',
194+
},
195+
},
196+
commits: [
197+
{
198+
hash: 'abcdefg',
199+
type: 'fix',
200+
lang: 'java',
201+
message: 'fix some bug',
202+
raw: 'abcdefg fix(java): fix some bug',
203+
},
204+
],
205+
});
206+
207+
expect(versions.javascript.noCommit).toEqual(true);
208+
expect(versions.php.noCommit).toEqual(true);
209+
expect(versions.java.noCommit).toBeUndefined();
210+
});
211+
212+
it('marks skipRelease for patch upgrade without fix commit', () => {
213+
const versions = decideReleaseStrategy({
214+
versions: {
215+
javascript: {
216+
current: '0.0.1',
217+
},
218+
java: {
219+
current: '0.0.1',
220+
},
221+
php: {
222+
current: '0.0.1',
223+
},
224+
},
225+
commits: [
226+
{
227+
hash: 'abcdefg',
228+
type: 'chore',
229+
lang: 'javascript',
230+
message: 'update devDevpendencies',
231+
raw: 'abcdefg chore(javascript): update devDevpendencies',
232+
},
233+
],
234+
});
235+
expect(versions.javascript.skipRelease).toEqual(true);
236+
expect(versions.java.skipRelease).toBeUndefined();
237+
expect(versions.php.skipRelease).toBeUndefined();
238+
});
239+
});
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import { getVersionsToRelease, getLangsToUpdateRepo } from '../process-release';
2+
3+
describe('process release', () => {
4+
it('gets versions to release', () => {
5+
const versions = getVersionsToRelease(`
6+
## Version Changes
7+
8+
- [x] javascript: v1.0.0 -> v1.1.0
9+
- [x] php: v2.0.0 -> v2.0.1
10+
- [ ] java: v3.0.0 -> v3.0.1
11+
`);
12+
13+
expect(Object.keys(versions)).toEqual(['javascript', 'php']);
14+
expect(versions.javascript.current).toEqual('1.0.0');
15+
expect(versions.javascript.next).toEqual('1.1.0');
16+
expect(versions.php.current).toEqual('2.0.0');
17+
expect(versions.php.next).toEqual('2.0.1');
18+
});
19+
20+
it('gets langs to update', () => {
21+
expect(
22+
getLangsToUpdateRepo(`
23+
## Version Changes
24+
25+
- [ ] javascript: v1.0.0 -> v1.1.0
26+
- [x] php: v2.0.0 -> v2.0.1
27+
- [ ] java: v3.0.0 -> v3.0.1
28+
`)
29+
).toEqual(['javascript', 'java']);
30+
});
31+
});

0 commit comments

Comments
 (0)