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.
- package/.borp.yaml +3 -0
- package/.vscode/settings.json +22 -0
- package/README.md +12 -7
- package/docs/Guides/Database.md +15 -15
- package/docs/Guides/Detecting-When-Clients-Abort.md +28 -28
- package/docs/Guides/Ecosystem.md +14 -15
- package/docs/Guides/Index.md +1 -1
- package/docs/Guides/Migration-Guide-V4.md +11 -11
- package/docs/Guides/Migration-Guide-V5.md +133 -9
- package/docs/Guides/Plugins-Guide.md +1 -1
- package/docs/Guides/Prototype-Poisoning.md +3 -3
- package/docs/Guides/Recommendations.md +9 -9
- package/docs/Guides/Serverless.md +5 -5
- package/docs/Guides/Testing.md +58 -57
- package/docs/Guides/Write-Plugin.md +2 -2
- package/docs/Guides/Write-Type-Provider.md +3 -3
- package/docs/Reference/ContentTypeParser.md +4 -4
- package/docs/Reference/Decorators.md +2 -2
- package/docs/Reference/Errors.md +3 -3
- package/docs/Reference/Hooks.md +7 -7
- package/docs/Reference/LTS.md +8 -0
- package/docs/Reference/Logging.md +5 -4
- package/docs/Reference/Reply.md +55 -58
- package/docs/Reference/Request.md +49 -42
- package/docs/Reference/Routes.md +16 -13
- package/docs/Reference/Server.md +32 -28
- package/docs/Reference/TypeScript.md +9 -9
- package/docs/Reference/Validation-and-Serialization.md +5 -5
- package/examples/typescript-server.ts +1 -1
- package/fastify.d.ts +14 -5
- package/fastify.js +8 -6
- package/lib/contentTypeParser.js +9 -7
- package/lib/context.js +1 -2
- package/lib/error-handler.js +9 -9
- package/lib/errors.js +1 -1
- package/lib/fourOhFour.js +1 -1
- package/lib/hooks.js +4 -1
- package/lib/{logger.js → logger-factory.js} +70 -122
- package/lib/logger-pino.js +68 -0
- package/lib/pluginOverride.js +1 -1
- package/lib/pluginUtils.js +2 -2
- package/lib/reply.js +4 -5
- package/lib/request.js +16 -9
- package/lib/route.js +23 -22
- package/lib/validation.js +2 -2
- package/package.json +13 -15
- package/test/404s.test.js +675 -629
- package/test/500s.test.js +72 -63
- package/test/{allowUnsafeRegex.test.js → allow-unsafe-regex.test.js} +30 -26
- package/test/als.test.js +48 -45
- package/test/async-await.test.js +148 -134
- package/test/async-dispose.test.js +4 -5
- package/test/async_hooks.test.js +30 -28
- package/test/{bodyLimit.test.js → body-limit.test.js} +61 -58
- package/test/buffer.test.js +9 -10
- package/test/build/error-serializer.test.js +3 -4
- package/test/build/version.test.js +2 -3
- package/test/build-certificate.js +1 -1
- package/test/bundler/README.md +5 -5
- package/test/bundler/esbuild/bundler-test.js +10 -9
- package/test/bundler/webpack/bundler-test.js +10 -9
- package/test/case-insensitive.test.js +31 -28
- package/test/chainable.test.js +4 -5
- package/test/check.test.js +8 -10
- package/test/{childLoggerFactory.test.js → child-logger-factory.test.js} +56 -19
- package/test/client-timeout.test.js +5 -5
- package/test/close-pipelining.test.js +6 -8
- package/test/conditional-pino.test.js +47 -0
- package/test/{connectionTimeout.test.js → connection-timeout.test.js} +10 -11
- package/test/constrained-routes.test.js +243 -236
- package/test/content-length.test.js +53 -68
- package/test/content-parser.test.js +186 -158
- package/test/content-type.test.js +8 -9
- package/test/context-config.test.js +44 -54
- package/test/custom-http-server.test.js +16 -20
- package/test/custom-parser.5.test.js +32 -32
- package/test/diagnostics-channel/404.test.js +15 -15
- package/test/diagnostics-channel/async-delay-request.test.js +25 -25
- package/test/diagnostics-channel/async-request.test.js +24 -24
- package/test/diagnostics-channel/error-before-handler.test.js +4 -5
- package/test/diagnostics-channel/error-request.test.js +19 -19
- package/test/diagnostics-channel/error-status.test.js +8 -8
- package/test/diagnostics-channel/init.test.js +6 -7
- package/test/diagnostics-channel/sync-delay-request.test.js +16 -16
- package/test/diagnostics-channel/sync-request-reply.test.js +16 -16
- package/test/diagnostics-channel/sync-request.test.js +19 -19
- package/test/encapsulated-child-logger-factory.test.js +8 -8
- package/test/encapsulated-error-handler.test.js +20 -20
- package/test/esm/errorCodes.test.mjs +5 -5
- package/test/esm/esm.test.mjs +3 -3
- package/test/esm/named-exports.mjs +3 -3
- package/test/esm/other.mjs +2 -2
- package/test/fastify-instance.test.js +33 -34
- package/test/{findRoute.test.js → find-route.test.js} +11 -10
- package/test/fluent-schema.test.js +33 -36
- package/test/handler-context.test.js +11 -11
- package/test/has-route.test.js +12 -15
- package/test/header-overflow.test.js +13 -12
- package/test/hooks.on-ready.test.js +2 -2
- package/test/hooks.test.js +25 -25
- package/test/http-methods/copy.test.js +22 -24
- package/test/http-methods/custom-http-methods.test.js +24 -21
- package/test/http-methods/get.test.js +97 -84
- package/test/http-methods/head.test.js +63 -57
- package/test/http-methods/lock.test.js +21 -20
- package/test/http-methods/mkcalendar.test.js +31 -27
- package/test/http-methods/mkcol.test.js +10 -10
- package/test/http-methods/move.test.js +11 -11
- package/test/http-methods/propfind.test.js +32 -27
- package/test/http-methods/proppatch.test.js +21 -19
- package/test/http-methods/report.test.js +32 -27
- package/test/http-methods/search.test.js +52 -47
- package/test/http-methods/trace.test.js +3 -4
- package/test/http-methods/unlock.test.js +10 -10
- package/test/http2/closing.test.js +50 -58
- package/test/http2/constraint.test.js +47 -50
- package/test/http2/head.test.js +18 -19
- package/test/http2/missing-http2-module.test.js +4 -5
- package/test/http2/plain.test.js +31 -31
- package/test/http2/secure-with-fallback.test.js +61 -61
- package/test/http2/secure.test.js +28 -31
- package/test/http2/unknown-http-method.test.js +13 -14
- package/test/https/custom-https-server.test.js +6 -7
- package/test/https/https.test.js +78 -78
- package/test/imports.test.js +5 -6
- package/test/internals/all.test.js +8 -11
- package/test/internals/{contentTypeParser.test.js → content-type-parser.test.js} +5 -6
- package/test/internals/context.test.js +9 -11
- package/test/internals/decorator.test.js +20 -21
- package/test/internals/errors.test.js +427 -427
- package/test/internals/{handleRequest.test.js → handle-request.test.js} +53 -42
- package/test/internals/{hookRunner.test.js → hook-runner.test.js} +99 -100
- package/test/internals/hooks.test.js +31 -35
- package/test/internals/{initialConfig.test.js → initial-config.test.js} +92 -80
- package/test/internals/logger.test.js +28 -28
- package/test/internals/plugin.test.js +17 -18
- package/test/internals/reply-serialize.test.js +106 -106
- package/test/internals/reply.test.js +620 -585
- package/test/internals/{reqIdGenFactory.test.js → req-id-gen-factory.test.js} +31 -31
- package/test/internals/request-validate.test.js +218 -221
- package/test/internals/request.test.js +225 -107
- package/test/internals/server.test.js +15 -12
- package/test/internals/validation.test.js +35 -36
- package/test/{keepAliveTimeout.test.js → keep-alive-timeout.test.js} +9 -10
- package/test/listen.5.test.js +9 -9
- package/test/{maxRequestsPerSocket.test.js → max-requests-per-socket.test.js} +30 -30
- package/test/middleware.test.js +4 -5
- package/test/noop-set.test.js +5 -5
- package/test/post-empty-body.test.js +18 -11
- package/test/pretty-print.test.js +59 -49
- package/test/proto-poisoning.test.js +42 -37
- package/test/reply-code.test.js +34 -32
- package/test/{reply-earlyHints.test.js → reply-early-hints.test.js} +21 -19
- package/test/request-error.test.js +122 -0
- package/test/request-header-host.test.js +339 -0
- package/test/request-id.test.js +31 -25
- package/test/{requestTimeout.test.js → request-timeout.test.js} +11 -11
- package/test/route.1.test.js +79 -72
- package/test/route.2.test.js +17 -16
- package/test/route.3.test.js +32 -27
- package/test/route.4.test.js +21 -25
- package/test/route.5.test.js +45 -64
- package/test/route.6.test.js +70 -89
- package/test/route.7.test.js +61 -65
- package/test/route.8.test.js +80 -18
- package/test/router-options.test.js +80 -77
- package/test/same-shape.test.js +5 -5
- package/test/schema-examples.test.js +72 -38
- package/test/serialize-response.test.js +9 -10
- package/test/server.test.js +75 -78
- package/test/set-error-handler.test.js +2 -3
- package/test/stream-serializers.test.js +10 -7
- package/test/sync-routes.test.js +18 -18
- package/test/test-reporter.mjs +68 -0
- package/test/trust-proxy.test.js +51 -45
- package/test/type-provider.test.js +8 -6
- package/test/types/content-type-parser.test-d.ts +1 -1
- package/test/types/fastify.test-d.ts +16 -4
- package/test/types/hooks.test-d.ts +2 -1
- package/test/types/instance.test-d.ts +13 -13
- package/test/types/logger.test-d.ts +2 -2
- package/test/types/plugin.test-d.ts +17 -9
- package/test/types/register.test-d.ts +22 -6
- package/test/types/reply.test-d.ts +1 -1
- package/test/types/route.test-d.ts +34 -4
- package/test/types/serverFactory.test-d.ts +1 -1
- package/test/types/type-provider.test-d.ts +1 -1
- package/test/url-rewriting.test.js +35 -38
- package/test/{useSemicolonDelimiter.test.js → use-semicolon-delimiter.test.js} +30 -30
- package/test/validation-error-handling.test.js +259 -285
- package/test/versioned-routes.test.js +126 -113
- package/test/web-api.test.js +48 -37
- package/test/{wrapThenable.test.js → wrap-thenable.test.js} +10 -9
- package/types/hooks.d.ts +2 -1
- package/types/instance.d.ts +9 -2
- package/types/register.d.ts +12 -3
- package/types/reply.d.ts +1 -1
- package/types/request.d.ts +2 -6
- package/types/serverFactory.d.ts +3 -3
- package/types/utils.d.ts +13 -5
- package/test/types/import.js +0 -2
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const
|
|
4
|
-
const test = t.test
|
|
3
|
+
const { test } = require('node:test')
|
|
5
4
|
const sget = require('simple-get').concat
|
|
6
5
|
const fastify = require('../../')()
|
|
7
6
|
fastify.addHttpMethod('PROPFIND', { hasBody: true })
|
|
@@ -62,45 +61,48 @@ test('can be created - propfind', t => {
|
|
|
62
61
|
)
|
|
63
62
|
}
|
|
64
63
|
})
|
|
65
|
-
t.
|
|
64
|
+
t.assert.ok(true)
|
|
66
65
|
} catch (e) {
|
|
67
|
-
t.fail()
|
|
66
|
+
t.assert.fail()
|
|
68
67
|
}
|
|
69
68
|
})
|
|
70
69
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
70
|
+
test('propfind test', async t => {
|
|
71
|
+
await fastify.listen({ port: 0 })
|
|
72
|
+
|
|
73
|
+
t.after(() => {
|
|
74
74
|
fastify.close()
|
|
75
75
|
})
|
|
76
76
|
|
|
77
|
-
test('request - propfind', t => {
|
|
77
|
+
await t.test('request - propfind', (t, done) => {
|
|
78
78
|
t.plan(3)
|
|
79
79
|
sget({
|
|
80
80
|
url: `http://localhost:${fastify.server.address().port}/`,
|
|
81
81
|
method: 'PROPFIND'
|
|
82
82
|
}, (err, response, body) => {
|
|
83
|
-
t.
|
|
84
|
-
t.
|
|
85
|
-
t.
|
|
83
|
+
t.assert.ifError(err)
|
|
84
|
+
t.assert.strictEqual(response.statusCode, 207)
|
|
85
|
+
t.assert.strictEqual(response.headers['content-length'], '' + body.length)
|
|
86
|
+
done()
|
|
86
87
|
})
|
|
87
88
|
})
|
|
88
89
|
|
|
89
|
-
test('request with other path - propfind', t => {
|
|
90
|
+
await t.test('request with other path - propfind', (t, done) => {
|
|
90
91
|
t.plan(3)
|
|
91
92
|
sget({
|
|
92
93
|
url: `http://localhost:${fastify.server.address().port}/test`,
|
|
93
94
|
method: 'PROPFIND'
|
|
94
95
|
}, (err, response, body) => {
|
|
95
|
-
t.
|
|
96
|
-
t.
|
|
97
|
-
t.
|
|
96
|
+
t.assert.ifError(err)
|
|
97
|
+
t.assert.strictEqual(response.statusCode, 207)
|
|
98
|
+
t.assert.strictEqual(response.headers['content-length'], '' + body.length)
|
|
99
|
+
done()
|
|
98
100
|
})
|
|
99
101
|
})
|
|
100
102
|
|
|
101
103
|
// the body test uses a text/plain content type instead of application/xml because it requires
|
|
102
104
|
// a specific content type parser
|
|
103
|
-
test('request with body - propfind', t => {
|
|
105
|
+
await t.test('request with body - propfind', (t, done) => {
|
|
104
106
|
t.plan(3)
|
|
105
107
|
sget({
|
|
106
108
|
url: `http://localhost:${fastify.server.address().port}/test`,
|
|
@@ -108,34 +110,37 @@ fastify.listen({ port: 0 }, err => {
|
|
|
108
110
|
body: bodySample,
|
|
109
111
|
method: 'PROPFIND'
|
|
110
112
|
}, (err, response, body) => {
|
|
111
|
-
t.
|
|
112
|
-
t.
|
|
113
|
-
t.
|
|
113
|
+
t.assert.ifError(err)
|
|
114
|
+
t.assert.strictEqual(response.statusCode, 207)
|
|
115
|
+
t.assert.strictEqual(response.headers['content-length'], '' + body.length)
|
|
116
|
+
done()
|
|
114
117
|
})
|
|
115
118
|
})
|
|
116
119
|
|
|
117
|
-
test('request with body and no content type (415 error) - propfind', t => {
|
|
120
|
+
await t.test('request with body and no content type (415 error) - propfind', (t, done) => {
|
|
118
121
|
t.plan(3)
|
|
119
122
|
sget({
|
|
120
123
|
url: `http://localhost:${fastify.server.address().port}/test`,
|
|
121
124
|
body: bodySample,
|
|
122
125
|
method: 'PROPFIND'
|
|
123
126
|
}, (err, response, body) => {
|
|
124
|
-
t.
|
|
125
|
-
t.
|
|
126
|
-
t.
|
|
127
|
+
t.assert.ifError(err)
|
|
128
|
+
t.assert.strictEqual(response.statusCode, 415)
|
|
129
|
+
t.assert.strictEqual(response.headers['content-length'], '' + body.length)
|
|
130
|
+
done()
|
|
127
131
|
})
|
|
128
132
|
})
|
|
129
133
|
|
|
130
|
-
test('request without body - propfind', t => {
|
|
134
|
+
await t.test('request without body - propfind', (t, done) => {
|
|
131
135
|
t.plan(3)
|
|
132
136
|
sget({
|
|
133
137
|
url: `http://localhost:${fastify.server.address().port}/test`,
|
|
134
138
|
method: 'PROPFIND'
|
|
135
139
|
}, (err, response, body) => {
|
|
136
|
-
t.
|
|
137
|
-
t.
|
|
138
|
-
t.
|
|
140
|
+
t.assert.ifError(err)
|
|
141
|
+
t.assert.strictEqual(response.statusCode, 207)
|
|
142
|
+
t.assert.strictEqual(response.headers['content-length'], '' + body.length)
|
|
143
|
+
done()
|
|
139
144
|
})
|
|
140
145
|
})
|
|
141
146
|
})
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const
|
|
4
|
-
const test = t.test
|
|
3
|
+
const { test } = require('node:test')
|
|
5
4
|
const sget = require('simple-get').concat
|
|
6
5
|
const fastify = require('../../')()
|
|
7
6
|
fastify.addHttpMethod('PROPPATCH', { hasBody: true })
|
|
@@ -56,19 +55,19 @@ test('shorthand - proppatch', t => {
|
|
|
56
55
|
)
|
|
57
56
|
}
|
|
58
57
|
})
|
|
59
|
-
t.
|
|
58
|
+
t.assert.ok(true)
|
|
60
59
|
} catch (e) {
|
|
61
|
-
t.fail()
|
|
60
|
+
t.assert.fail()
|
|
62
61
|
}
|
|
63
62
|
})
|
|
64
63
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
t.teardown(() => { fastify.close() })
|
|
64
|
+
test('proppatch test', async t => {
|
|
65
|
+
await fastify.listen({ port: 0 })
|
|
68
66
|
|
|
67
|
+
t.after(() => { fastify.close() })
|
|
69
68
|
// the body test uses a text/plain content type instead of application/xml because it requires
|
|
70
69
|
// a specific content type parser
|
|
71
|
-
test('request with body - proppatch', t => {
|
|
70
|
+
await t.test('request with body - proppatch', (t, done) => {
|
|
72
71
|
t.plan(3)
|
|
73
72
|
sget({
|
|
74
73
|
url: `http://localhost:${fastify.server.address().port}/test/a.txt`,
|
|
@@ -76,34 +75,37 @@ fastify.listen({ port: 0 }, err => {
|
|
|
76
75
|
body: bodySample,
|
|
77
76
|
method: 'PROPPATCH'
|
|
78
77
|
}, (err, response, body) => {
|
|
79
|
-
t.
|
|
80
|
-
t.
|
|
81
|
-
t.
|
|
78
|
+
t.assert.ifError(err)
|
|
79
|
+
t.assert.strictEqual(response.statusCode, 207)
|
|
80
|
+
t.assert.strictEqual(response.headers['content-length'], '' + body.length)
|
|
81
|
+
done()
|
|
82
82
|
})
|
|
83
83
|
})
|
|
84
84
|
|
|
85
|
-
test('request with body and no content type (415 error) - proppatch', t => {
|
|
85
|
+
await t.test('request with body and no content type (415 error) - proppatch', (t, done) => {
|
|
86
86
|
t.plan(3)
|
|
87
87
|
sget({
|
|
88
88
|
url: `http://localhost:${fastify.server.address().port}/test/a.txt`,
|
|
89
89
|
body: bodySample,
|
|
90
90
|
method: 'PROPPATCH'
|
|
91
91
|
}, (err, response, body) => {
|
|
92
|
-
t.
|
|
93
|
-
t.
|
|
94
|
-
t.
|
|
92
|
+
t.assert.ifError(err)
|
|
93
|
+
t.assert.strictEqual(response.statusCode, 415)
|
|
94
|
+
t.assert.strictEqual(response.headers['content-length'], '' + body.length)
|
|
95
|
+
done()
|
|
95
96
|
})
|
|
96
97
|
})
|
|
97
98
|
|
|
98
|
-
test('request without body - proppatch', t => {
|
|
99
|
+
await t.test('request without body - proppatch', (t, done) => {
|
|
99
100
|
t.plan(3)
|
|
100
101
|
sget({
|
|
101
102
|
url: `http://localhost:${fastify.server.address().port}/test/a.txt`,
|
|
102
103
|
method: 'PROPPATCH'
|
|
103
104
|
}, (err, response, body) => {
|
|
104
|
-
t.
|
|
105
|
-
t.
|
|
106
|
-
t.
|
|
105
|
+
t.assert.ifError(err)
|
|
106
|
+
t.assert.strictEqual(response.statusCode, 207)
|
|
107
|
+
t.assert.strictEqual(response.headers['content-length'], '' + body.length)
|
|
108
|
+
done()
|
|
107
109
|
})
|
|
108
110
|
})
|
|
109
111
|
})
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const
|
|
4
|
-
const test = t.test
|
|
3
|
+
const { test } = require('node:test')
|
|
5
4
|
const sget = require('simple-get').concat
|
|
6
5
|
const fastify = require('../../fastify')()
|
|
7
6
|
fastify.addHttpMethod('REPORT', { hasBody: true })
|
|
@@ -68,19 +67,20 @@ test('can be created - report', (t) => {
|
|
|
68
67
|
</D:multistatus>`)
|
|
69
68
|
}
|
|
70
69
|
})
|
|
71
|
-
t.
|
|
70
|
+
t.assert.ok(true)
|
|
72
71
|
} catch (e) {
|
|
73
|
-
t.fail()
|
|
72
|
+
t.assert.fail()
|
|
74
73
|
}
|
|
75
74
|
})
|
|
76
75
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
76
|
+
test('report test', async t => {
|
|
77
|
+
await fastify.listen({ port: 0 })
|
|
78
|
+
|
|
79
|
+
t.after(() => {
|
|
80
80
|
fastify.close()
|
|
81
81
|
})
|
|
82
82
|
|
|
83
|
-
test('request - report', (t) => {
|
|
83
|
+
await t.test('request - report', (t, done) => {
|
|
84
84
|
t.plan(3)
|
|
85
85
|
sget(
|
|
86
86
|
{
|
|
@@ -88,14 +88,15 @@ fastify.listen({ port: 0 }, (err) => {
|
|
|
88
88
|
method: 'REPORT'
|
|
89
89
|
},
|
|
90
90
|
(err, response, body) => {
|
|
91
|
-
t.
|
|
92
|
-
t.
|
|
93
|
-
t.
|
|
91
|
+
t.assert.ifError(err)
|
|
92
|
+
t.assert.strictEqual(response.statusCode, 207)
|
|
93
|
+
t.assert.strictEqual(response.headers['content-length'], '' + body.length)
|
|
94
|
+
done()
|
|
94
95
|
}
|
|
95
96
|
)
|
|
96
97
|
})
|
|
97
98
|
|
|
98
|
-
test('request with other path - report', (t) => {
|
|
99
|
+
await t.test('request with other path - report', (t, done) => {
|
|
99
100
|
t.plan(3)
|
|
100
101
|
sget(
|
|
101
102
|
{
|
|
@@ -103,16 +104,17 @@ fastify.listen({ port: 0 }, (err) => {
|
|
|
103
104
|
method: 'REPORT'
|
|
104
105
|
},
|
|
105
106
|
(err, response, body) => {
|
|
106
|
-
t.
|
|
107
|
-
t.
|
|
108
|
-
t.
|
|
107
|
+
t.assert.ifError(err)
|
|
108
|
+
t.assert.strictEqual(response.statusCode, 207)
|
|
109
|
+
t.assert.strictEqual(response.headers['content-length'], '' + body.length)
|
|
110
|
+
done()
|
|
109
111
|
}
|
|
110
112
|
)
|
|
111
113
|
})
|
|
112
114
|
|
|
113
115
|
// the body test uses a text/plain content type instead of application/xml because it requires
|
|
114
116
|
// a specific content type parser
|
|
115
|
-
test('request with body - report', (t) => {
|
|
117
|
+
await t.test('request with body - report', (t, done) => {
|
|
116
118
|
t.plan(3)
|
|
117
119
|
sget(
|
|
118
120
|
{
|
|
@@ -122,14 +124,15 @@ fastify.listen({ port: 0 }, (err) => {
|
|
|
122
124
|
method: 'REPORT'
|
|
123
125
|
},
|
|
124
126
|
(err, response, body) => {
|
|
125
|
-
t.
|
|
126
|
-
t.
|
|
127
|
-
t.
|
|
127
|
+
t.assert.ifError(err)
|
|
128
|
+
t.assert.strictEqual(response.statusCode, 207)
|
|
129
|
+
t.assert.strictEqual(response.headers['content-length'], '' + body.length)
|
|
130
|
+
done()
|
|
128
131
|
}
|
|
129
132
|
)
|
|
130
133
|
})
|
|
131
134
|
|
|
132
|
-
test('request with body and no content type (415 error) - report', (t) => {
|
|
135
|
+
await t.test('request with body and no content type (415 error) - report', (t, done) => {
|
|
133
136
|
t.plan(3)
|
|
134
137
|
sget(
|
|
135
138
|
{
|
|
@@ -138,14 +141,15 @@ fastify.listen({ port: 0 }, (err) => {
|
|
|
138
141
|
method: 'REPORT'
|
|
139
142
|
},
|
|
140
143
|
(err, response, body) => {
|
|
141
|
-
t.
|
|
142
|
-
t.
|
|
143
|
-
t.
|
|
144
|
+
t.assert.ifError(err)
|
|
145
|
+
t.assert.strictEqual(response.statusCode, 415)
|
|
146
|
+
t.assert.strictEqual(response.headers['content-length'], '' + body.length)
|
|
147
|
+
done()
|
|
144
148
|
}
|
|
145
149
|
)
|
|
146
150
|
})
|
|
147
151
|
|
|
148
|
-
test('request without body - report', (t) => {
|
|
152
|
+
await t.test('request without body - report', (t, done) => {
|
|
149
153
|
t.plan(3)
|
|
150
154
|
sget(
|
|
151
155
|
{
|
|
@@ -153,9 +157,10 @@ fastify.listen({ port: 0 }, (err) => {
|
|
|
153
157
|
method: 'REPORT'
|
|
154
158
|
},
|
|
155
159
|
(err, response, body) => {
|
|
156
|
-
t.
|
|
157
|
-
t.
|
|
158
|
-
t.
|
|
160
|
+
t.assert.ifError(err)
|
|
161
|
+
t.assert.strictEqual(response.statusCode, 207)
|
|
162
|
+
t.assert.strictEqual(response.headers['content-length'], '' + body.length)
|
|
163
|
+
done()
|
|
159
164
|
}
|
|
160
165
|
)
|
|
161
166
|
})
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const
|
|
3
|
+
const { test } = require('node:test')
|
|
4
4
|
const sget = require('simple-get').concat
|
|
5
|
-
const test = t.test
|
|
6
5
|
const fastify = require('../../fastify')()
|
|
7
6
|
fastify.addHttpMethod('SEARCH', { hasBody: true })
|
|
8
7
|
|
|
@@ -69,9 +68,9 @@ test('search', t => {
|
|
|
69
68
|
reply.code(200).send({ hello: 'world' })
|
|
70
69
|
}
|
|
71
70
|
})
|
|
72
|
-
t.
|
|
71
|
+
t.assert.ok(true)
|
|
73
72
|
} catch (e) {
|
|
74
|
-
t.fail()
|
|
73
|
+
t.assert.fail()
|
|
75
74
|
}
|
|
76
75
|
})
|
|
77
76
|
|
|
@@ -86,9 +85,9 @@ test('search, params schema', t => {
|
|
|
86
85
|
reply.code(200).send(request.params)
|
|
87
86
|
}
|
|
88
87
|
})
|
|
89
|
-
t.
|
|
88
|
+
t.assert.ok(true)
|
|
90
89
|
} catch (e) {
|
|
91
|
-
t.fail()
|
|
90
|
+
t.assert.fail()
|
|
92
91
|
}
|
|
93
92
|
})
|
|
94
93
|
|
|
@@ -103,9 +102,9 @@ test('search, querystring schema', t => {
|
|
|
103
102
|
reply.code(200).send(request.query)
|
|
104
103
|
}
|
|
105
104
|
})
|
|
106
|
-
t.
|
|
105
|
+
t.assert.ok(true)
|
|
107
106
|
} catch (e) {
|
|
108
|
-
t.fail()
|
|
107
|
+
t.assert.fail()
|
|
109
108
|
}
|
|
110
109
|
})
|
|
111
110
|
|
|
@@ -120,92 +119,96 @@ test('search, body schema', t => {
|
|
|
120
119
|
reply.code(200).send(request.body)
|
|
121
120
|
}
|
|
122
121
|
})
|
|
123
|
-
t.
|
|
122
|
+
t.assert.ok(true)
|
|
124
123
|
} catch (e) {
|
|
125
|
-
t.fail()
|
|
124
|
+
t.assert.fail()
|
|
126
125
|
}
|
|
127
126
|
})
|
|
128
127
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
t.
|
|
132
|
-
|
|
128
|
+
test('search test', async t => {
|
|
129
|
+
await fastify.listen({ port: 0 })
|
|
130
|
+
t.after(() => { fastify.close() })
|
|
133
131
|
const url = `http://localhost:${fastify.server.address().port}`
|
|
134
132
|
|
|
135
|
-
test('request - search', t => {
|
|
133
|
+
await t.test('request - search', (t, done) => {
|
|
136
134
|
t.plan(4)
|
|
137
135
|
sget({
|
|
138
136
|
method: 'SEARCH',
|
|
139
137
|
url
|
|
140
138
|
}, (err, response, body) => {
|
|
141
|
-
t.
|
|
142
|
-
t.
|
|
143
|
-
t.
|
|
144
|
-
t.
|
|
139
|
+
t.assert.ifError(err)
|
|
140
|
+
t.assert.strictEqual(response.statusCode, 200)
|
|
141
|
+
t.assert.strictEqual(response.headers['content-length'], '' + body.length)
|
|
142
|
+
t.assert.deepStrictEqual(JSON.parse(body), { hello: 'world' })
|
|
143
|
+
done()
|
|
145
144
|
})
|
|
146
145
|
})
|
|
147
146
|
|
|
148
|
-
test('request search params schema', t => {
|
|
147
|
+
await t.test('request search params schema', (t, done) => {
|
|
149
148
|
t.plan(4)
|
|
150
149
|
sget({
|
|
151
150
|
method: 'SEARCH',
|
|
152
151
|
url: `${url}/params/world/123`
|
|
153
152
|
}, (err, response, body) => {
|
|
154
|
-
t.
|
|
155
|
-
t.
|
|
156
|
-
t.
|
|
157
|
-
t.
|
|
153
|
+
t.assert.ifError(err)
|
|
154
|
+
t.assert.strictEqual(response.statusCode, 200)
|
|
155
|
+
t.assert.strictEqual(response.headers['content-length'], '' + body.length)
|
|
156
|
+
t.assert.deepStrictEqual(JSON.parse(body), { foo: 'world', test: 123 })
|
|
157
|
+
done()
|
|
158
158
|
})
|
|
159
159
|
})
|
|
160
160
|
|
|
161
|
-
test('request search params schema error', t => {
|
|
161
|
+
await t.test('request search params schema error', (t, done) => {
|
|
162
162
|
t.plan(3)
|
|
163
163
|
sget({
|
|
164
164
|
method: 'SEARCH',
|
|
165
165
|
url: `${url}/params/world/string`
|
|
166
166
|
}, (err, response, body) => {
|
|
167
|
-
t.
|
|
168
|
-
t.
|
|
169
|
-
t.
|
|
167
|
+
t.assert.ifError(err)
|
|
168
|
+
t.assert.strictEqual(response.statusCode, 400)
|
|
169
|
+
t.assert.deepStrictEqual(JSON.parse(body), {
|
|
170
170
|
error: 'Bad Request',
|
|
171
171
|
code: 'FST_ERR_VALIDATION',
|
|
172
172
|
message: 'params/test must be integer',
|
|
173
173
|
statusCode: 400
|
|
174
174
|
})
|
|
175
|
+
done()
|
|
175
176
|
})
|
|
176
177
|
})
|
|
177
178
|
|
|
178
|
-
test('request search querystring schema', t => {
|
|
179
|
+
await t.test('request search querystring schema', (t, done) => {
|
|
179
180
|
t.plan(4)
|
|
180
181
|
sget({
|
|
181
182
|
method: 'SEARCH',
|
|
182
183
|
url: `${url}/query?hello=123`
|
|
183
184
|
}, (err, response, body) => {
|
|
184
|
-
t.
|
|
185
|
-
t.
|
|
186
|
-
t.
|
|
187
|
-
t.
|
|
185
|
+
t.assert.ifError(err)
|
|
186
|
+
t.assert.strictEqual(response.statusCode, 200)
|
|
187
|
+
t.assert.strictEqual(response.headers['content-length'], '' + body.length)
|
|
188
|
+
t.assert.deepStrictEqual(JSON.parse(body), { hello: 123 })
|
|
189
|
+
done()
|
|
188
190
|
})
|
|
189
191
|
})
|
|
190
192
|
|
|
191
|
-
test('request search querystring schema error', t => {
|
|
193
|
+
await t.test('request search querystring schema error', (t, done) => {
|
|
192
194
|
t.plan(3)
|
|
193
195
|
sget({
|
|
194
196
|
method: 'SEARCH',
|
|
195
197
|
url: `${url}/query?hello=world`
|
|
196
198
|
}, (err, response, body) => {
|
|
197
|
-
t.
|
|
198
|
-
t.
|
|
199
|
-
t.
|
|
199
|
+
t.assert.ifError(err)
|
|
200
|
+
t.assert.strictEqual(response.statusCode, 400)
|
|
201
|
+
t.assert.deepStrictEqual(JSON.parse(body), {
|
|
200
202
|
error: 'Bad Request',
|
|
201
203
|
code: 'FST_ERR_VALIDATION',
|
|
202
204
|
message: 'querystring/hello must be integer',
|
|
203
205
|
statusCode: 400
|
|
204
206
|
})
|
|
207
|
+
done()
|
|
205
208
|
})
|
|
206
209
|
})
|
|
207
210
|
|
|
208
|
-
test('request search body schema', t => {
|
|
211
|
+
await t.test('request search body schema', (t, done) => {
|
|
209
212
|
t.plan(4)
|
|
210
213
|
const replyBody = { foo: 'bar', test: 5 }
|
|
211
214
|
sget({
|
|
@@ -214,14 +217,15 @@ fastify.listen({ port: 0 }, err => {
|
|
|
214
217
|
body: JSON.stringify(replyBody),
|
|
215
218
|
headers: { 'content-type': 'application/json' }
|
|
216
219
|
}, (err, response, body) => {
|
|
217
|
-
t.
|
|
218
|
-
t.
|
|
219
|
-
t.
|
|
220
|
-
t.
|
|
220
|
+
t.assert.ifError(err)
|
|
221
|
+
t.assert.strictEqual(response.statusCode, 200)
|
|
222
|
+
t.assert.strictEqual(response.headers['content-length'], '' + body.length)
|
|
223
|
+
t.assert.deepStrictEqual(JSON.parse(body), replyBody)
|
|
224
|
+
done()
|
|
221
225
|
})
|
|
222
226
|
})
|
|
223
227
|
|
|
224
|
-
test('request search body schema error', t => {
|
|
228
|
+
await t.test('request search body schema error', (t, done) => {
|
|
225
229
|
t.plan(4)
|
|
226
230
|
sget({
|
|
227
231
|
method: 'SEARCH',
|
|
@@ -229,15 +233,16 @@ fastify.listen({ port: 0 }, err => {
|
|
|
229
233
|
body: JSON.stringify({ foo: 'bar', test: 'test' }),
|
|
230
234
|
headers: { 'content-type': 'application/json' }
|
|
231
235
|
}, (err, response, body) => {
|
|
232
|
-
t.
|
|
233
|
-
t.
|
|
234
|
-
t.
|
|
235
|
-
t.
|
|
236
|
+
t.assert.ifError(err)
|
|
237
|
+
t.assert.strictEqual(response.statusCode, 400)
|
|
238
|
+
t.assert.strictEqual(response.headers['content-length'], '' + body.length)
|
|
239
|
+
t.assert.deepStrictEqual(JSON.parse(body), {
|
|
236
240
|
error: 'Bad Request',
|
|
237
241
|
code: 'FST_ERR_VALIDATION',
|
|
238
242
|
message: 'body/test must be integer',
|
|
239
243
|
statusCode: 400
|
|
240
244
|
})
|
|
245
|
+
done()
|
|
241
246
|
})
|
|
242
247
|
})
|
|
243
248
|
})
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const
|
|
4
|
-
const test = t.test
|
|
3
|
+
const { test } = require('node:test')
|
|
5
4
|
const fastify = require('../../fastify')()
|
|
6
5
|
fastify.addHttpMethod('TRACE')
|
|
7
6
|
|
|
@@ -15,8 +14,8 @@ test('shorthand - trace', t => {
|
|
|
15
14
|
reply.code(200).send('TRACE OK')
|
|
16
15
|
}
|
|
17
16
|
})
|
|
18
|
-
t.
|
|
17
|
+
t.assert.ok(true)
|
|
19
18
|
} catch (e) {
|
|
20
|
-
t.fail()
|
|
19
|
+
t.assert.fail()
|
|
21
20
|
}
|
|
22
21
|
})
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const
|
|
4
|
-
const test = t.test
|
|
3
|
+
const { test } = require('node:test')
|
|
5
4
|
const sget = require('simple-get').concat
|
|
6
5
|
const fastify = require('../../fastify')()
|
|
7
6
|
fastify.addHttpMethod('UNLOCK')
|
|
@@ -16,17 +15,17 @@ test('can be created - unlock', t => {
|
|
|
16
15
|
reply.code(204).send()
|
|
17
16
|
}
|
|
18
17
|
})
|
|
19
|
-
t.
|
|
18
|
+
t.assert.ok(true)
|
|
20
19
|
} catch (e) {
|
|
21
|
-
t.fail()
|
|
20
|
+
t.assert.fail()
|
|
22
21
|
}
|
|
23
22
|
})
|
|
24
23
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
t.teardown(() => { fastify.close() })
|
|
24
|
+
test('unlock test', async t => {
|
|
25
|
+
await fastify.listen({ port: 0 })
|
|
28
26
|
|
|
29
|
-
|
|
27
|
+
t.after(() => { fastify.close() })
|
|
28
|
+
await t.test('request - unlock', (t, done) => {
|
|
30
29
|
t.plan(2)
|
|
31
30
|
sget({
|
|
32
31
|
url: `http://localhost:${fastify.server.address().port}/test/a.txt`,
|
|
@@ -35,8 +34,9 @@ fastify.listen({ port: 0 }, err => {
|
|
|
35
34
|
'Lock-Token': 'urn:uuid:a515cfa4-5da4-22e1-f5b5-00a0451e6bf7'
|
|
36
35
|
}
|
|
37
36
|
}, (err, response, body) => {
|
|
38
|
-
t.
|
|
39
|
-
t.
|
|
37
|
+
t.assert.ifError(err)
|
|
38
|
+
t.assert.strictEqual(response.statusCode, 204)
|
|
39
|
+
done()
|
|
40
40
|
})
|
|
41
41
|
})
|
|
42
42
|
})
|