Skip to content

Commit d48e2a4

Browse files
committed
test: add logout callback cookie-clearing test
1 parent 5349db3 commit d48e2a4

1 file changed

Lines changed: 49 additions & 0 deletions

File tree

test/app.spec.ts

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,52 @@ test('app returns 200', async ({ page }) => {
44
const response = await page.goto('/');
55
expect(response?.status()).toBe(200);
66
});
7+
8+
test('GET /auth/logout/callback clears authjs.* and logout_state', async ({
9+
request,
10+
baseURL,
11+
}) => {
12+
const res = await request.get(
13+
`${baseURL}/auth/logout/callback?state=teststate123`,
14+
{
15+
headers: {
16+
Cookie: [
17+
'logout_state=teststate123',
18+
'authjs.session-token=fakesession',
19+
'authjs.csrf-token=fakecsrf',
20+
'authjs.callback-url=http://example.com',
21+
].join('; '),
22+
},
23+
maxRedirects: 0,
24+
},
25+
);
26+
27+
const status = res.status();
28+
const location = res.headers()['location'];
29+
const setCookies = res
30+
.headersArray()
31+
.filter((h) => h.name.toLowerCase() === 'set-cookie')
32+
.map((h) => h.value) as string[];
33+
34+
expect(status).toBe(302);
35+
expect(location).toMatch(/\/(auth\/)?logout\/success$/);
36+
expect(setCookies).toBeDefined();
37+
expect(Array.isArray(setCookies)).toBe(true);
38+
39+
const wasCleared = (name: string) =>
40+
setCookies.some(
41+
(sc) =>
42+
sc.startsWith(`${name}=`) &&
43+
(sc.includes('Max-Age=0') || /Expires=Thu, 01 Jan 1970/i.test(sc)),
44+
);
45+
46+
expect(wasCleared('authjs.session-token')).toBe(true);
47+
expect(wasCleared('authjs.csrf-token')).toBe(true);
48+
expect(wasCleared('authjs.callback-url')).toBe(true);
49+
expect(wasCleared('logout_state')).toBe(true);
50+
51+
const logoutStateCookie = setCookies.find((sc) =>
52+
sc.startsWith('logout_state='),
53+
);
54+
expect(logoutStateCookie).toMatch(/Path=\/auth\/logout\/callback/);
55+
});

0 commit comments

Comments
 (0)