@@ -21,7 +21,7 @@ import {
2121 getDraftData ,
2222} from "../../src/draft"
2323import { resetNextHeaders } from "../__mocks__/next/headers"
24- import type { ResponseCookie } from "next/dist/compiled/@edge-runtime/cookies"
24+ import { ResponseCookie } from "next/dist/compiled/@edge-runtime/cookies"
2525
2626jest . mock ( "next/headers" )
2727jest . mock ( "next/navigation" , ( ) => ( {
@@ -51,6 +51,7 @@ describe("enableDraftMode()", () => {
5151 `https://example.com/api/draft?${ searchParams } `
5252 )
5353 const drupal = new NextDrupalBase ( BASE_URL )
54+
5455 const draftModeCookie : ResponseCookie = {
5556 name : DRAFT_MODE_COOKIE_NAME ,
5657 value : "some-secret-key" ,
@@ -62,7 +63,8 @@ describe("enableDraftMode()", () => {
6263
6364 const response = await enableDraftMode ( request , drupal )
6465
65- expect ( draftMode ( ) . enable ) . not . toHaveBeenCalled ( )
66+ const draft = await draftMode ( )
67+ expect ( draft . enable ) . not . toHaveBeenCalled ( )
6668 expect ( response ) . toBeInstanceOf ( Response )
6769 expect ( response . status ) . toBe ( 500 )
6870 } )
@@ -71,31 +73,35 @@ describe("enableDraftMode()", () => {
7173 spyOnFetch ( { responseBody : validationPayload } )
7274
7375 await enableDraftMode ( request , drupal )
74-
75- expect ( draftMode ( ) . enable ) . toHaveBeenCalled ( )
76+ const draft = await draftMode ( )
77+ expect ( draft . enable ) . toHaveBeenCalled ( )
7678 } )
7779
7880 test ( "updates draft mode cookie’s sameSite flag" , async ( ) => {
7981 spyOnFetch ( { responseBody : validationPayload } )
8082
83+ const cookieStore = await cookies ( )
8184 // Our mock draftMode().enable does not set a cookie, so we set one.
82- cookies ( ) . set ( draftModeCookie )
83- expect ( cookies ( ) . get ( DRAFT_MODE_COOKIE_NAME ) . sameSite ) . toBe ( "lax" )
84- expect ( cookies ( ) . get ( DRAFT_MODE_COOKIE_NAME ) . secure ) . toBeFalsy ( )
85+ cookieStore . set ( draftModeCookie )
86+
87+ expect ( cookieStore . get ( DRAFT_MODE_COOKIE_NAME ) . sameSite ) . toBe ( "lax" )
88+ expect ( cookieStore . get ( DRAFT_MODE_COOKIE_NAME ) . secure ) . toBeFalsy ( )
8589
8690 await enableDraftMode ( request , drupal )
8791
88- expect ( cookies ( ) . get ( DRAFT_MODE_COOKIE_NAME ) . sameSite ) . toBe ( "none" )
89- expect ( cookies ( ) . get ( DRAFT_MODE_COOKIE_NAME ) . secure ) . toBe ( true )
92+ expect ( cookieStore . get ( DRAFT_MODE_COOKIE_NAME ) . sameSite ) . toBe ( "none" )
93+ expect ( cookieStore . get ( DRAFT_MODE_COOKIE_NAME ) . secure ) . toBe ( true )
9094 } )
9195
9296 test ( "sets a draft data cookie" , async ( ) => {
9397 spyOnFetch ( { responseBody : validationPayload } )
94- expect ( cookies ( ) . get ( DRAFT_DATA_COOKIE_NAME ) ) . toBe ( undefined )
98+ const cookieStore = await cookies ( )
99+
100+ expect ( cookieStore . get ( DRAFT_DATA_COOKIE_NAME ) ) . toBe ( undefined )
95101
96102 await enableDraftMode ( request , drupal )
97103
98- const cookie = cookies ( ) . get ( DRAFT_DATA_COOKIE_NAME )
104+ const cookie = cookieStore . get ( DRAFT_DATA_COOKIE_NAME )
99105 // eslint-disable-next-line @typescript-eslint/no-unused-vars
100106 const { secret, plugin, ...data } = Object . fromEntries (
101107 searchParams . entries ( )
@@ -118,25 +124,31 @@ describe("enableDraftMode()", () => {
118124} )
119125
120126describe ( "disableDraftMode()" , ( ) => {
121- test ( "draft data cookie was deleted" , ( ) => {
122- disableDraftMode ( )
123-
124- expect ( cookies ) . toHaveBeenCalledTimes ( 1 )
125- expect ( cookies ( ) . delete ) . toHaveBeenCalledWith ( DRAFT_DATA_COOKIE_NAME )
127+ test ( "draft data cookie was deleted" , async ( ) => {
128+ const cookieStore = await cookies ( )
129+ await disableDraftMode ( )
130+ expect ( cookies ) . toHaveBeenCalledTimes ( 2 )
131+ expect ( cookieStore . delete ) . toHaveBeenCalledWith ( DRAFT_DATA_COOKIE_NAME )
126132 } )
127133
128- test ( "draft mode was disabled" , ( ) => {
129- // First ensure draft mode is enabled.
130- draftMode ( ) . enable ( )
131- expect ( draftMode ( ) . isEnabled ) . toBe ( true )
134+ test ( "draft mode was disabled" , async ( ) => {
135+ let draft = await draftMode ( )
136+ draft . enable ( )
132137
133- disableDraftMode ( )
134- expect ( draftMode ( ) . disable ) . toHaveBeenCalledTimes ( 1 )
135- expect ( draftMode ( ) . isEnabled ) . toBe ( false )
138+ // Re-assign draftMode because local variable is not updated
139+ draft = await draftMode ( )
140+ expect ( draft . isEnabled ) . toBe ( true )
141+
142+ await disableDraftMode ( )
143+ expect ( draft . disable ) . toHaveBeenCalledTimes ( 1 )
144+
145+ // Re-assign draftMode because local variable is not updated
146+ draft = await draftMode ( )
147+ expect ( draft . isEnabled ) . toBe ( false )
136148 } )
137149
138150 test ( "returns a response object" , async ( ) => {
139- const response = disableDraftMode ( )
151+ const response = await disableDraftMode ( )
140152
141153 expect ( response ) . toBeInstanceOf ( Response )
142154 expect ( response . ok ) . toBe ( true )
@@ -156,51 +168,65 @@ describe("getDraftData()", () => {
156168 secure : true ,
157169 }
158170
159- test ( "returns empty object if draft mode disabled" , ( ) => {
160- cookies ( ) . set ( draftDataCookie )
171+ test ( "returns empty object if draft mode disabled" , async ( ) => {
172+ const cookieStore = await cookies ( )
173+ const draft = await draftMode ( )
174+ cookieStore . set ( draftDataCookie )
161175
162- const data = getDraftData ( )
163- expect ( draftMode ( ) . isEnabled ) . toBe ( false )
164- expect ( cookies ( ) . has ) . toHaveBeenCalledTimes ( 0 )
165- expect ( cookies ( ) . get ) . toHaveBeenCalledTimes ( 0 )
176+ const data = await getDraftData ( )
177+ expect ( draft . isEnabled ) . toBe ( false )
178+ expect ( cookieStore . has ) . toHaveBeenCalledTimes ( 0 )
179+ expect ( cookieStore . get ) . toHaveBeenCalledTimes ( 0 )
166180 expect ( data ) . toMatchObject ( { } )
167181 } )
168182
169- test ( "returns empty object if no draft data cookie" , ( ) => {
170- draftMode ( ) . enable ( )
183+ test ( "returns empty object if no draft data cookie" , async ( ) => {
184+ let draft = await draftMode ( )
185+ const cookieStore = await cookies ( )
186+ draft . enable ( )
171187 draftMode . mockClear ( )
172188
173- const data = getDraftData ( )
189+ const data = await getDraftData ( )
174190 expect ( draftMode ) . toHaveBeenCalledTimes ( 1 )
175- expect ( draftMode ( ) . isEnabled ) . toBe ( true )
176- expect ( cookies ( ) . has ) . toHaveBeenCalledWith ( DRAFT_DATA_COOKIE_NAME )
177- expect ( cookies ( ) . has ) . toHaveBeenCalledTimes ( 1 )
178- expect ( cookies ( ) . get ) . toHaveBeenCalledTimes ( 0 )
191+ // Re-assign draftMode because local variable is not updated
192+ draft = await draftMode ( )
193+ expect ( draft . isEnabled ) . toBe ( true )
194+ expect ( cookieStore . has ) . toHaveBeenCalledWith ( DRAFT_DATA_COOKIE_NAME )
195+ expect ( cookieStore . has ) . toHaveBeenCalledTimes ( 1 )
196+ expect ( cookieStore . get ) . toHaveBeenCalledTimes ( 0 )
179197 expect ( data ) . toMatchObject ( { } )
180198 } )
181199
182- test ( "returns empty object if no draft data cookie value" , ( ) => {
183- cookies ( ) . set ( {
200+ test ( "returns empty object if no draft data cookie value" , async ( ) => {
201+ let draft = await draftMode ( )
202+ const cookieStore = await cookies ( )
203+
204+ cookieStore . set ( {
184205 ...draftDataCookie ,
185206 value : "" ,
186207 } )
187- draftMode ( ) . enable ( )
208+ draft . enable ( )
188209 draftMode . mockClear ( )
189210
190- const data = getDraftData ( )
211+ const data = await getDraftData ( )
191212 expect ( draftMode ) . toHaveBeenCalledTimes ( 1 )
192- expect ( draftMode ( ) . isEnabled ) . toBe ( true )
193- expect ( cookies ( ) . has ) . toHaveBeenCalledWith ( DRAFT_DATA_COOKIE_NAME )
194- expect ( cookies ( ) . has ) . toHaveBeenCalledTimes ( 1 )
195- expect ( cookies ( ) . get ) . toHaveBeenCalledWith ( DRAFT_DATA_COOKIE_NAME )
196- expect ( cookies ( ) . get ) . toHaveBeenCalledTimes ( 1 )
213+ // Re-assign draftMode because local variable is not updated
214+ draft = await draftMode ( )
215+ expect ( draft . isEnabled ) . toBe ( true )
216+ expect ( cookieStore . has ) . toHaveBeenCalledWith ( DRAFT_DATA_COOKIE_NAME )
217+ expect ( cookieStore . has ) . toHaveBeenCalledTimes ( 1 )
218+ expect ( cookieStore . get ) . toHaveBeenCalledWith ( DRAFT_DATA_COOKIE_NAME )
219+ expect ( cookieStore . get ) . toHaveBeenCalledTimes ( 1 )
197220 expect ( data ) . toMatchObject ( { } )
198221 } )
199222
200- test ( "returns the JSON.parse()d data" , ( ) => {
201- cookies ( ) . set ( draftDataCookie )
202- draftMode ( ) . enable ( )
223+ test ( "returns the JSON.parse()d data" , async ( ) => {
224+ const draft = await draftMode ( )
225+ const cookieStore = await cookies ( )
226+
227+ cookieStore . set ( draftDataCookie )
228+ draft . enable ( )
203229
204- expect ( getDraftData ( ) ) . toMatchObject ( draftData )
230+ expect ( await getDraftData ( ) ) . toMatchObject ( draftData )
205231 } )
206232} )
0 commit comments