@@ -3,7 +3,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
33import { generateSecret } from "../../test/utils" ;
44import { SessionData } from "../../types" ;
55import { decrypt , encrypt , RequestCookies , ResponseCookies } from "../cookies" ;
6- import { LegacySession } from "./normalize-session" ;
6+ import { LEGACY_COOKIE_NAME , LegacySession } from "./normalize-session" ;
77import { StatelessSessionStore } from "./stateless-session-store" ;
88
99describe ( "Stateless Session Store" , async ( ) => {
@@ -313,6 +313,72 @@ describe("Stateless Session Store", async () => {
313313 expect ( cookie ?. maxAge ) . toEqual ( 0 ) ; // cookie should expire immediately
314314 expect ( cookie ?. secure ) . toEqual ( false ) ;
315315 } ) ;
316+
317+ it ( "should delete the legacy cookie if it exists" , async ( ) => {
318+ const currentTime = Date . now ( ) ;
319+ const createdAt = Math . floor ( currentTime / 1000 ) ;
320+ const secret = await generateSecret ( 32 ) ;
321+ const session : SessionData = {
322+ user : { sub : "user_123" } ,
323+ tokenSet : {
324+ accessToken : "at_123" ,
325+ refreshToken : "rt_123" ,
326+ expiresAt : 123456
327+ } ,
328+ internal : {
329+ sid : "auth0-sid" ,
330+ createdAt
331+ }
332+ } ;
333+ const requestCookies = new RequestCookies ( new Headers ( ) ) ;
334+ const responseCookies = new ResponseCookies ( new Headers ( ) ) ;
335+
336+ const sessionStore = new StatelessSessionStore ( {
337+ secret,
338+ } ) ;
339+
340+ vi . spyOn ( responseCookies , "delete" ) ;
341+ vi . spyOn ( requestCookies , "has" ) . mockReturnValue ( true ) ;
342+
343+ await sessionStore . set ( requestCookies , responseCookies , session ) ;
344+
345+ expect ( responseCookies . delete ) . toHaveBeenCalledWith ( LEGACY_COOKIE_NAME ) ;
346+ } ) ;
347+
348+ it ( "should delete the legacy cookie chunks if they exists" , async ( ) => {
349+ const currentTime = Date . now ( ) ;
350+ const createdAt = Math . floor ( currentTime / 1000 ) ;
351+ const secret = await generateSecret ( 32 ) ;
352+ const session : SessionData = {
353+ user : { sub : "user_123" } ,
354+ tokenSet : {
355+ accessToken : "at_123" ,
356+ refreshToken : "rt_123" ,
357+ expiresAt : 123456
358+ } ,
359+ internal : {
360+ sid : "auth0-sid" ,
361+ createdAt
362+ }
363+ } ;
364+ const requestCookies = new RequestCookies ( new Headers ( ) ) ;
365+ const responseCookies = new ResponseCookies ( new Headers ( ) ) ;
366+
367+ const sessionStore = new StatelessSessionStore ( {
368+ secret,
369+ } ) ;
370+
371+ vi . spyOn ( responseCookies , "delete" ) ;
372+ vi . spyOn ( requestCookies , "getAll" ) . mockReturnValue ( [
373+ { name : `${ LEGACY_COOKIE_NAME } __0` , value : '' } ,
374+ { name : `${ LEGACY_COOKIE_NAME } __1` , value : '' }
375+ ] ) ;
376+
377+ await sessionStore . set ( requestCookies , responseCookies , session ) ;
378+
379+ expect ( responseCookies . delete ) . toHaveBeenCalledWith ( `${ LEGACY_COOKIE_NAME } __0` ) ;
380+ expect ( responseCookies . delete ) . toHaveBeenCalledWith ( `${ LEGACY_COOKIE_NAME } __1` ) ;
381+ } ) ;
316382 } ) ;
317383
318384 describe ( "with rolling sessions disabled" , async ( ) => {
0 commit comments