UNPKG

7.66 kBJavaScriptView Raw
1/**
2 * Kettle HTTP Methods Test Defs
3 *
4 * Copyright 2014-2015 Raising The Floor - International
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 = fluid.require("%kettle"),
17 jqUnit = fluid.require("node-jqunit", require, "jqUnit");
18
19kettle.loadTestingSupport();
20
21fluid.registerNamespace("kettle.tests.HTTPMethods");
22
23// ----------------- GET HANDLING ------------------------
24fluid.defaults("kettle.tests.HTTPMethods.get.handler", {
25 gradeNames: "kettle.request.http",
26 invokers: {
27 handleRequest: {
28 funcName: "kettle.tests.HTTPMethods.get.handleRequest"
29 }
30 }
31});
32
33kettle.tests.HTTPMethods.get.handleRequest = function (request) {
34 jqUnit.assert("GET request successfully received");
35 request.events.onSuccess.fire({message: "GET response"});
36};
37
38kettle.tests.HTTPMethods.get.testResponse = function (data) {
39 jqUnit.assertDeepEq("GET response successfully received", {message: "GET response"}, JSON.parse(data));
40};
41
42// ----------------- POST HANDLING ------------------------
43fluid.defaults("kettle.tests.HTTPMethods.post.handler", {
44 gradeNames: "kettle.request.http",
45 invokers: {
46 handleRequest: {
47 funcName: "kettle.tests.HTTPMethods.post.handleRequest"
48 }
49 }
50});
51
52kettle.tests.HTTPMethods.post.handleRequest = function (request) {
53 jqUnit.assert("POST request successfully received");
54 request.events.onSuccess.fire(request.req.body);
55};
56
57kettle.tests.HTTPMethods.post.testResponse = function (data) {
58 jqUnit.assertDeepEq("POST response successfully received", {
59 "msg": "I am a POST request"
60 }, JSON.parse(data));
61};
62
63// ----------------- PUT HANDLING ------------------------
64fluid.defaults("kettle.tests.HTTPMethods.put.handler", {
65 gradeNames: "kettle.request.http",
66 invokers: {
67 handleRequest: {
68 funcName: "kettle.tests.HTTPMethods.put.handleRequest"
69 }
70 }
71});
72
73kettle.tests.HTTPMethods.put.handleRequest = function (request) {
74 jqUnit.assert("PUT request successfully received");
75 request.events.onSuccess.fire(request.req.body);
76};
77
78kettle.tests.HTTPMethods.put.testResponse = function (data) {
79 jqUnit.assertDeepEq("PUT response successfully received", {
80 "msg": "I am a PUT request"
81 }, JSON.parse(data));
82};
83
84// -------- PUT handling with alternate status code --------
85fluid.defaults("kettle.tests.HTTPMethods.put201.handler", {
86 gradeNames: "kettle.request.http",
87 invokers: {
88 handleRequest: {
89 funcName: "kettle.tests.HTTPMethods.put201.handleRequest"
90 }
91 }
92});
93
94kettle.tests.HTTPMethods.put201.handleRequest = function (request) {
95 jqUnit.assert("PUT request successfully received");
96 // Add a non-200 status code as an additional parameter to onSuccess
97 request.events.onSuccess.fire(request.req.body, {
98 statusCode: 201
99 });
100};
101
102kettle.tests.HTTPMethods.put201.testResponse = function (request, data) {
103 var response = request.nativeResponse;
104 jqUnit.assertEquals("PUT response is 201 (Created)", 201, response.statusCode);
105 jqUnit.assertDeepEq("PUT response successfully received", {
106 "msg": "I am a PUT request"
107 }, JSON.parse(data));
108};
109
110// ------------- Test defs for GET, POST, PUT --------------
111kettle.tests.HTTPMethods.testDefs = [{
112 name: "HTTPMethods GET test",
113 expect: 2,
114 config: {
115 configName: "kettle.tests.HTTPMethods.config",
116 configPath: "%kettle/tests/configs"
117 },
118 components: {
119 getRequest: {
120 type: "kettle.test.request.http",
121 options: {
122 path: "/",
123 method: "GET"
124 }
125 }
126 },
127 sequence: [{
128 func: "{getRequest}.send"
129 }, {
130 event: "{getRequest}.events.onComplete",
131 listener: "kettle.tests.HTTPMethods.get.testResponse"
132 }]
133}, { // POST test
134 name: "HTTPMethods POST test",
135 expect: 2,
136 config: {
137 configName: "kettle.tests.HTTPMethods.config",
138 configPath: "%kettle/tests/configs"
139 },
140 components: {
141 postRequest: {
142 type: "kettle.test.request.http",
143 options: {
144 path: "/",
145 method: "POST"
146 }
147 }
148 },
149 sequence: [{
150 func: "{postRequest}.send",
151 args: { "msg": "I am a POST request" }
152 }, {
153 event: "{postRequest}.events.onComplete",
154 listener: "kettle.tests.HTTPMethods.post.testResponse"
155 }]
156}, { // PUT test
157 name: "HTTPMethods PUT test",
158 expect: 2,
159 config: {
160 configName: "kettle.tests.HTTPMethods.config",
161 configPath: "%kettle/tests/configs"
162 },
163 components: {
164 putRequest: {
165 type: "kettle.test.request.http",
166 options: {
167 path: "/",
168 method: "PUT"
169 }
170 }
171 },
172 sequence: [{
173 func: "{putRequest}.send",
174 args: { "msg": "I am a PUT request" }
175 }, {
176 event: "{putRequest}.events.onComplete",
177 listener: "kettle.tests.HTTPMethods.put.testResponse"
178 }]
179}, { // PUT & POST combo test
180 name: "HTTPMethods PUT & POST in sequence test",
181 expect: 6,
182 config: {
183 configName: "kettle.tests.HTTPMethods.config",
184 configPath: "%kettle/tests/configs"
185 },
186 components: {
187 postRequest: {
188 type: "kettle.test.request.http",
189 options: {
190 path: "/",
191 method: "POST"
192 }
193 },
194 putRequest: {
195 type: "kettle.test.request.http",
196 options: {
197 path: "/",
198 method: "PUT"
199 }
200 },
201 postRequest2: {
202 type: "kettle.test.request.http",
203 options: {
204 path: "/",
205 method: "POST"
206 }
207 }
208 },
209 sequence: [{
210 func: "{postRequest}.send",
211 args: { "msg": "I am a POST request" }
212 }, {
213 event: "{postRequest}.events.onComplete",
214 listener: "kettle.tests.HTTPMethods.post.testResponse"
215 }, {
216 func: "{putRequest}.send",
217 args: { "msg": "I am a PUT request" }
218 }, {
219 event: "{putRequest}.events.onComplete",
220 listener: "kettle.tests.HTTPMethods.put.testResponse"
221 }, {
222 func: "{postRequest2}.send",
223 args: { "msg": "I am a POST request" }
224 }, {
225 event: "{postRequest2}.events.onComplete",
226 listener: "kettle.tests.HTTPMethods.post.testResponse"
227 }]
228}, { // PUT test with alternate status code
229 name: "HTTPMethods PUT test with alternate response status code",
230 expect: 3,
231 config: {
232 configName: "kettle.tests.HTTPMethods.config",
233 configPath: "%kettle/tests/configs"
234 },
235 components: {
236 put201Request: {
237 type: "kettle.test.request.http",
238 options: {
239 path: "/201",
240 method: "PUT"
241 }
242 }
243 },
244 sequence: [{
245 func: "{put201Request}.send",
246 args: { "msg": "I am a PUT request" }
247 }, {
248 event: "{put201Request}.events.onComplete",
249 listener: "kettle.tests.HTTPMethods.put201.testResponse",
250 // since we need to verify the status code in addition to the response content,
251 // we use the request as input to the verification function, in addition to forwarding the payload
252 args: ["{put201Request}", "{arguments}.0"]
253 }]
254}];