@@ -194,6 +194,96 @@ describe('headers', () => {
194
194
describe ( 'setCacheControlHeaders' , ( ) => {
195
195
const defaultUrl = 'https://example.com'
196
196
197
+ describe ( 'Durable Cache feature flag disabled' , ( ) => {
198
+ test ( 'should set permanent, non-durable "netlify-cdn-cache-control" if "cache-control" is not set and "requestContext.usedFsRead" is truthy' , ( ) => {
199
+ const headers = new Headers ( )
200
+ const request = new Request ( defaultUrl )
201
+ vi . spyOn ( headers , 'set' )
202
+
203
+ const requestContext = createRequestContext ( )
204
+ requestContext . usedFsRead = true
205
+
206
+ setCacheControlHeaders ( headers , request , requestContext , false )
207
+
208
+ expect ( headers . set ) . toHaveBeenNthCalledWith (
209
+ 1 ,
210
+ 'cache-control' ,
211
+ 'public, max-age=0, must-revalidate' ,
212
+ )
213
+ expect ( headers . set ) . toHaveBeenNthCalledWith (
214
+ 2 ,
215
+ 'netlify-cdn-cache-control' ,
216
+ 'max-age=31536000' ,
217
+ )
218
+ } )
219
+
220
+ describe ( 'route handler responses with a specified `revalidate` value' , ( ) => {
221
+ test ( 'should set non-durable SWC=1yr with 1yr TTL if "{netlify-,}cdn-cache-control" is not present and `revalidate` is `false` (GET)' , ( ) => {
222
+ const headers = new Headers ( )
223
+ const request = new Request ( defaultUrl )
224
+ vi . spyOn ( headers , 'set' )
225
+
226
+ const ctx : RequestContext = { ...createRequestContext ( ) , routeHandlerRevalidate : false }
227
+ setCacheControlHeaders ( headers , request , ctx , false )
228
+
229
+ expect ( headers . set ) . toHaveBeenCalledTimes ( 1 )
230
+ expect ( headers . set ) . toHaveBeenNthCalledWith (
231
+ 1 ,
232
+ 'netlify-cdn-cache-control' ,
233
+ 's-maxage=31536000, stale-while-revalidate=31536000' ,
234
+ )
235
+ } )
236
+
237
+ test ( 'should set non-durable SWC=1yr with 1yr TTL if "{netlify-,}cdn-cache-control" is not present and `revalidate` is `false` (HEAD)' , ( ) => {
238
+ const headers = new Headers ( )
239
+ const request = new Request ( defaultUrl , { method : 'HEAD' } )
240
+ vi . spyOn ( headers , 'set' )
241
+
242
+ const ctx : RequestContext = { ...createRequestContext ( ) , routeHandlerRevalidate : false }
243
+ setCacheControlHeaders ( headers , request , ctx , false )
244
+
245
+ expect ( headers . set ) . toHaveBeenCalledTimes ( 1 )
246
+ expect ( headers . set ) . toHaveBeenNthCalledWith (
247
+ 1 ,
248
+ 'netlify-cdn-cache-control' ,
249
+ 's-maxage=31536000, stale-while-revalidate=31536000' ,
250
+ )
251
+ } )
252
+
253
+ test ( 'should set non-durable SWC=1yr with given TTL if "{netlify-,}cdn-cache-control" is not present and `revalidate` is a number (GET)' , ( ) => {
254
+ const headers = new Headers ( )
255
+ const request = new Request ( defaultUrl )
256
+ vi . spyOn ( headers , 'set' )
257
+
258
+ const ctx : RequestContext = { ...createRequestContext ( ) , routeHandlerRevalidate : 7200 }
259
+ setCacheControlHeaders ( headers , request , ctx , false )
260
+
261
+ expect ( headers . set ) . toHaveBeenCalledTimes ( 1 )
262
+ expect ( headers . set ) . toHaveBeenNthCalledWith (
263
+ 1 ,
264
+ 'netlify-cdn-cache-control' ,
265
+ 's-maxage=7200, stale-while-revalidate=31536000' ,
266
+ )
267
+ } )
268
+
269
+ test ( 'should set non-durable SWC=1yr with 1yr TTL if "{netlify-,}cdn-cache-control" is not present and `revalidate` is a number (HEAD)' , ( ) => {
270
+ const headers = new Headers ( )
271
+ const request = new Request ( defaultUrl , { method : 'HEAD' } )
272
+ vi . spyOn ( headers , 'set' )
273
+
274
+ const ctx : RequestContext = { ...createRequestContext ( ) , routeHandlerRevalidate : 7200 }
275
+ setCacheControlHeaders ( headers , request , ctx , false )
276
+
277
+ expect ( headers . set ) . toHaveBeenCalledTimes ( 1 )
278
+ expect ( headers . set ) . toHaveBeenNthCalledWith (
279
+ 1 ,
280
+ 'netlify-cdn-cache-control' ,
281
+ 's-maxage=7200, stale-while-revalidate=31536000' ,
282
+ )
283
+ } )
284
+ } )
285
+ } )
286
+
197
287
describe ( 'route handler responses with a specified `revalidate` value' , ( ) => {
198
288
test ( 'should not set any headers if "cdn-cache-control" is present' , ( ) => {
199
289
const givenHeaders = {
@@ -204,7 +294,7 @@ describe('headers', () => {
204
294
vi . spyOn ( headers , 'set' )
205
295
206
296
const ctx : RequestContext = { ...createRequestContext ( ) , routeHandlerRevalidate : false }
207
- setCacheControlHeaders ( headers , request , ctx )
297
+ setCacheControlHeaders ( headers , request , ctx , true )
208
298
209
299
expect ( headers . set ) . toHaveBeenCalledTimes ( 0 )
210
300
} )
@@ -218,7 +308,7 @@ describe('headers', () => {
218
308
vi . spyOn ( headers , 'set' )
219
309
220
310
const ctx : RequestContext = { ...createRequestContext ( ) , routeHandlerRevalidate : false }
221
- setCacheControlHeaders ( headers , request , ctx )
311
+ setCacheControlHeaders ( headers , request , ctx , true )
222
312
223
313
expect ( headers . set ) . toHaveBeenCalledTimes ( 0 )
224
314
} )
@@ -232,7 +322,7 @@ describe('headers', () => {
232
322
vi . spyOn ( headers , 'set' )
233
323
234
324
const ctx : RequestContext = { ...createRequestContext ( ) , routeHandlerRevalidate : false }
235
- setCacheControlHeaders ( headers , request , ctx )
325
+ setCacheControlHeaders ( headers , request , ctx , true )
236
326
237
327
expect ( headers . set ) . toHaveBeenCalledTimes ( 1 )
238
328
expect ( headers . set ) . toHaveBeenNthCalledWith (
@@ -251,7 +341,7 @@ describe('headers', () => {
251
341
vi . spyOn ( headers , 'set' )
252
342
253
343
const ctx : RequestContext = { ...createRequestContext ( ) , routeHandlerRevalidate : false }
254
- setCacheControlHeaders ( headers , request , ctx )
344
+ setCacheControlHeaders ( headers , request , ctx , true )
255
345
256
346
expect ( headers . set ) . toHaveBeenCalledTimes ( 1 )
257
347
expect ( headers . set ) . toHaveBeenNthCalledWith (
@@ -267,7 +357,7 @@ describe('headers', () => {
267
357
vi . spyOn ( headers , 'set' )
268
358
269
359
const ctx : RequestContext = { ...createRequestContext ( ) , routeHandlerRevalidate : false }
270
- setCacheControlHeaders ( headers , request , ctx )
360
+ setCacheControlHeaders ( headers , request , ctx , true )
271
361
272
362
expect ( headers . set ) . toHaveBeenCalledTimes ( 1 )
273
363
expect ( headers . set ) . toHaveBeenNthCalledWith (
@@ -283,7 +373,7 @@ describe('headers', () => {
283
373
vi . spyOn ( headers , 'set' )
284
374
285
375
const ctx : RequestContext = { ...createRequestContext ( ) , routeHandlerRevalidate : 7200 }
286
- setCacheControlHeaders ( headers , request , ctx )
376
+ setCacheControlHeaders ( headers , request , ctx , true )
287
377
288
378
expect ( headers . set ) . toHaveBeenCalledTimes ( 1 )
289
379
expect ( headers . set ) . toHaveBeenNthCalledWith (
@@ -299,7 +389,7 @@ describe('headers', () => {
299
389
vi . spyOn ( headers , 'set' )
300
390
301
391
const ctx : RequestContext = { ...createRequestContext ( ) , routeHandlerRevalidate : 7200 }
302
- setCacheControlHeaders ( headers , request , ctx )
392
+ setCacheControlHeaders ( headers , request , ctx , true )
303
393
304
394
expect ( headers . set ) . toHaveBeenCalledTimes ( 1 )
305
395
expect ( headers . set ) . toHaveBeenNthCalledWith (
@@ -315,7 +405,7 @@ describe('headers', () => {
315
405
vi . spyOn ( headers , 'set' )
316
406
317
407
const ctx : RequestContext = { ...createRequestContext ( ) , routeHandlerRevalidate : false }
318
- setCacheControlHeaders ( headers , request , ctx )
408
+ setCacheControlHeaders ( headers , request , ctx , true )
319
409
320
410
expect ( headers . set ) . toHaveBeenCalledTimes ( 0 )
321
411
} )
@@ -326,20 +416,20 @@ describe('headers', () => {
326
416
const request = new Request ( defaultUrl )
327
417
vi . spyOn ( headers , 'set' )
328
418
329
- setCacheControlHeaders ( headers , request , createRequestContext ( ) )
419
+ setCacheControlHeaders ( headers , request , createRequestContext ( ) , true )
330
420
331
421
expect ( headers . set ) . toHaveBeenCalledTimes ( 0 )
332
422
} )
333
423
334
- test ( 'should set permanent "netlify-cdn-cache-control" if "cache-control" is not set and "requestContext.usedFsRead" is truthy' , ( ) => {
424
+ test ( 'should set permanent, durable "netlify-cdn-cache-control" if "cache-control" is not set and "requestContext.usedFsRead" is truthy' , ( ) => {
335
425
const headers = new Headers ( )
336
426
const request = new Request ( defaultUrl )
337
427
vi . spyOn ( headers , 'set' )
338
428
339
429
const requestContext = createRequestContext ( )
340
430
requestContext . usedFsRead = true
341
431
342
- setCacheControlHeaders ( headers , request , requestContext )
432
+ setCacheControlHeaders ( headers , request , requestContext , true )
343
433
344
434
expect ( headers . set ) . toHaveBeenNthCalledWith (
345
435
1 ,
@@ -349,7 +439,7 @@ describe('headers', () => {
349
439
expect ( headers . set ) . toHaveBeenNthCalledWith (
350
440
2 ,
351
441
'netlify-cdn-cache-control' ,
352
- 'max-age=31536000' ,
442
+ 'max-age=31536000, durable ' ,
353
443
)
354
444
} )
355
445
@@ -362,7 +452,7 @@ describe('headers', () => {
362
452
const request = new Request ( defaultUrl )
363
453
vi . spyOn ( headers , 'set' )
364
454
365
- setCacheControlHeaders ( headers , request , createRequestContext ( ) )
455
+ setCacheControlHeaders ( headers , request , createRequestContext ( ) , true )
366
456
367
457
expect ( headers . set ) . toHaveBeenCalledTimes ( 0 )
368
458
} )
@@ -376,7 +466,7 @@ describe('headers', () => {
376
466
const request = new Request ( defaultUrl )
377
467
vi . spyOn ( headers , 'set' )
378
468
379
- setCacheControlHeaders ( headers , request , createRequestContext ( ) )
469
+ setCacheControlHeaders ( headers , request , createRequestContext ( ) , true )
380
470
381
471
expect ( headers . set ) . toHaveBeenCalledTimes ( 0 )
382
472
} )
@@ -389,7 +479,7 @@ describe('headers', () => {
389
479
const request = new Request ( defaultUrl )
390
480
vi . spyOn ( headers , 'set' )
391
481
392
- setCacheControlHeaders ( headers , request , createRequestContext ( ) )
482
+ setCacheControlHeaders ( headers , request , createRequestContext ( ) , true )
393
483
394
484
expect ( headers . set ) . toHaveBeenNthCalledWith (
395
485
1 ,
@@ -399,7 +489,7 @@ describe('headers', () => {
399
489
expect ( headers . set ) . toHaveBeenNthCalledWith (
400
490
2 ,
401
491
'netlify-cdn-cache-control' ,
402
- 'public, max-age=0, must-revalidate' ,
492
+ 'public, max-age=0, must-revalidate, durable ' ,
403
493
)
404
494
} )
405
495
@@ -411,7 +501,7 @@ describe('headers', () => {
411
501
const request = new Request ( defaultUrl , { method : 'HEAD' } )
412
502
vi . spyOn ( headers , 'set' )
413
503
414
- setCacheControlHeaders ( headers , request , createRequestContext ( ) )
504
+ setCacheControlHeaders ( headers , request , createRequestContext ( ) , true )
415
505
416
506
expect ( headers . set ) . toHaveBeenNthCalledWith (
417
507
1 ,
@@ -421,7 +511,7 @@ describe('headers', () => {
421
511
expect ( headers . set ) . toHaveBeenNthCalledWith (
422
512
2 ,
423
513
'netlify-cdn-cache-control' ,
424
- 'public, max-age=0, must-revalidate' ,
514
+ 'public, max-age=0, must-revalidate, durable ' ,
425
515
)
426
516
} )
427
517
@@ -433,7 +523,7 @@ describe('headers', () => {
433
523
const request = new Request ( defaultUrl , { method : 'POST' } )
434
524
vi . spyOn ( headers , 'set' )
435
525
436
- setCacheControlHeaders ( headers , request , createRequestContext ( ) )
526
+ setCacheControlHeaders ( headers , request , createRequestContext ( ) , true )
437
527
438
528
expect ( headers . set ) . toHaveBeenCalledTimes ( 0 )
439
529
} )
@@ -446,13 +536,13 @@ describe('headers', () => {
446
536
const request = new Request ( defaultUrl )
447
537
vi . spyOn ( headers , 'set' )
448
538
449
- setCacheControlHeaders ( headers , request , createRequestContext ( ) )
539
+ setCacheControlHeaders ( headers , request , createRequestContext ( ) , true )
450
540
451
541
expect ( headers . set ) . toHaveBeenNthCalledWith ( 1 , 'cache-control' , 'public' )
452
542
expect ( headers . set ) . toHaveBeenNthCalledWith (
453
543
2 ,
454
544
'netlify-cdn-cache-control' ,
455
- 'public, s-maxage=604800' ,
545
+ 'public, s-maxage=604800, durable ' ,
456
546
)
457
547
} )
458
548
@@ -464,13 +554,13 @@ describe('headers', () => {
464
554
const request = new Request ( defaultUrl )
465
555
vi . spyOn ( headers , 'set' )
466
556
467
- setCacheControlHeaders ( headers , request , createRequestContext ( ) )
557
+ setCacheControlHeaders ( headers , request , createRequestContext ( ) , true )
468
558
469
559
expect ( headers . set ) . toHaveBeenNthCalledWith ( 1 , 'cache-control' , 'max-age=604800' )
470
560
expect ( headers . set ) . toHaveBeenNthCalledWith (
471
561
2 ,
472
562
'netlify-cdn-cache-control' ,
473
- 'max-age=604800, stale-while-revalidate=86400' ,
563
+ 'max-age=604800, stale-while-revalidate=86400, durable ' ,
474
564
)
475
565
} )
476
566
@@ -482,7 +572,7 @@ describe('headers', () => {
482
572
const request = new Request ( defaultUrl )
483
573
vi . spyOn ( headers , 'set' )
484
574
485
- setCacheControlHeaders ( headers , request , createRequestContext ( ) )
575
+ setCacheControlHeaders ( headers , request , createRequestContext ( ) , true )
486
576
487
577
expect ( headers . set ) . toHaveBeenNthCalledWith (
488
578
1 ,
@@ -492,7 +582,7 @@ describe('headers', () => {
492
582
expect ( headers . set ) . toHaveBeenNthCalledWith (
493
583
2 ,
494
584
'netlify-cdn-cache-control' ,
495
- 's-maxage=604800, stale-while-revalidate=86400' ,
585
+ 's-maxage=604800, stale-while-revalidate=86400, durable ' ,
496
586
)
497
587
} )
498
588
} )
0 commit comments