1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 | "use strict";
|
14 |
|
15 | var fluid = require("infusion"),
|
16 | kettle = fluid.require("%kettle");
|
17 |
|
18 | kettle.loadTestingSupport();
|
19 |
|
20 | require("./shared/SingleRequestTestDefs.js");
|
21 | require("./shared/HTTPMethodsTestDefs.js");
|
22 |
|
23 | fluid.registerNamespace("kettle.tests.badRequest");
|
24 |
|
25 |
|
26 |
|
27 | kettle.tests.badRequest.upgradeError = function (server) {
|
28 | server.expressApp.use(function (err, req, res, next) {
|
29 | kettle.request.http.errorHandler(res, err);
|
30 | });
|
31 | };
|
32 |
|
33 | fluid.defaults("kettle.tests.badRequest.testDefTemplate", {
|
34 | gradeNames: "fluid.component",
|
35 | mergePolicy: {
|
36 | sequence: "noexpand"
|
37 | },
|
38 | expectedStatusCode: 500,
|
39 | distributeOptions: {
|
40 | target: "{that server}.options.listeners.onCreate",
|
41 | record: {
|
42 | namespace: "upgradeError",
|
43 | listener: "kettle.tests.badRequest.upgradeError"
|
44 | }
|
45 | },
|
46 | components: {
|
47 | testRequest: {
|
48 | type: "kettle.test.request.http",
|
49 | options: {
|
50 | path: "/",
|
51 | method: "GET"
|
52 | }
|
53 | }
|
54 | },
|
55 | sequence: [
|
56 | {
|
57 | funcName: "kettle.test.pushInstrumentedErrors",
|
58 | args: "fluid.identity"
|
59 | }, {
|
60 | func: "{testRequest}.send"
|
61 | }, {
|
62 | event: "{testRequest}.events.onComplete",
|
63 | listener: "kettle.test.assertErrorResponse",
|
64 | args: {
|
65 | message: "{testCaseHolder}.options.message",
|
66 | errorTexts: "{testCaseHolder}.options.errorTexts",
|
67 | statusCode: "{testCaseHolder}.options.expectedStatusCode",
|
68 | string: "{arguments}.0",
|
69 | request: "{testRequest}"
|
70 | }
|
71 | }, {
|
72 | funcName: "kettle.test.popInstrumentedErrors"
|
73 | }
|
74 | ]
|
75 | });
|
76 |
|
77 |
|
78 |
|
79 |
|
80 |
|
81 | fluid.defaults("kettle.tests.badRequest.missing.handler.config", {
|
82 | handler: {
|
83 | type: "kettle.tests.badRequest.missing.handler"
|
84 | },
|
85 | name: "Bad config: missing handler test",
|
86 | message: "Received 500 error with helpful text for missing request handler",
|
87 | errorTexts: "couldn't load handler kettle.tests.badRequest.missing.handler"
|
88 | });
|
89 |
|
90 |
|
91 |
|
92 | fluid.defaults("kettle.tests.badRequest.missing.handlerType.config", {
|
93 | handler: {
|
94 | type: null
|
95 | },
|
96 | name: "Bad config: missing handler type test",
|
97 | message: "Received 500 error with helpful text for missing request handler type",
|
98 | errorTexts: ["must have a request grade name", "type"]
|
99 | });
|
100 |
|
101 |
|
102 |
|
103 | fluid.defaults("kettle.tests.badRequest.throwing.handler.config", {
|
104 | handler: {
|
105 | type: "kettle.tests.badRequest.throwing.handler"
|
106 | },
|
107 | name: "Bad config: missing handler test",
|
108 | message: "Received 500 error with helpful text for throwing request handler",
|
109 | errorTexts: "Undesirable failure"
|
110 | });
|
111 |
|
112 | fluid.defaults("kettle.tests.badRequest.throwing.handler", {
|
113 | gradeNames: "kettle.request.http",
|
114 | invokers: {
|
115 | handleRequest: {
|
116 | funcName: "kettle.tests.badRequest.throwing.handleRequest"
|
117 | }
|
118 | }
|
119 | });
|
120 |
|
121 | kettle.tests.badRequest.throwing.handleRequest = function () {
|
122 | throw new Error("Undesirable failure");
|
123 | };
|
124 |
|
125 |
|
126 |
|
127 | fluid.defaults("kettle.tests.badRequest.middleware.missing.config", {
|
128 | handler: {
|
129 | type: "kettle.tests.badRequest.middleware.missing.handler"
|
130 | },
|
131 | name: "Bad config: missing middleware test",
|
132 | message: "Received 500 error with helpful text for missing middleware",
|
133 | errorTexts: ["Couldn't resolve reference", "missingMiddleware"]
|
134 | });
|
135 |
|
136 | fluid.defaults("kettle.tests.badRequest.middleware.missing.handler", {
|
137 | gradeNames: "kettle.request.http",
|
138 | requestMiddleware: {
|
139 | missing: {
|
140 | middleware: "{middlewareHolder}.missingMiddleware"
|
141 | }
|
142 | },
|
143 | invokers: {
|
144 | handleRequest: {
|
145 | funcName: "kettle.tests.HTTPMethods.get.handleRequest"
|
146 | }
|
147 | }
|
148 | });
|
149 |
|
150 |
|
151 |
|
152 | fluid.defaults("kettle.tests.badRequest.middleware.bad.config", {
|
153 | handler: {
|
154 | type: "kettle.tests.badRequest.middleware.bad.handler"
|
155 | },
|
156 | name: "Bad config: bad middleware test",
|
157 | message: "Received 500 error with helpful text for bad middleware",
|
158 | errorTexts: ["is improperly configured", "kettle.tests.badRequest.bad.middleware"]
|
159 | });
|
160 |
|
161 | fluid.defaults("kettle.tests.badRequest.middleware.bad.handler", {
|
162 | gradeNames: "kettle.request.http",
|
163 | components: {
|
164 | badMiddleware: {
|
165 | type: "kettle.tests.badRequest.bad.middleware"
|
166 | }
|
167 | },
|
168 | requestMiddleware: {
|
169 | bad: {
|
170 | middleware: "{kettle.request.http}.badMiddleware"
|
171 | }
|
172 | },
|
173 | invokers: {
|
174 | handleRequest: {
|
175 | funcName: "kettle.tests.HTTPMethods.get.handleRequest"
|
176 | }
|
177 | }
|
178 | });
|
179 |
|
180 |
|
181 | fluid.defaults("kettle.tests.badRequest.bad.middleware", {
|
182 | gradeNames: "kettle.plainMiddleware"
|
183 | });
|
184 |
|
185 |
|
186 |
|
187 | fluid.defaults("kettle.tests.badRequest.static.nopath.config", {
|
188 | handler: {
|
189 | type: "kettle.tests.badRequest.static.nopath.handler"
|
190 | },
|
191 | name: "Bad config: static middleware with no path test",
|
192 | message: "Received 500 error with helpful text for static middleware with no path",
|
193 | errorTexts: ["Static middleware must have a root path"]
|
194 | });
|
195 |
|
196 |
|
197 | fluid.defaults("kettle.tests.badRequest.static.nopath.handler", {
|
198 | gradeNames: "kettle.request.http",
|
199 | components: {
|
200 | badStatic: {
|
201 | type: "kettle.middleware.static"
|
202 | }
|
203 | },
|
204 | requestMiddleware: {
|
205 | staticMiddleware: {
|
206 | middleware: "{kettle.request.http}.badStatic"
|
207 | }
|
208 | },
|
209 | invokers: {
|
210 | handleRequest: {
|
211 | funcName: "kettle.tests.HTTPMethods.get.handleRequest"
|
212 | }
|
213 | }
|
214 | });
|
215 |
|
216 |
|
217 |
|
218 | fluid.defaults("kettle.tests.badRequest.badURL.config", {
|
219 | handler: {
|
220 | type: "kettle.tests.HTTPMethods.get.handler",
|
221 | route: "/route/:key"
|
222 | },
|
223 | name: "Bad request: bad URL-encoded request parameter",
|
224 | message: "Received 400 error with helpful text for badly URL-encoded request parameter",
|
225 | errorTexts: ["Failed to decode"],
|
226 | expectedStatusCode: 400,
|
227 | distributeOptions: {
|
228 | target: "{that testRequest}.options.path",
|
229 | record: "/route/%ZZ"
|
230 | }
|
231 | });
|
232 |
|
233 | kettle.tests.badRequest.testDefs = [
|
234 | "kettle.tests.badRequest.missing.handler.config",
|
235 | "kettle.tests.badRequest.missing.handlerType.config",
|
236 | "kettle.tests.badRequest.throwing.handler.config",
|
237 | "kettle.tests.badRequest.middleware.missing.config",
|
238 | "kettle.tests.badRequest.middleware.bad.config",
|
239 | "kettle.tests.badRequest.static.nopath.config",
|
240 | "kettle.tests.badRequest.badURL.config"
|
241 | ];
|
242 |
|
243 | kettle.tests.singleRequest.executeTests(kettle.tests.badRequest.testDefs,
|
244 | "kettle.tests.badRequest.testDefTemplate", true);
|