Skip to content

Commit 04081e9

Browse files
committed
refactor cookies.js
1 parent cd4f73e commit 04081e9

1 file changed

Lines changed: 84 additions & 76 deletions

File tree

test/fetch/cookies.js

Lines changed: 84 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -2,110 +2,118 @@
22

33
const { once } = require('node:events')
44
const { createServer } = require('node:http')
5-
const { test } = require('node:test')
5+
const { test, describe, before, after } = require('node:test')
66
const assert = require('node:assert')
7+
const { stringify: qsStringify } = require('node:querystring')
78
const { tspl } = require('@matteo.collina/tspl')
89
const { Client, fetch, Headers } = require('../..')
9-
const { closeServerAsPromise } = require('../utils/node-http')
1010
const pem = require('@metcoder95/https-pem')
1111
const { createSecureServer } = require('node:http2')
1212
const { closeClientAndServerAsPromise } = require('../utils/node-http')
1313

14-
test('Can receive set-cookie headers from a server using fetch - issue #1262', async (t) => {
15-
const server = createServer({ joinDuplicateHeaders: true }, (req, res) => {
16-
res.setHeader('set-cookie', 'name=value; Domain=example.com')
17-
res.end()
18-
}).listen(0)
14+
describe('cookies', () => {
15+
let server
1916

20-
t.after(closeServerAsPromise(server))
21-
await once(server, 'listening')
22-
23-
const response = await fetch(`http://localhost:${server.address().port}`)
24-
25-
assert.strictEqual(response.headers.get('set-cookie'), 'name=value; Domain=example.com')
17+
before(() => {
18+
server = createServer({ joinDuplicateHeaders: true }, (req, res) => {
19+
const searchParams = new URL(req.url, 'http://localhost').searchParams
20+
if (searchParams.has('set-cookie')) {
21+
res.setHeader('set-cookie', searchParams.get('set-cookie'))
22+
}
23+
res.end(req.headers.cookie)
24+
})
2625

27-
const response2 = await fetch(`http://localhost:${server.address().port}`, {
28-
credentials: 'include'
26+
return once(server.listen(0), 'listening')
2927
})
3028

31-
assert.strictEqual(response2.headers.get('set-cookie'), 'name=value; Domain=example.com')
32-
})
33-
34-
test('Can send cookies to a server with fetch - issue #1463', async (t) => {
35-
const server = createServer({ joinDuplicateHeaders: true }, (req, res) => {
36-
assert.strictEqual(req.headers.cookie, 'value')
37-
res.end()
38-
}).listen(0)
29+
after(() => {
30+
server.close()
31+
return once(server, 'close')
32+
})
3933

40-
t.after(closeServerAsPromise(server))
41-
await once(server, 'listening')
34+
test('Can receive set-cookie headers from a server using fetch - issue #1262', async (t) => {
35+
t = tspl(t, { plan: 2 })
4236

43-
const headersInit = [
44-
new Headers([['cookie', 'value']]),
45-
{ cookie: 'value' },
46-
[['cookie', 'value']]
47-
]
37+
const query = qsStringify({
38+
'set-cookie': 'name=value; Domain=example.com'
39+
})
40+
const response = await fetch(`http://localhost:${server.address().port}?${query}`)
4841

49-
for (const headers of headersInit) {
50-
await fetch(`http://localhost:${server.address().port}`, { headers })
51-
}
52-
})
42+
t.strictEqual(response.headers.get('set-cookie'), 'name=value; Domain=example.com')
5343

54-
test('Cookie header is delimited with a semicolon rather than a comma - issue #1905', async (t) => {
55-
const { strictEqual } = tspl(t, { plan: 1 })
44+
const response2 = await fetch(`http://localhost:${server.address().port}?${query}`, {
45+
credentials: 'include'
46+
})
5647

57-
const server = createServer({ joinDuplicateHeaders: true }, (req, res) => {
58-
strictEqual(req.headers.cookie, 'FOO=lorem-ipsum-dolor-sit-amet; BAR=the-quick-brown-fox')
59-
res.end()
60-
}).listen(0)
48+
t.strictEqual(response2.headers.get('set-cookie'), 'name=value; Domain=example.com')
49+
})
6150

62-
t.after(closeServerAsPromise(server))
63-
await once(server, 'listening')
51+
test('Can send cookies to a server with fetch - issue #1463', async (t) => {
52+
t = tspl(t, { plan: 3 })
6453

65-
await fetch(`http://localhost:${server.address().port}`, {
66-
headers: [
67-
['cookie', 'FOO=lorem-ipsum-dolor-sit-amet'],
68-
['cookie', 'BAR=the-quick-brown-fox']
54+
const headersInit = [
55+
new Headers([['cookie', 'value']]),
56+
{ cookie: 'value' },
57+
[['cookie', 'value']]
6958
]
59+
60+
for (const headers of headersInit) {
61+
const response = await fetch(`http://localhost:${server.address().port}`, { headers })
62+
const text = await response.text()
63+
t.strictEqual(text, 'value')
64+
}
7065
})
71-
})
7266

73-
test('Can receive set-cookie headers from a http2 server using fetch - issue #2885', async (t) => {
74-
const server = createSecureServer(pem)
75-
server.on('stream', async (stream, headers) => {
76-
stream.respond({
77-
'content-type': 'text/plain; charset=utf-8',
78-
'x-method': headers[':method'],
79-
'set-cookie': 'Space=Cat; Secure; HttpOnly',
80-
':status': 200
67+
test('Cookie header is delimited with a semicolon rather than a comma - issue #1905', async (t) => {
68+
t = tspl(t, { plan: 1 })
69+
70+
const response = await fetch(`http://localhost:${server.address().port}`, {
71+
headers: [
72+
['cookie', 'FOO=lorem-ipsum-dolor-sit-amet'],
73+
['cookie', 'BAR=the-quick-brown-fox']
74+
]
8175
})
8276

83-
stream.end('test')
77+
t.strictEqual(await response.text(), 'FOO=lorem-ipsum-dolor-sit-amet; BAR=the-quick-brown-fox')
8478
})
8579

86-
server.listen()
87-
await once(server, 'listening')
80+
test('Can receive set-cookie headers from a http2 server using fetch - issue #2885', async (t) => {
81+
const server = createSecureServer(pem)
82+
server.on('stream', async (stream, headers) => {
83+
stream.respond({
84+
'content-type': 'text/plain; charset=utf-8',
85+
'x-method': headers[':method'],
86+
'set-cookie': 'Space=Cat; Secure; HttpOnly',
87+
':status': 200
88+
})
89+
90+
stream.end('test')
91+
})
92+
93+
server.listen(0)
94+
await once(server, 'listening')
8895

89-
const client = new Client(`https://localhost:${server.address().port}`, {
90-
connect: {
91-
rejectUnauthorized: false
92-
},
93-
allowH2: true
94-
})
96+
const client = new Client(`https://localhost:${server.address().port}`, {
97+
connect: {
98+
rejectUnauthorized: false
99+
},
100+
allowH2: true
101+
})
95102

96-
const response = await fetch(
97-
`https://localhost:${server.address().port}/`,
98-
// Needs to be passed to disable the reject unauthorized
99-
{
100-
method: 'GET',
101-
dispatcher: client,
102-
headers: {
103-
'content-type': 'text-plain'
103+
const response = await fetch(
104+
`https://localhost:${server.address().port}/`,
105+
// Needs to be passed to disable the reject unauthorized
106+
{
107+
method: 'GET',
108+
dispatcher: client,
109+
headers: {
110+
'content-type': 'text-plain'
111+
}
104112
}
105-
}
106-
)
113+
)
107114

108-
t.after(closeClientAndServerAsPromise(client, server))
115+
t.after(closeClientAndServerAsPromise(client, server))
109116

110-
assert.deepStrictEqual(response.headers.getSetCookie(), ['Space=Cat; Secure; HttpOnly'])
117+
assert.deepStrictEqual(response.headers.getSetCookie(), ['Space=Cat; Secure; HttpOnly'])
118+
})
111119
})

0 commit comments

Comments
 (0)