-
Notifications
You must be signed in to change notification settings - Fork 574
/
http_errors_test.ts
106 lines (99 loc) · 2.97 KB
/
http_errors_test.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license.
import { assert, assertEquals, assertInstanceOf } from "../testing/asserts.ts";
import { type ErrorStatus, Status, STATUS_TEXT } from "./http_status.ts";
import {
createHttpError,
errors,
type ErrorStatusKeys,
HttpError,
} from "./http_errors.ts";
const clientErrorStatus: ErrorStatus[] = [
Status.BadRequest,
Status.Unauthorized,
Status.PaymentRequired,
Status.Forbidden,
Status.NotFound,
Status.MethodNotAllowed,
Status.NotAcceptable,
Status.ProxyAuthRequired,
Status.RequestTimeout,
Status.Conflict,
Status.Gone,
Status.LengthRequired,
Status.PreconditionFailed,
Status.RequestEntityTooLarge,
Status.RequestURITooLong,
Status.UnsupportedMediaType,
Status.RequestedRangeNotSatisfiable,
Status.ExpectationFailed,
Status.Teapot,
Status.MisdirectedRequest,
Status.UnprocessableEntity,
Status.Locked,
Status.FailedDependency,
Status.UpgradeRequired,
Status.PreconditionRequired,
Status.TooManyRequests,
Status.RequestHeaderFieldsTooLarge,
Status.UnavailableForLegalReasons,
];
const serverErrorStatus: ErrorStatus[] = [
Status.InternalServerError,
Status.NotImplemented,
Status.BadGateway,
Status.ServiceUnavailable,
Status.GatewayTimeout,
Status.HTTPVersionNotSupported,
Status.VariantAlsoNegotiates,
Status.InsufficientStorage,
Status.LoopDetected,
Status.NotExtended,
Status.NetworkAuthenticationRequired,
];
Deno.test({
name: "http_error - validate client errors",
fn() {
for (const errorStatus of clientErrorStatus) {
const error = createHttpError(errorStatus);
const errorExpose = createHttpError(
errorStatus,
STATUS_TEXT[errorStatus],
{
expose: false,
headers: new Headers({ "WWW-Authenticate": "Bearer" }),
},
);
assertInstanceOf(error, HttpError);
assertInstanceOf(error, errors[Status[errorStatus] as ErrorStatusKeys]);
assertEquals(error.name, `${Status[errorStatus]}Error`);
assertEquals(error.message, STATUS_TEXT[errorStatus]);
assertEquals(errorExpose.status, errorStatus);
assertEquals(errorExpose.headers?.get("WWW-Authenticate"), "Bearer");
assert(error.expose);
assert(!errorExpose.expose);
}
},
});
Deno.test({
name: "http_error - validate server errors",
fn() {
for (const errorStatus of serverErrorStatus) {
const error = createHttpError(errorStatus);
const errorExpose = createHttpError(
errorStatus,
STATUS_TEXT[errorStatus],
{
expose: true,
},
);
assertInstanceOf(error, HttpError);
assertInstanceOf(error, errors[Status[errorStatus] as ErrorStatusKeys]);
assertEquals(error.name, `${Status[errorStatus]}Error`);
assertEquals(error.message, STATUS_TEXT[errorStatus]);
assertEquals(error.status, errorStatus);
assert(!error.expose);
assert(errorExpose.expose);
assert(!error.headers);
}
},
});