UNPKG

6.7 kBJavaScriptView Raw
1/**
2 * Kettle CORS Middleware Tests
3 *
4 * Copyright 2013 OCAD University
5 *
6 * Licensed under the New BSD license. You may not use this file except in
7 * compliance with this License.
8 *
9 * You may obtain a copy of the License at
10 * https://github.com/fluid-project/kettle/blob/master/LICENSE.txt
11 */
12
13"use strict";
14
15var fluid = require("infusion"),
16 kettle = require("../kettle.js"),
17 jqUnit = fluid.require("node-jqunit", require, "jqUnit");
18
19kettle.loadTestingSupport();
20
21fluid.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
33fluid.defaults("kettle.tests.noCORS.handler", {
34 gradeNames: "kettle.tests.CORS.handler",
35 requestMiddleware: {
36 CORS: {
37 middleware: "{middlewareHolder}.null"
38 }
39 }
40});
41
42
43kettle.tests.testCORSOrigin = "localhost:8081";
44
45kettle.tests.testGetCORS = function (request) {
46 jqUnit.assertTrue("The request was received", true);
47 request.events.onSuccess.fire({
48 success: true
49 });
50};
51
52kettle.tests.CORS.success = {
53 success: true
54};
55
56kettle.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
66kettle.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
76kettle.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
87kettle.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
100kettle.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
116var 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
233kettle.test.bootstrapServer(testDefs);