@@ -9,7 +9,7 @@ import { GetServerSidePropsContext, NextApiRequest, NextApiResponse } from "next
9
9
import { CookieHandler , createCookieHandler } from "./cookieHandler"
10
10
import { createMemorySessionStore , SessionStore } from "./memorySessionStore"
11
11
12
- function getMocks ( ) {
12
+ export function getMocks ( ) {
13
13
const req = {
14
14
headers : {
15
15
cookie : ""
@@ -48,98 +48,7 @@ function getMocks() {
48
48
}
49
49
}
50
50
51
- describe ( "Memory Session Store" , ( ) => {
52
- it ( "Should create unique string IDs" , async ( ) => {
53
- const store = createMemorySessionStore ( ) ;
54
- expect ( typeof ( await store . id ( ) ) ) . toBe ( "string" ) ;
55
- const id1 = await store . id ( ) ;
56
- const id2 = await store . id ( ) ;
57
- expect ( id1 === id2 ) . toBe ( false ) ;
58
- } ) ;
59
-
60
- it ( "Should return null on unknown sessionId" , async ( ) => {
61
- const store = createMemorySessionStore ( ) ;
62
- expect ( await store . get ( "unknown" ) ) . toBe ( null ) ;
63
- } ) ;
64
-
65
- it ( "Should resolve to void when setting or replacing values" , async ( ) => {
66
- const store = createMemorySessionStore ( ) ;
67
- expect ( await store . set ( "id1" , { test : true } ) ) . toBeUndefined ( ) ;
68
- expect ( await store . merge ( "id2" , { test : true } ) ) . toBeUndefined ( ) ;
69
- } ) ;
70
-
71
- it ( "Should return the correct data that previously has been set" , async ( ) => {
72
- const store = createMemorySessionStore ( ) ;
73
- await store . set ( "id1" , { test : true } ) ;
74
- expect ( await store . get ( "id1" ) ) . toMatchObject ( { test : true } ) ;
75
- } ) ;
76
-
77
- it ( "Should replace objects when calling set on the same session id" , async ( ) => {
78
- const store = createMemorySessionStore ( ) ;
79
- await store . set ( "id1" , { test : true } ) ;
80
- expect ( await store . get ( "id1" ) ) . toMatchObject ( { test : true } ) ;
81
- await store . set ( "id1" , { foo : "bar" } ) ;
82
- expect ( await store . get ( "id1" ) ) . toMatchObject ( { foo : "bar" } ) ;
83
- } ) ;
84
-
85
- it ( "Should correctly merge session objects" , async ( ) => {
86
- const store = createMemorySessionStore ( ) ;
87
- await store . merge ( "id1" , { foo : "bar" } ) ;
88
- expect ( await store . get ( "id1" ) ) . toMatchObject ( { foo : "bar" } ) ;
89
- await store . merge ( "id1" , { some : "more" } ) ;
90
- expect ( await store . get ( "id1" ) ) . toMatchObject ( { foo : "bar" , some : "more" } ) ;
91
- } ) ;
92
-
93
- it ( "Should correctly destroy session objects" , async ( ) => {
94
- const store = createMemorySessionStore ( ) ;
95
- await store . set ( "id1" , { test : true } ) ;
96
- expect ( await store . get ( "id1" ) ) . not . toBe ( null ) ;
97
- await store . destroy ( "id1" ) ;
98
- expect ( await store . get ( "id1" ) ) . toBe ( null ) ;
99
- } ) ;
100
-
101
- it ( "Should remove older session objects" , async ( ) => {
102
- const now = Date . now ( ) ;
103
- jest . useFakeTimers ( "modern" ) ;
104
- const store = createMemorySessionStore ( ) ;
105
- await store . set ( "timeoutTest" , { exists : true } ) ;
106
- jest . setSystemTime ( now + 31 * 60 * 1000 ) ;
107
- jest . advanceTimersByTime ( 10000 ) ;
108
- expect ( await store . get ( "timeoutTest" ) ) . toBe ( null ) ;
109
- } ) ;
110
- } ) ;
111
-
112
- describe ( "Cookie Handler" , ( ) => {
113
- test ( "Reader" , async ( ) => {
114
- const { req, res } = getMocks ( ) ;
115
- const handler = createCookieHandler ( ) ;
116
-
117
- expect ( await handler . read ( req ) ) . toBeUndefined ( ) ;
118
- req . headers . cookie = "something=else; nextSession=abc123; some=more" ;
119
- expect ( await handler . read ( req ) ) . toBe ( "abc123" ) ;
120
- } ) ;
121
-
122
- test ( "Writer" , async ( ) => {
123
- const { res } = getMocks ( ) ;
124
- const handler = createCookieHandler ( ) ;
125
-
126
- res . setHeader = jest . fn ( ) ;
127
- await handler . write ( res , "testId" )
128
- expect ( res . setHeader ) . toHaveBeenCalledWith ( "Set-Cookie" , "nextSession=testId; Path=/; HttpOnly; SameSite=Strict" ) ;
129
- } ) ;
130
-
131
- test ( "Deleter" , async ( ) => {
132
- const { res } = getMocks ( ) ;
133
- const handler = createCookieHandler ( ) ;
134
-
135
- res . setHeader = jest . fn ( ) ;
136
- await handler . destroy ( res )
137
- expect ( res . setHeader ) . toHaveBeenCalledWith ( "Set-Cookie" , "nextSession=; Path=/; Expires=Thu, 01 Jan 1970 00:00:00 GMT; HttpOnly; SameSite=Strict" ) ;
138
- } ) ;
139
- } ) ;
140
-
141
51
describe ( "externals" , ( ) => {
142
-
143
52
describe ( "getSessionId" , ( ) => {
144
53
it ( "Returns fresh id, creates cookie, if requested" , async ( ) => {
145
54
const { req, res, context, sessionStore, cookieHandler } = getMocks ( ) ;
@@ -286,6 +195,9 @@ describe("externals", () => {
286
195
expect ( await validateCSRFToken ( context , token ) ) . toBe ( true ) ;
287
196
expect ( await validateCSRFToken ( req , res , token ) ) . toBe ( false ) ;
288
197
expect ( await sessionStore . get ( "uuid" ) ) . toMatchObject ( { } ) ;
198
+
199
+ const token2 = await getCSRFToken ( req , res ) ;
200
+ expect ( token === token2 ) . toBe ( false ) ;
289
201
} ) ;
290
202
} ) ;
291
203
} ) ;
0 commit comments