Skip to content

Commit 0ef82ca

Browse files
committed
test: ensure cookies are set when redirecting
1 parent a7f6af1 commit 0ef82ca

File tree

3 files changed

+51
-0
lines changed

3 files changed

+51
-0
lines changed

test/e2e/app-dir/actions/app-action.test.ts

+21
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,27 @@ describe('app-dir action handling', () => {
175175
})
176176
})
177177

178+
it.each([
179+
{ description: 'with javascript', disableJavaScript: false },
180+
{ description: 'no javascript', disableJavaScript: true },
181+
])(
182+
'should support setting cookies when redirecting ($description)',
183+
async ({ disableJavaScript }) => {
184+
const browser = await next.browser('/mutate-cookie-with-redirect', {
185+
disableJavaScript,
186+
})
187+
expect(await browser.elementByCss('#value').text()).toBe('')
188+
189+
await browser.elementByCss('#update-cookie').click()
190+
await browser.elementByCss('#redirect-target')
191+
192+
expect(await browser.elementByCss('#value').text()).toMatch(/\d+/)
193+
expect(await browser.eval('document.cookie')).toMatch(
194+
/(?:^|(?:; ))testCookie=\d+/
195+
)
196+
}
197+
)
198+
178199
it('should push new route when redirecting', async () => {
179200
const browser = await next.browser('/header')
180201

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import { cookies } from 'next/headers'
2+
import { redirect } from 'next/navigation'
3+
4+
async function updateCookieAndRedirect() {
5+
'use server'
6+
;(await cookies()).set('testCookie', Date.now())
7+
redirect('/mutate-cookie-with-redirect/redirect-target')
8+
}
9+
10+
export default async function Page() {
11+
return (
12+
<>
13+
<p id="value">{(await cookies()).get('testCookie')?.value ?? null}</p>
14+
<form action={updateCookieAndRedirect}>
15+
<button id="update-cookie" type="submit">
16+
Update Cookie
17+
</button>
18+
</form>
19+
</>
20+
)
21+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { cookies } from 'next/headers'
2+
3+
export default async function Page() {
4+
return (
5+
<div id="redirect-target">
6+
<p id="value">{(await cookies()).get('testCookie')?.value ?? null}</p>
7+
</div>
8+
)
9+
}

0 commit comments

Comments
 (0)