fastify 5.0.0 → 5.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (201) hide show
  1. package/.borp.yaml +3 -0
  2. package/.vscode/settings.json +22 -0
  3. package/README.md +12 -7
  4. package/docs/Guides/Database.md +15 -15
  5. package/docs/Guides/Detecting-When-Clients-Abort.md +28 -28
  6. package/docs/Guides/Ecosystem.md +14 -15
  7. package/docs/Guides/Index.md +1 -1
  8. package/docs/Guides/Migration-Guide-V4.md +11 -11
  9. package/docs/Guides/Migration-Guide-V5.md +133 -9
  10. package/docs/Guides/Plugins-Guide.md +1 -1
  11. package/docs/Guides/Prototype-Poisoning.md +3 -3
  12. package/docs/Guides/Recommendations.md +9 -9
  13. package/docs/Guides/Serverless.md +5 -5
  14. package/docs/Guides/Testing.md +58 -57
  15. package/docs/Guides/Write-Plugin.md +2 -2
  16. package/docs/Guides/Write-Type-Provider.md +3 -3
  17. package/docs/Reference/ContentTypeParser.md +4 -4
  18. package/docs/Reference/Decorators.md +2 -2
  19. package/docs/Reference/Errors.md +3 -3
  20. package/docs/Reference/Hooks.md +7 -7
  21. package/docs/Reference/LTS.md +8 -0
  22. package/docs/Reference/Logging.md +5 -4
  23. package/docs/Reference/Reply.md +55 -58
  24. package/docs/Reference/Request.md +49 -42
  25. package/docs/Reference/Routes.md +16 -13
  26. package/docs/Reference/Server.md +32 -28
  27. package/docs/Reference/TypeScript.md +9 -9
  28. package/docs/Reference/Validation-and-Serialization.md +5 -5
  29. package/examples/typescript-server.ts +1 -1
  30. package/fastify.d.ts +14 -5
  31. package/fastify.js +8 -6
  32. package/lib/contentTypeParser.js +9 -7
  33. package/lib/context.js +1 -2
  34. package/lib/error-handler.js +9 -9
  35. package/lib/errors.js +1 -1
  36. package/lib/fourOhFour.js +1 -1
  37. package/lib/hooks.js +4 -1
  38. package/lib/{logger.js → logger-factory.js} +70 -122
  39. package/lib/logger-pino.js +68 -0
  40. package/lib/pluginOverride.js +1 -1
  41. package/lib/pluginUtils.js +2 -2
  42. package/lib/reply.js +4 -5
  43. package/lib/request.js +16 -9
  44. package/lib/route.js +23 -22
  45. package/lib/validation.js +2 -2
  46. package/package.json +13 -15
  47. package/test/404s.test.js +675 -629
  48. package/test/500s.test.js +72 -63
  49. package/test/{allowUnsafeRegex.test.js → allow-unsafe-regex.test.js} +30 -26
  50. package/test/als.test.js +48 -45
  51. package/test/async-await.test.js +148 -134
  52. package/test/async-dispose.test.js +4 -5
  53. package/test/async_hooks.test.js +30 -28
  54. package/test/{bodyLimit.test.js → body-limit.test.js} +61 -58
  55. package/test/buffer.test.js +9 -10
  56. package/test/build/error-serializer.test.js +3 -4
  57. package/test/build/version.test.js +2 -3
  58. package/test/build-certificate.js +1 -1
  59. package/test/bundler/README.md +5 -5
  60. package/test/bundler/esbuild/bundler-test.js +10 -9
  61. package/test/bundler/webpack/bundler-test.js +10 -9
  62. package/test/case-insensitive.test.js +31 -28
  63. package/test/chainable.test.js +4 -5
  64. package/test/check.test.js +8 -10
  65. package/test/{childLoggerFactory.test.js → child-logger-factory.test.js} +56 -19
  66. package/test/client-timeout.test.js +5 -5
  67. package/test/close-pipelining.test.js +6 -8
  68. package/test/conditional-pino.test.js +47 -0
  69. package/test/{connectionTimeout.test.js → connection-timeout.test.js} +10 -11
  70. package/test/constrained-routes.test.js +243 -236
  71. package/test/content-length.test.js +53 -68
  72. package/test/content-parser.test.js +186 -158
  73. package/test/content-type.test.js +8 -9
  74. package/test/context-config.test.js +44 -54
  75. package/test/custom-http-server.test.js +16 -20
  76. package/test/custom-parser.5.test.js +32 -32
  77. package/test/diagnostics-channel/404.test.js +15 -15
  78. package/test/diagnostics-channel/async-delay-request.test.js +25 -25
  79. package/test/diagnostics-channel/async-request.test.js +24 -24
  80. package/test/diagnostics-channel/error-before-handler.test.js +4 -5
  81. package/test/diagnostics-channel/error-request.test.js +19 -19
  82. package/test/diagnostics-channel/error-status.test.js +8 -8
  83. package/test/diagnostics-channel/init.test.js +6 -7
  84. package/test/diagnostics-channel/sync-delay-request.test.js +16 -16
  85. package/test/diagnostics-channel/sync-request-reply.test.js +16 -16
  86. package/test/diagnostics-channel/sync-request.test.js +19 -19
  87. package/test/encapsulated-child-logger-factory.test.js +8 -8
  88. package/test/encapsulated-error-handler.test.js +20 -20
  89. package/test/esm/errorCodes.test.mjs +5 -5
  90. package/test/esm/esm.test.mjs +3 -3
  91. package/test/esm/named-exports.mjs +3 -3
  92. package/test/esm/other.mjs +2 -2
  93. package/test/fastify-instance.test.js +33 -34
  94. package/test/{findRoute.test.js → find-route.test.js} +11 -10
  95. package/test/fluent-schema.test.js +33 -36
  96. package/test/handler-context.test.js +11 -11
  97. package/test/has-route.test.js +12 -15
  98. package/test/header-overflow.test.js +13 -12
  99. package/test/hooks.on-ready.test.js +2 -2
  100. package/test/hooks.test.js +25 -25
  101. package/test/http-methods/copy.test.js +22 -24
  102. package/test/http-methods/custom-http-methods.test.js +24 -21
  103. package/test/http-methods/get.test.js +97 -84
  104. package/test/http-methods/head.test.js +63 -57
  105. package/test/http-methods/lock.test.js +21 -20
  106. package/test/http-methods/mkcalendar.test.js +31 -27
  107. package/test/http-methods/mkcol.test.js +10 -10
  108. package/test/http-methods/move.test.js +11 -11
  109. package/test/http-methods/propfind.test.js +32 -27
  110. package/test/http-methods/proppatch.test.js +21 -19
  111. package/test/http-methods/report.test.js +32 -27
  112. package/test/http-methods/search.test.js +52 -47
  113. package/test/http-methods/trace.test.js +3 -4
  114. package/test/http-methods/unlock.test.js +10 -10
  115. package/test/http2/closing.test.js +50 -58
  116. package/test/http2/constraint.test.js +47 -50
  117. package/test/http2/head.test.js +18 -19
  118. package/test/http2/missing-http2-module.test.js +4 -5
  119. package/test/http2/plain.test.js +31 -31
  120. package/test/http2/secure-with-fallback.test.js +61 -61
  121. package/test/http2/secure.test.js +28 -31
  122. package/test/http2/unknown-http-method.test.js +13 -14
  123. package/test/https/custom-https-server.test.js +6 -7
  124. package/test/https/https.test.js +78 -78
  125. package/test/imports.test.js +5 -6
  126. package/test/internals/all.test.js +8 -11
  127. package/test/internals/{contentTypeParser.test.js → content-type-parser.test.js} +5 -6
  128. package/test/internals/context.test.js +9 -11
  129. package/test/internals/decorator.test.js +20 -21
  130. package/test/internals/errors.test.js +427 -427
  131. package/test/internals/{handleRequest.test.js → handle-request.test.js} +53 -42
  132. package/test/internals/{hookRunner.test.js → hook-runner.test.js} +99 -100
  133. package/test/internals/hooks.test.js +31 -35
  134. package/test/internals/{initialConfig.test.js → initial-config.test.js} +92 -80
  135. package/test/internals/logger.test.js +28 -28
  136. package/test/internals/plugin.test.js +17 -18
  137. package/test/internals/reply-serialize.test.js +106 -106
  138. package/test/internals/reply.test.js +620 -585
  139. package/test/internals/{reqIdGenFactory.test.js → req-id-gen-factory.test.js} +31 -31
  140. package/test/internals/request-validate.test.js +218 -221
  141. package/test/internals/request.test.js +225 -107
  142. package/test/internals/server.test.js +15 -12
  143. package/test/internals/validation.test.js +35 -36
  144. package/test/{keepAliveTimeout.test.js → keep-alive-timeout.test.js} +9 -10
  145. package/test/listen.5.test.js +9 -9
  146. package/test/{maxRequestsPerSocket.test.js → max-requests-per-socket.test.js} +30 -30
  147. package/test/middleware.test.js +4 -5
  148. package/test/noop-set.test.js +5 -5
  149. package/test/post-empty-body.test.js +18 -11
  150. package/test/pretty-print.test.js +59 -49
  151. package/test/proto-poisoning.test.js +42 -37
  152. package/test/reply-code.test.js +34 -32
  153. package/test/{reply-earlyHints.test.js → reply-early-hints.test.js} +21 -19
  154. package/test/request-error.test.js +122 -0
  155. package/test/request-header-host.test.js +339 -0
  156. package/test/request-id.test.js +31 -25
  157. package/test/{requestTimeout.test.js → request-timeout.test.js} +11 -11
  158. package/test/route.1.test.js +79 -72
  159. package/test/route.2.test.js +17 -16
  160. package/test/route.3.test.js +32 -27
  161. package/test/route.4.test.js +21 -25
  162. package/test/route.5.test.js +45 -64
  163. package/test/route.6.test.js +70 -89
  164. package/test/route.7.test.js +61 -65
  165. package/test/route.8.test.js +80 -18
  166. package/test/router-options.test.js +80 -77
  167. package/test/same-shape.test.js +5 -5
  168. package/test/schema-examples.test.js +72 -38
  169. package/test/serialize-response.test.js +9 -10
  170. package/test/server.test.js +75 -78
  171. package/test/set-error-handler.test.js +2 -3
  172. package/test/stream-serializers.test.js +10 -7
  173. package/test/sync-routes.test.js +18 -18
  174. package/test/test-reporter.mjs +68 -0
  175. package/test/trust-proxy.test.js +51 -45
  176. package/test/type-provider.test.js +8 -6
  177. package/test/types/content-type-parser.test-d.ts +1 -1
  178. package/test/types/fastify.test-d.ts +16 -4
  179. package/test/types/hooks.test-d.ts +2 -1
  180. package/test/types/instance.test-d.ts +13 -13
  181. package/test/types/logger.test-d.ts +2 -2
  182. package/test/types/plugin.test-d.ts +17 -9
  183. package/test/types/register.test-d.ts +22 -6
  184. package/test/types/reply.test-d.ts +1 -1
  185. package/test/types/route.test-d.ts +34 -4
  186. package/test/types/serverFactory.test-d.ts +1 -1
  187. package/test/types/type-provider.test-d.ts +1 -1
  188. package/test/url-rewriting.test.js +35 -38
  189. package/test/{useSemicolonDelimiter.test.js → use-semicolon-delimiter.test.js} +30 -30
  190. package/test/validation-error-handling.test.js +259 -285
  191. package/test/versioned-routes.test.js +126 -113
  192. package/test/web-api.test.js +48 -37
  193. package/test/{wrapThenable.test.js → wrap-thenable.test.js} +10 -9
  194. package/types/hooks.d.ts +2 -1
  195. package/types/instance.d.ts +9 -2
  196. package/types/register.d.ts +12 -3
  197. package/types/reply.d.ts +1 -1
  198. package/types/request.d.ts +2 -6
  199. package/types/serverFactory.d.ts +3 -3
  200. package/types/utils.d.ts +13 -5
  201. package/test/types/import.js +0 -2
