1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 | "use strict";
|
14 |
|
15 | var fluid = require("infusion"),
|
16 | kettle = require("../kettle.js"),
|
17 | jqUnit = fluid.require("node-jqunit", require, "jqUnit");
|
18 |
|
19 | kettle.loadTestingSupport();
|
20 |
|
21 | fluid.defaults("kettle.tests.CORS.handler", {
|
22 | gradeNames: "kettle.request.http",
|
23 | requestMiddleware: {
|
24 | CORS: {
|
25 | middleware: "{middlewareHolder}.CORS"
|
26 | }
|
27 | },
|
28 | invokers: {
|
29 | handleRequest: "kettle.tests.testGetCORS"
|
30 | }
|
31 | });
|
32 |
|
33 | fluid.defaults("kettle.tests.noCORS.handler", {
|
34 | gradeNames: "kettle.tests.CORS.handler",
|
35 | requestMiddleware: {
|
36 | CORS: {
|
37 | middleware: "{middlewareHolder}.null"
|
38 | }
|
39 | }
|
40 | });
|
41 |
|
42 |
|
43 | kettle.tests.testCORSOrigin = "localhost:8081";
|
44 |
|
45 | kettle.tests.testGetCORS = function (request) {
|
46 | jqUnit.assertTrue("The request was received", true);
|
47 | request.events.onSuccess.fire({
|
48 | success: true
|
49 | });
|
50 | };
|
51 |
|
52 | kettle.tests.CORS.success = {
|
53 | success: true
|
54 | };
|
55 |
|
56 | kettle.tests.CORS.testResponse = function (data, request) {
|
57 | kettle.test.assertJSONResponse({
|
58 | message: "Test CORS Response",
|
59 | string: data,
|
60 | request: request,
|
61 | expected: kettle.tests.CORS.success
|
62 | });
|
63 | kettle.tests.CORS.testResponseHeaders(data, request);
|
64 | };
|
65 |
|
66 | kettle.tests.CORS.testResponse_NoCred = function (data, request) {
|
67 | kettle.test.assertJSONResponse({
|
68 | message: "Test CORS Response with no credentials",
|
69 | string: data,
|
70 | request: request,
|
71 | expected: kettle.tests.CORS.success
|
72 | });
|
73 | kettle.tests.CORS.testResponseHeaders(data, request, "false");
|
74 | };
|
75 |
|
76 | kettle.tests.CORS.testResponse_Origin = function (data, request) {
|
77 | kettle.test.assertJSONResponse({
|
78 | message: "Test CORS Response without origin",
|
79 | string: data,
|
80 | request: request,
|
81 | expected: kettle.tests.CORS.success
|
82 | });
|
83 | kettle.tests.CORS.testResponseHeaders(data, request, "true", "null");
|
84 | };
|
85 |
|
86 |
|
87 | kettle.tests.CORS.testResponseHeaders = function (data, request, credentials, origin) {
|
88 | var headers = request.nativeResponse.headers;
|
89 | jqUnit.assertEquals("CORS origin is correct",
|
90 | origin || kettle.tests.testCORSOrigin,
|
91 | headers["access-control-allow-origin"]);
|
92 | jqUnit.assertEquals("CORS headers are correct", credentials || "true",
|
93 | headers["access-control-allow-credentials"]);
|
94 | jqUnit.assertEquals("CORS headers are correct", "X-Requested-With,Content-Type",
|
95 | headers["access-control-allow-headers"]);
|
96 | jqUnit.assertEquals("CORS methods are correct", "GET,OPTIONS,PUT,POST",
|
97 | headers["access-control-allow-methods"]);
|
98 | };
|
99 |
|
100 | kettle.tests.CORS.testNoCORSResponse = function (data, request) {
|
101 | kettle.test.assertJSONResponse({
|
102 | message: "Test Response without CORS middleware configured",
|
103 | string: data,
|
104 | request: request,
|
105 | expected: kettle.tests.CORS.success
|
106 | });
|
107 | var headers = request.nativeResponse.headers;
|
108 | jqUnit.assertUndefined("CORS origin is correct",
|
109 | headers["access-control-allow-origin"]);
|
110 | jqUnit.assertUndefined("CORS headers are correct",
|
111 | headers["access-control-allow-headers"]);
|
112 | jqUnit.assertUndefined("CORS methods are correct",
|
113 | headers["access-control-allow-methods"]);
|
114 | };
|
115 |
|
116 | var testDefs = [ {
|
117 | name: "CORS middleware tests",
|
118 | expect: 11,
|
119 | config: {
|
120 | configName: "kettle.tests.CORS.config",
|
121 | configPath: "%kettle/tests/configs"
|
122 | },
|
123 | components: {
|
124 | corsRequest: {
|
125 | type: "kettle.test.request.http",
|
126 | options: {
|
127 | headers: {
|
128 | "Origin": kettle.tests.testCORSOrigin
|
129 | }
|
130 | }
|
131 | },
|
132 | optionsCorsRequest: {
|
133 | type: "kettle.test.request.http",
|
134 | options: {
|
135 | method: "OPTIONS",
|
136 | headers: {
|
137 | "Origin": kettle.tests.testCORSOrigin
|
138 | }
|
139 | }
|
140 | }
|
141 | },
|
142 | sequence: [{
|
143 | func: "{corsRequest}.send"
|
144 | }, {
|
145 | event: "{corsRequest}.events.onComplete",
|
146 | listener: "kettle.tests.CORS.testResponse"
|
147 | }, {
|
148 | func: "{optionsCorsRequest}.send"
|
149 | }, {
|
150 | event: "{optionsCorsRequest}.events.onComplete",
|
151 | listener: "kettle.tests.CORS.testResponseHeaders",
|
152 | args: ["{arguments}.0", "{arguments}.1"]
|
153 | }]
|
154 | }, {
|
155 | name: "CORS middleware no credential tests",
|
156 | expect: 7,
|
157 | config: {
|
158 | configName: "kettle.tests.CORS.noCred.config",
|
159 | configPath: "%kettle/tests/configs"
|
160 | },
|
161 | components: {
|
162 | corsRequest: {
|
163 | type: "kettle.test.request.http",
|
164 | options: {
|
165 | headers: {
|
166 | "Origin": kettle.tests.testCORSOrigin
|
167 | }
|
168 | }
|
169 | }
|
170 | },
|
171 | sequence: [{
|
172 | func: "{corsRequest}.send"
|
173 | }, {
|
174 | event: "{corsRequest}.events.onComplete",
|
175 | listener: "kettle.tests.CORS.testResponse_NoCred"
|
176 | }]
|
177 | }, {
|
178 | name: "CORS middleware custom origin tests",
|
179 | expect: 14,
|
180 | config: {
|
181 | configName: "kettle.tests.CORS.origin.config",
|
182 | configPath: "%kettle/tests/configs"
|
183 | },
|
184 | components: {
|
185 | corsRequest: {
|
186 | type: "kettle.test.request.http",
|
187 | options: {
|
188 | headers: {
|
189 | "Origin": kettle.tests.testCORSOrigin
|
190 | }
|
191 | }
|
192 | },
|
193 | invalidCorsRequest: {
|
194 | type: "kettle.test.request.http",
|
195 | options: {
|
196 | headers: {
|
197 | "Origin": "invaliddomain.com"
|
198 | }
|
199 | }
|
200 | }
|
201 | },
|
202 | sequence: [{
|
203 | func: "{corsRequest}.send"
|
204 | }, {
|
205 | event: "{corsRequest}.events.onComplete",
|
206 | listener: "kettle.tests.CORS.testResponse"
|
207 | }, {
|
208 | func: "{invalidCorsRequest}.send"
|
209 | }, {
|
210 | event: "{invalidCorsRequest}.events.onComplete",
|
211 | listener: "kettle.tests.CORS.testResponse_Origin"
|
212 | }]
|
213 | }, {
|
214 | name: "No CORS middleware tests",
|
215 | expect: 6,
|
216 | config: {
|
217 | configName: "kettle.tests.CORS.noCORS.config",
|
218 | configPath: "%kettle/tests/configs"
|
219 | },
|
220 | components: {
|
221 | request: {
|
222 | type: "kettle.test.request.http"
|
223 | }
|
224 | },
|
225 | sequence: [{
|
226 | func: "{request}.send"
|
227 | }, {
|
228 | event: "{request}.events.onComplete",
|
229 | listener: "kettle.tests.CORS.testNoCORSResponse"
|
230 | }]
|
231 | } ];
|
232 |
|
233 | kettle.test.bootstrapServer(testDefs);
|