11import { execSync } from 'node:child_process' ;
2- import { appendFileSync } from 'node:fs' ;
32import { beforeEach , describe , expect , it , vi } from 'vitest' ;
43
54import { checkVersionIsNext } from './current-version-validation.ts' ;
@@ -14,40 +13,88 @@ function makeLsRemoteTags(tags: string[]): string {
1413}
1514
1615describe ( 'checkVersionIsNext' , ( ) => {
17- beforeEach ( ( ) => vi . clearAllMocks ( ) ) ;
16+ beforeEach ( ( ) => {
17+ vi . clearAllMocks ( ) ;
18+ } ) ;
1819
1920 it . each ( [
2021 // stable — patch
21- [ 'stable' , [ '4.2.0' , '4.2.1' , '4.2.2' ] , '4.2.3' , true , null ] ,
22- [ 'stable' , [ '4.2.0' , '4.2.1' , '4.2.2' ] , '4.2.4' , false , 'Expected next patch release to be 4.2.3' ] ,
23- [ 'stable' , [ '4.2.0' , '4.2.1' , '4.2.2' ] , '4.2.2' , false , 'Expected next patch release to be 4.2.3' ] ,
22+ [ 'stable' , [ '4.2.0' , '4.2.1' , '4.2.2' ] , '4.2.3' , true , null ] ,
23+ [
24+ 'stable' ,
25+ [ '4.2.0' , '4.2.1' , '4.2.2' ] ,
26+ '4.2.4' ,
27+ false ,
28+ 'Expected next patch release to be 4.2.3' ,
29+ ] ,
30+ [
31+ 'stable' ,
32+ [ '4.2.0' , '4.2.1' , '4.2.2' ] ,
33+ '4.2.2' ,
34+ false ,
35+ 'Expected next patch release to be 4.2.3' ,
36+ ] ,
2437 // stable — minor
25- [ 'stable' , [ '4.1.0' , '4.2.0' , '4.2.5' ] , '4.3.0' , true , null ] ,
26- [ 'stable' , [ '4.1.0' , '4.2.0' , '4.2.5' ] , '4.4.0' , false , 'Expected next minor release to be 4.3.0' ] ,
38+ [ 'stable' , [ '4.1.0' , '4.2.0' , '4.2.5' ] , '4.3.0' , true , null ] ,
39+ [
40+ 'stable' ,
41+ [ '4.1.0' , '4.2.0' , '4.2.5' ] ,
42+ '4.4.0' ,
43+ false ,
44+ 'Expected next minor release to be 4.3.0' ,
45+ ] ,
2746 // stable — no existing tags
28- [ 'stable' , [ '4.1.0-beta1' ] , '4.1.0' , true , null ] ,
47+ [ 'stable' , [ '4.1.0-beta1' ] , '4.1.0' , true , null ] ,
2948 // beta — next in same series
30- [ 'beta' , [ '4.2.0-beta1' , '4.2.0-beta2' ] , '4.2.0-beta3' , true , null ] ,
31- [ 'beta' , [ '4.2.0-beta1' , '4.2.0-beta2' ] , '4.2.0-beta4' , false , 'Expected next beta to be 4.2.0-beta3' ] ,
32- [ 'beta' , [ '4.2.0-beta1' , '4.2.0-beta2' ] , '4.2.0-beta2' , false , 'Expected next beta to be 4.2.0-beta3' ] ,
49+ [ 'beta' , [ '4.2.0-beta1' , '4.2.0-beta2' ] , '4.2.0-beta3' , true , null ] ,
50+ [
51+ 'beta' ,
52+ [ '4.2.0-beta1' , '4.2.0-beta2' ] ,
53+ '4.2.0-beta4' ,
54+ false ,
55+ 'Expected next beta to be 4.2.0-beta3' ,
56+ ] ,
57+ [
58+ 'beta' ,
59+ [ '4.2.0-beta1' , '4.2.0-beta2' ] ,
60+ '4.2.0-beta2' ,
61+ false ,
62+ 'Expected next beta to be 4.2.0-beta3' ,
63+ ] ,
3364 // beta — new version line
34- [ 'beta' , [ '4.2.0-beta1' , '4.2.0-beta2' ] , '4.3.0-beta1' , true , null ] ,
35- [ 'beta' , [ '4.2.0-beta1' , '4.2.0-beta2' ] , '4.3.0-beta2' , false , 'must be beta1' ] ,
65+ [ 'beta' , [ '4.2.0-beta1' , '4.2.0-beta2' ] , '4.3.0-beta1' , true , null ] ,
66+ [
67+ 'beta' ,
68+ [ '4.2.0-beta1' , '4.2.0-beta2' ] ,
69+ '4.3.0-beta2' ,
70+ false ,
71+ 'must be beta1' ,
72+ ] ,
3673 // beta — no existing tags
37- [ 'beta' , [ '4.1.0' , '4.2.0' ] , '4.2.0-beta1' , true , null ] ,
38- ] as const ) ( '%s %s → %s (valid=%s)' , ( channel , existingTags , version , valid , errorMsg ) => {
39- mockExecSync . mockReturnValue ( makeLsRemoteTags ( [ ...existingTags ] ) as never ) ;
40- const fn = ( ) => checkVersionIsNext ( version , channel ) ;
41- if ( valid ) {
42- expect ( fn ) . not . toThrow ( ) ;
43- } else {
44- expect ( fn ) . toThrow ( errorMsg ! ) ;
45- }
46- } ) ;
74+ [ 'beta' , [ '4.1.0' , '4.2.0' ] , '4.2.0-beta1' , true , null ] ,
75+ ] as const ) (
76+ '%s %s → %s (valid=%s)' ,
77+ ( channel , existingTags , version , valid , errorMsg ) => {
78+ mockExecSync . mockReturnValue (
79+ makeLsRemoteTags ( [ ...existingTags ] ) as never ,
80+ ) ;
81+ const fn = ( ) => {
82+ checkVersionIsNext ( version , channel ) ;
83+ } ;
84+ if ( valid ) {
85+ expect ( fn ) . not . toThrow ( ) ;
86+ } else {
87+ expect ( fn ) . toThrow ( errorMsg ) ;
88+ }
89+ } ,
90+ ) ;
4791
4892 it ( 'throws when git ls-remote fails' , ( ) => {
49- mockExecSync . mockImplementation ( ( ) => { throw new Error ( 'network error' ) ; } ) ;
50- expect ( ( ) => checkVersionIsNext ( '4.2.3' , 'stable' ) ) . toThrow ( 'Failed to fetch remote tags' ) ;
93+ mockExecSync . mockImplementation ( ( ) => {
94+ throw new Error ( 'network error' ) ;
95+ } ) ;
96+ expect ( ( ) => {
97+ checkVersionIsNext ( '4.2.3' , 'stable' ) ;
98+ } ) . toThrow ( 'Failed to fetch remote tags' ) ;
5199 } ) ;
52100} ) ;
53-
0 commit comments