@@ -1,6 +1,6 @@
1
1
  'use strict'
2
2
 
3
- const { test, before } = require('tap')
3
+ const { test, before } = require('node:test')
4
4
  const helper = require('./helper')
5
5
  const Fastify = require('..')
6
6
  const sget = require('simple-get').concat
@@ -15,7 +15,7 @@ before(async function () {
15
15
  [localhost] = await helper.getLoopbackHost()
16
16
  })
17
17
 
18
- test('Should register a versioned route', t => {
18
+ test('Should register a versioned route (inject)', (t, done) => {
19
19
  t.plan(11)
20
20
  const fastify = Fastify()
21
21
 
@@ -35,9 +35,9 @@ test('Should register a versioned route', t => {
35
35
  'Accept-Version': '1.x'
36
36
  }
37
37
  }, (err, res) => {
38
- t.error(err)
39
- t.same(JSON.parse(res.payload), { hello: 'world' })
40
- t.equal(res.statusCode, 200)
38
+ t.assert.ifError(err)
39
+ t.assert.deepStrictEqual(JSON.parse(res.payload), { hello: 'world' })
40
+ t.assert.strictEqual(res.statusCode, 200)
41
41
  })
42
42
 
43
43
  fastify.inject({
@@ -47,9 +47,9 @@ test('Should register a versioned route', t => {
47
47
  'Accept-Version': '1.2.x'
48
48
  }
49
49
  }, (err, res) => {
50
- t.error(err)
51
- t.same(JSON.parse(res.payload), { hello: 'world' })
52
- t.equal(res.statusCode, 200)
50
+ t.assert.ifError(err)
51
+ t.assert.deepStrictEqual(JSON.parse(res.payload), { hello: 'world' })
52
+ t.assert.strictEqual(res.statusCode, 200)
53
53
  })
54
54
 
55
55
  fastify.inject({
@@ -59,9 +59,9 @@ test('Should register a versioned route', t => {
59
59
  'Accept-Version': '1.2.0'
60
60
  }
61
61
  }, (err, res) => {
62
- t.error(err)
63
- t.same(JSON.parse(res.payload), { hello: 'world' })
64
- t.equal(res.statusCode, 200)
62
+ t.assert.ifError(err)
63
+ t.assert.deepStrictEqual(JSON.parse(res.payload), { hello: 'world' })
64
+ t.assert.strictEqual(res.statusCode, 200)
65
65
  })
66
66
 
67
67
  fastify.inject({
@@ -71,12 +71,13 @@ test('Should register a versioned route', t => {
71
71
  'Accept-Version': '1.2.1'
72
72
  }
73
73
  }, (err, res) => {
74
- t.error(err)
75
- t.equal(res.statusCode, 404)
74
+ t.assert.ifError(err)
75
+ t.assert.strictEqual(res.statusCode, 404)
76
+ done()
76
77
  })
77
78
  })
78
79
 
79
- test('Should register a versioned route via route constraints', t => {
80
+ test('Should register a versioned route via route constraints', (t, done) => {
80
81
  t.plan(6)
81
82
  const fastify = Fastify()
82
83
 
@@ -96,9 +97,9 @@ test('Should register a versioned route via route constraints', t => {
96
97
  'Accept-Version': '1.x'
97
98
  }
98
99
  }, (err, res) => {
99
- t.error(err)
100
- t.same(JSON.parse(res.payload), { hello: 'world' })
101
- t.equal(res.statusCode, 200)
100
+ t.assert.ifError(err)
101
+ t.assert.deepStrictEqual(JSON.parse(res.payload), { hello: 'world' })
102
+ t.assert.strictEqual(res.statusCode, 200)
102
103
  })
103
104
 
104
105
  fastify.inject({
@@ -108,13 +109,14 @@ test('Should register a versioned route via route constraints', t => {
108
109
  'Accept-Version': '1.2.x'
109
110
  }
110
111
  }, (err, res) => {
111
- t.error(err)
112
- t.same(JSON.parse(res.payload), { hello: 'world' })
113
- t.equal(res.statusCode, 200)
112
+ t.assert.ifError(err)
113
+ t.assert.deepStrictEqual(JSON.parse(res.payload), { hello: 'world' })
114
+ t.assert.strictEqual(res.statusCode, 200)
115
+ done()
114
116
  })
115
117
  })
116
118
 
117
- test('Should register the same route with different versions', t => {
119
+ test('Should register the same route with different versions', (t, done) => {
118
120
  t.plan(8)
119
121
  const fastify = Fastify()
120
122
 
@@ -143,9 +145,9 @@ test('Should register the same route with different versions', t => {
143
145
  'Accept-Version': '1.x'
144
146
  }
145
147
  }, (err, res) => {
146
- t.error(err)
147
- t.equal(res.statusCode, 200)
148
- t.equal(res.payload, '1.3.0')
148
+ t.assert.ifError(err)
149
+ t.assert.strictEqual(res.statusCode, 200)
150
+ t.assert.strictEqual(res.payload, '1.3.0')
149
151
  })
150
152
 
151
153
  fastify.inject({
@@ -155,9 +157,9 @@ test('Should register the same route with different versions', t => {
155
157
  'Accept-Version': '1.2.x'
156
158
  }
157
159
  }, (err, res) => {
158
- t.error(err)
159
- t.equal(res.statusCode, 200)
160
- t.equal(res.payload, '1.2.0')
160
+ t.assert.ifError(err)
161
+ t.assert.strictEqual(res.statusCode, 200)
162
+ t.assert.strictEqual(res.payload, '1.2.0')
161
163
  })
162
164
 
163
165
  fastify.inject({
@@ -167,12 +169,13 @@ test('Should register the same route with different versions', t => {
167
169
  'Accept-Version': '2.x'
168
170
  }
169
171
  }, (err, res) => {
170
- t.error(err)
171
- t.equal(res.statusCode, 404)
172
+ t.assert.ifError(err)
173
+ t.assert.strictEqual(res.statusCode, 404)
174
+ done()
172
175
  })
173
176
  })
174
177
 
175
- test('The versioned route should take precedence', t => {
178
+ test('The versioned route should take precedence', (t, done) => {
176
179
  t.plan(3)
177
180
  const fastify = Fastify()
178
181
 
@@ -200,13 +203,14 @@ test('The versioned route should take precedence', t => {
200
203
  'Accept-Version': '1.x'
201
204
  }
202
205
  }, (err, res) => {
203
- t.error(err)
204
- t.same(JSON.parse(res.payload), { hello: 'world' })
205
- t.equal(res.statusCode, 200)
206
+ t.assert.ifError(err)
207
+ t.assert.deepStrictEqual(JSON.parse(res.payload), { hello: 'world' })
208
+ t.assert.strictEqual(res.statusCode, 200)
209
+ done()
206
210
  })
207
211
  })
208
212
 
209
- test('Versioned route but not version header should return a 404', t => {
213
+ test('Versioned route but not version header should return a 404', (t, done) => {
210
214
  t.plan(2)
211
215
  const fastify = Fastify()
212
216
 
@@ -223,12 +227,13 @@ test('Versioned route but not version header should return a 404', t => {
223
227
  method: 'GET',
224
228
  url: '/'
225
229
  }, (err, res) => {
226
- t.error(err)
227
- t.equal(res.statusCode, 404)
230
+ t.assert.ifError(err)
231
+ t.assert.strictEqual(res.statusCode, 404)
232
+ done()
228
233
  })
229
234
  })
230
235
 
231
- test('Should register a versioned route', t => {
236
+ test('Should register a versioned route (server)', (t, done) => {
232
237
  t.plan(6)
233
238
  const fastify = Fastify()
234
239
 
@@ -242,8 +247,8 @@ test('Should register a versioned route', t => {
242
247
  })
243
248
 
244
249
  fastify.listen({ port: 0 }, err => {
245
- t.error(err)
246
- t.teardown(() => { fastify.close() })
250
+ t.assert.ifError(err)
251
+ t.after(() => { fastify.close() })
247
252
 
248
253
  sget({
249
254
  method: 'GET',
@@ -252,25 +257,26 @@ test('Should register a versioned route', t => {
252
257
  'Accept-Version': '1.x'
253
258
  }
254
259
  }, (err, response, body) => {
255
- t.error(err)
256
- t.equal(response.statusCode, 200)
257
- t.same(JSON.parse(body), { hello: 'world' })
258
- })
259
-
260
- sget({
261
- method: 'GET',
262
- url: 'http://localhost:' + fastify.server.address().port,
263
- headers: {
264
- 'Accept-Version': '2.x'
265
- }
266
- }, (err, response, body) => {
267
- t.error(err)
268
- t.equal(response.statusCode, 404)
260
+ t.assert.ifError(err)
261
+ t.assert.strictEqual(response.statusCode, 200)
262
+ t.assert.deepStrictEqual(JSON.parse(body), { hello: 'world' })
263
+
264
+ sget({
265
+ method: 'GET',
266
+ url: 'http://localhost:' + fastify.server.address().port,
267
+ headers: {
268
+ 'Accept-Version': '2.x'
269
+ }
270
+ }, (err, response, body) => {
271
+ t.assert.ifError(err)
272
+ t.assert.strictEqual(response.statusCode, 404)
273
+ done()
274
+ })
269
275
  })
270
276
  })
271
277
  })
272
278
 
273
- test('Shorthand route declaration', t => {
279
+ test('Shorthand route declaration', (t, done) => {
274
280
  t.plan(5)
275
281
  const fastify = Fastify()
276
282
 
@@ -285,9 +291,9 @@ test('Shorthand route declaration', t => {
285
291
  'Accept-Version': '1.x'
286
292
  }
287
293
  }, (err, res) => {
288
- t.error(err)
289
- t.same(JSON.parse(res.payload), { hello: 'world' })
290
- t.equal(res.statusCode, 200)
294
+ t.assert.ifError(err)
295
+ t.assert.deepStrictEqual(JSON.parse(res.payload), { hello: 'world' })
296
+ t.assert.strictEqual(res.statusCode, 200)
291
297
  })
292
298
 
293
299
  fastify.inject({
@@ -297,27 +303,28 @@ test('Shorthand route declaration', t => {
297
303
  'Accept-Version': '1.2.1'
298
304
  }
299
305
  }, (err, res) => {
300
- t.error(err)
301
- t.equal(res.statusCode, 404)
306
+ t.assert.ifError(err)
307
+ t.assert.strictEqual(res.statusCode, 404)
308
+ done()
302
309
  })
303
310
  })
304
311
 
305
- test('The not found handler should not erase the Accept-Version header', t => {
312
+ test('The not found handler should not erase the Accept-Version header', (t, done) => {
306
313
  t.plan(13)
307
314
  const fastify = Fastify()
308
315
 
309
316
  fastify.addHook('onRequest', function (req, reply, done) {
310
- t.same(req.headers['accept-version'], '2.x')
317
+ t.assert.deepStrictEqual(req.headers['accept-version'], '2.x')
311
318
  done()
312
319
  })
313
320
 
314
321
  fastify.addHook('preValidation', function (req, reply, done) {
315
- t.same(req.headers['accept-version'], '2.x')
322
+ t.assert.deepStrictEqual(req.headers['accept-version'], '2.x')
316
323
  done()
317
324
  })
318
325
 
319
326
  fastify.addHook('preHandler', function (req, reply, done) {
320
- t.same(req.headers['accept-version'], '2.x')
327
+ t.assert.deepStrictEqual(req.headers['accept-version'], '2.x')
321
328
  done()
322
329
  })
323
330
 
@@ -331,14 +338,14 @@ test('The not found handler should not erase the Accept-Version header', t => {
331
338
  })
332
339
 
333
340
  fastify.setNotFoundHandler(function (req, reply) {
334
- t.same(req.headers['accept-version'], '2.x')
341
+ t.assert.deepStrictEqual(req.headers['accept-version'], '2.x')
335
342
  // we check if the symbol is exposed on key or not
336
343
  for (const key in req.headers) {
337
- t.same(typeof key, 'string')
344
+ t.assert.deepStrictEqual(typeof key, 'string')
338
345
  }
339
346
 
340
347
  for (const key of Object.keys(req.headers)) {
341
- t.same(typeof key, 'string')
348
+ t.assert.deepStrictEqual(typeof key, 'string')
342
349
  }
343
350
 
344
351
  reply.code(404).send('not found handler')
@@ -351,13 +358,14 @@ test('The not found handler should not erase the Accept-Version header', t => {
351
358
  'Accept-Version': '2.x'
352
359
  }
353
360
  }, (err, res) => {
354
- t.error(err)
355
- t.same(res.payload, 'not found handler')
356
- t.equal(res.statusCode, 404)
361
+ t.assert.ifError(err)
362
+ t.assert.deepStrictEqual(res.payload, 'not found handler')
363
+ t.assert.strictEqual(res.statusCode, 404)
364
+ done()
357
365
  })
358
366
  })
359
367
 
360
- test('Bad accept version (inject)', t => {
368
+ test('Bad accept version (inject)', (t, done) => {
361
369
  t.plan(4)
362
370
  const fastify = Fastify()
363
371
 
@@ -377,8 +385,8 @@ test('Bad accept version (inject)', t => {
377
385
  'Accept-Version': 'a.b.c'
378
386
  }
379
387
  }, (err, res) => {
380
- t.error(err)
381
- t.equal(res.statusCode, 404)
388
+ t.assert.ifError(err)
389
+ t.assert.strictEqual(res.statusCode, 404)
382
390
  })
383
391
 
384
392
  fastify.inject({
@@ -388,12 +396,13 @@ test('Bad accept version (inject)', t => {
388
396
  'Accept-Version': 12
389
397
  }
390
398
  }, (err, res) => {
391
- t.error(err)
392
- t.equal(res.statusCode, 404)
399
+ t.assert.ifError(err)
400
+ t.assert.strictEqual(res.statusCode, 404)
401
+ done()
393
402
  })
394
403
  })
395
404
 
396
- test('Bad accept version (server)', t => {
405
+ test('Bad accept version (server)', (t, done) => {
397
406
  t.plan(5)
398
407
  const fastify = Fastify()
399
408
 
@@ -407,8 +416,8 @@ test('Bad accept version (server)', t => {
407
416
  })
408
417
 
409
418
  fastify.listen({ port: 0 }, err => {
410
- t.error(err)
411
- t.teardown(() => { fastify.close() })
419
+ t.assert.ifError(err)
420
+ t.after(() => { fastify.close() })
412
421
 
413
422
  sget({
414
423
  method: 'GET',
@@ -417,24 +426,25 @@ test('Bad accept version (server)', t => {
417
426
  'Accept-Version': 'a.b.c'
418
427
  }
419
428
  }, (err, response, body) => {
420
- t.error(err)
421
- t.equal(response.statusCode, 404)
422
- })
423
-
424
- sget({
425
- method: 'GET',
426
- url: 'http://localhost:' + fastify.server.address().port,
427
- headers: {
428
- 'Accept-Version': 12
429
- }
430
- }, (err, response, body) => {
431
- t.error(err)
432
- t.equal(response.statusCode, 404)
429
+ t.assert.ifError(err)
430
+ t.assert.strictEqual(response.statusCode, 404)
431
+
432
+ sget({
433
+ method: 'GET',
434
+ url: 'http://localhost:' + fastify.server.address().port,
435
+ headers: {
436
+ 'Accept-Version': 12
437
+ }
438
+ }, (err, response, body) => {
439
+ t.assert.ifError(err)
440
+ t.assert.strictEqual(response.statusCode, 404)
441
+ done()
442
+ })
433
443
  })
434
444
  })
435
445
  })
436
446
 
437
- test('test log stream', t => {
447
+ test('test log stream', (t, done) => {
438
448
  t.plan(3)
439
449
  const stream = split(JSON.parse)
440
450
  const fastify = Fastify({
@@ -449,8 +459,8 @@ test('test log stream', t => {
449
459
  })
450
460
 
451
461
  fastify.listen({ port: 0, host: localhost }, err => {
452
- t.error(err)
453
- t.teardown(() => { fastify.close() })
462
+ t.assert.ifError(err)
463
+ t.after(() => { fastify.close() })
454
464
 
455
465
  http.get({
456
466
  host: fastify.server.address().hostname,
@@ -464,16 +474,17 @@ test('test log stream', t => {
464
474
 
465
475
  stream.once('data', listenAtLogLine => {
466
476
  stream.once('data', line => {
467
- t.equal(line.req.version, '1.x')
477
+ t.assert.strictEqual(line.req.version, '1.x')
468
478
  stream.once('data', line => {
469
- t.equal(line.req.version, '1.x')
479
+ t.assert.strictEqual(line.req.version, '1.x')
480
+ done()
470
481
  })
471
482
  })
472
483
  })
473
484
  })
474
485
  })
475
486
 
476
- test('Should register a versioned route with custom versioning strategy', t => {
487
+ test('Should register a versioned route with custom versioning strategy', (t, done) => {
477
488
  t.plan(8)
478
489
 
479
490
  const customVersioning = {
@@ -523,9 +534,9 @@ test('Should register a versioned route with custom versioning strategy', t => {
523
534
  Accept: 'application/vnd.example.api+json;version=2'
524
535
  }
525
536
  }, (err, res) => {
526
- t.error(err)
527
- t.same(JSON.parse(res.payload), { hello: 'from route v2' })
528
- t.equal(res.statusCode, 200)
537
+ t.assert.ifError(err)
538
+ t.assert.deepStrictEqual(JSON.parse(res.payload), { hello: 'from route v2' })
539
+ t.assert.strictEqual(res.statusCode, 200)
529
540
  })
530
541
 
531
542
  fastify.inject({
@@ -535,9 +546,9 @@ test('Should register a versioned route with custom versioning strategy', t => {
535
546
  Accept: 'application/vnd.example.api+json;version=3'
536
547
  }
537
548
  }, (err, res) => {
538
- t.error(err)
539
- t.same(JSON.parse(res.payload), { hello: 'from route v3' })
540
- t.equal(res.statusCode, 200)
549
+ t.assert.ifError(err)
550
+ t.assert.deepStrictEqual(JSON.parse(res.payload), { hello: 'from route v3' })
551
+ t.assert.strictEqual(res.statusCode, 200)
541
552
  })
542
553
 
543
554
  fastify.inject({
@@ -547,12 +558,13 @@ test('Should register a versioned route with custom versioning strategy', t => {
547
558
  Accept: 'application/vnd.example.api+json;version=4'
548
559
  }
549
560
  }, (err, res) => {
550
- t.error(err)
551
- t.equal(res.statusCode, 404)
561
+ t.assert.ifError(err)
562
+ t.assert.strictEqual(res.statusCode, 404)
563
+ done()
552
564
  })
553
565
  })
554
566
 
555
- test('Vary header check (for documentation example)', t => {
567
+ test('Vary header check (for documentation example)', (t, done) => {
556
568
  t.plan(8)
557
569
  const fastify = Fastify()
558
570
  fastify.addHook('onSend', async (req, reply) => {
@@ -589,19 +601,20 @@ test('Vary header check (for documentation example)', t => {
589
601
  'Accept-Version': '1.x'
590
602
  }
591
603
  }, (err, res) => {
592
- t.error(err)
593
- t.same(JSON.parse(res.payload), { hello: 'world' })
594
- t.equal(res.statusCode, 200)
595
- t.equal(res.headers.vary, 'Accept-Version')
604
+ t.assert.ifError(err)
605
+ t.assert.deepStrictEqual(JSON.parse(res.payload), { hello: 'world' })
606
+ t.assert.strictEqual(res.statusCode, 200)
607
+ t.assert.strictEqual(res.headers.vary, 'Accept-Version')
596
608
  })
597
609
 
598
610
  fastify.inject({
599
611
  method: 'GET',
600
612
  url: '/'
601
613
  }, (err, res) => {
602
- t.error(err)
603
- t.same(JSON.parse(res.payload), { hello: 'world' })
604
- t.equal(res.statusCode, 200)
605
- t.equal(res.headers.vary, undefined)
614
+ t.assert.ifError(err)
615
+ t.assert.deepStrictEqual(JSON.parse(res.payload), { hello: 'world' })
616
+ t.assert.strictEqual(res.statusCode, 200)
617
+ t.assert.strictEqual(res.headers.vary, undefined)
618
+ done()
606
619
  })
607
620
  })