@@ -2,39 +2,46 @@ import assert from 'node:assert/strict';
22import { describe , it } from 'node:test' ;
33
44describe ( 'generateReleaseData' , ( ) => {
5- it ( 'generates release data with correct status' , async t => {
6- t . mock . timers . enable ( { now : new Date ( '2024-10-18' ) } ) ;
5+ let currentNodevuData = { } ;
6+ const nodevuMock = ( ) => Promise . resolve ( currentNodevuData ) ;
7+
8+ const runWithNodevuData = async ( t , now , data ) => {
9+ currentNodevuData = data ;
10+ t . mock . timers . enable ( { now : new Date ( now ) } ) ;
711
812 t . mock . module ( '@nodevu/core' , {
9- defaultExport : ( ) =>
10- Promise . resolve ( {
11- 14 : {
12- releases : {
13- '14.0.0' : {
14- semver : { major : 14 , raw : '14.0.0' } ,
15- dependencies : { npm : '6.14.10' , v8 : '8.0.276.20' } ,
16- releaseDate : '2021-04-20' ,
17- modules : { version : '83' } ,
18- } ,
19- } ,
20- support : {
21- phases : {
22- dates : {
23- start : '2021-10-26' ,
24- lts : '2022-10-18' ,
25- maintenance : '2023-10-18' ,
26- end : '2024-10-18' ,
27- } ,
28- } ,
29- } ,
30- } ,
31- } ) ,
13+ defaultExport : nodevuMock ,
3214 } ) ;
3315
3416 const { default : generateReleaseData } =
3517 await import ( '#site/next-data/generators/releaseData.mjs' ) ;
3618
37- const result = await generateReleaseData ( ) ;
19+ return generateReleaseData ( ) ;
20+ } ;
21+
22+ it ( 'returns End-of-life when release is on or past EOL date' , async t => {
23+ const result = await runWithNodevuData ( t , '2024-10-18' , {
24+ 14 : {
25+ releases : {
26+ '14.0.0' : {
27+ semver : { major : 14 , raw : '14.0.0' } ,
28+ dependencies : { npm : '6.14.10' , v8 : '8.0.276.20' } ,
29+ releaseDate : '2021-04-20' ,
30+ modules : { version : '83' } ,
31+ } ,
32+ } ,
33+ support : {
34+ phases : {
35+ dates : {
36+ start : '2021-10-26' ,
37+ lts : '2022-10-18' ,
38+ maintenance : '2023-10-18' ,
39+ end : '2024-10-18' ,
40+ } ,
41+ } ,
42+ } ,
43+ } ,
44+ } ) ;
3845
3946 assert . equal ( result . length , 1 ) ;
4047 assert . partialDeepStrictEqual ( result [ 0 ] , {
@@ -50,4 +57,124 @@ describe('generateReleaseData', () => {
5057 status : 'End-of-life' ,
5158 } ) ;
5259 } ) ;
60+
61+ it ( 'returns Current when release is not EOL and latest is not LTS' , async t => {
62+ const result = await runWithNodevuData ( t , '2026-04-14' , {
63+ 20 : {
64+ releases : {
65+ '20.12.0' : {
66+ semver : { major : 20 , raw : '20.12.0' } ,
67+ dependencies : { npm : '10.8.2' , v8 : '11.3.244.8' } ,
68+ lts : { isLts : false } ,
69+ releaseDate : '2026-03-26' ,
70+ modules : { version : '115' } ,
71+ } ,
72+ } ,
73+ support : {
74+ phases : {
75+ dates : {
76+ start : '2025-10-22' ,
77+ lts : '2026-10-22' ,
78+ maintenance : '2027-10-22' ,
79+ end : '2028-04-30' ,
80+ } ,
81+ } ,
82+ } ,
83+ } ,
84+ } ) ;
85+
86+ assert . equal ( result [ 0 ] ?. status , 'Current' ) ;
87+ } ) ;
88+
89+ it ( 'returns LTS when release is not EOL and latest is flagged as LTS' , async t => {
90+ const result = await runWithNodevuData ( t , '2026-04-14' , {
91+ 22 : {
92+ releases : {
93+ '22.7.0' : {
94+ semver : { major : 22 , raw : '22.7.0' } ,
95+ dependencies : { npm : '10.9.0' , v8 : '12.4.254.10' } ,
96+ lts : { isLts : true } ,
97+ releaseDate : '2026-02-18' ,
98+ modules : { version : '124' } ,
99+ } ,
100+ } ,
101+ support : {
102+ phases : {
103+ dates : {
104+ start : '2026-04-23' ,
105+ lts : '2026-10-21' ,
106+ maintenance : '2027-10-20' ,
107+ end : '2029-04-30' ,
108+ } ,
109+ } ,
110+ } ,
111+ } ,
112+ } ) ;
113+
114+ assert . equal ( result [ 0 ] ?. status , 'LTS' ) ;
115+ } ) ;
116+
117+ it ( 'returns Current when release is not EOL and LTS date has passed but latest is not LTS' , async t => {
118+ const result = await runWithNodevuData ( t , '2026-04-14' , {
119+ 24 : {
120+ releases : {
121+ '24.1.0' : {
122+ semver : { major : 24 , raw : '24.1.0' } ,
123+ dependencies : { npm : '11.1.0' , v8 : '13.0.12.7' } ,
124+ lts : { isLts : false } ,
125+ releaseDate : '2026-03-10' ,
126+ modules : { version : '130' } ,
127+ } ,
128+ } ,
129+ support : {
130+ phases : {
131+ dates : {
132+ start : '2025-10-10' ,
133+ lts : '2026-01-01' ,
134+ maintenance : '2027-01-01' ,
135+ end : '2028-10-01' ,
136+ } ,
137+ } ,
138+ } ,
139+ } ,
140+ } ) ;
141+
142+ assert . equal ( result [ 0 ] ?. status , 'Current' ) ;
143+ } ) ;
144+
145+ it ( 'uses latest and earliest release dates for releaseDate and initialDate' , async t => {
146+ const result = await runWithNodevuData ( t , '2026-04-14' , {
147+ 26 : {
148+ releases : {
149+ '26.2.0' : {
150+ semver : { major : 26 , raw : '26.2.0' } ,
151+ dependencies : { npm : '11.3.1' , v8 : '13.2.20.1' } ,
152+ lts : { isLts : false } ,
153+ releaseDate : '2026-04-01' ,
154+ modules : { version : '132' } ,
155+ } ,
156+ '26.0.0' : {
157+ semver : { major : 26 , raw : '26.0.0' } ,
158+ dependencies : { npm : '11.0.0' , v8 : '13.1.0.0' } ,
159+ lts : { isLts : false } ,
160+ releaseDate : '2025-10-21' ,
161+ modules : { version : '131' } ,
162+ } ,
163+ } ,
164+ support : {
165+ phases : {
166+ dates : {
167+ start : '2025-10-21' ,
168+ lts : '2026-10-20' ,
169+ maintenance : '2027-10-19' ,
170+ end : '2029-04-30' ,
171+ } ,
172+ } ,
173+ } ,
174+ } ,
175+ } ) ;
176+
177+ assert . equal ( result [ 0 ] ?. releaseDate , '2026-04-01' ) ;
178+ assert . equal ( result [ 0 ] ?. initialDate , '2025-10-21' ) ;
179+ } ) ;
53180} ) ;
0 commit comments