Files
msw/test/node/rest-api/cookies-inheritance.node.test.ts

77 lines
1.8 KiB
TypeScript

/**
* @vitest-environment jsdom
*/
import { HttpResponse, http } from 'msw'
import { setupServer, type SetupServer } from 'msw/node'
import { HttpServer } from '@open-draft/test-server/http'
import type { RequestHandler as ExpressRequestHandler } from 'express'
let server: SetupServer
const httpServer = new HttpServer((app) => {
const handler: ExpressRequestHandler = (req, res) => {
res.status(500).end()
}
app.post('/login', handler)
app.get('/user', handler)
})
beforeAll(async () => {
await httpServer.listen()
server = setupServer(
http.post(httpServer.https.url('/login'), () => {
return new HttpResponse(null, {
headers: {
'Set-Cookie': `authToken=${encodeURIComponent('abc-123-甲乙丙')}`,
},
})
}),
http.get<
never,
never,
{ firstName: string; lastName: string } | { error: string }
>(httpServer.https.url('/user'), ({ cookies }) => {
if (cookies.authToken == null) {
return HttpResponse.json(
{
error: 'Auth token not found',
},
{ status: 403 },
)
}
return HttpResponse.json({
firstName: 'John',
lastName: 'Maverick',
})
}),
)
server.listen()
})
afterAll(async () => {
server.close()
await httpServer.close()
})
test('inherits cookies set from a preceding request', async () => {
const res = await fetch(httpServer.https.url('/login'), {
method: 'POST',
}).then(() => {
// Fetch the user after requesting login to see
// if the response cookies set in the login request handler
// are automatically forwarded to the "GET /user" request.
return fetch(httpServer.https.url('/user'))
})
expect(res.status).toBe(200)
const json = await res.json()
expect(json).toEqual({
firstName: 'John',
lastName: 'Maverick',
})
})