UNPKG

3.54 kBJavaScriptView Raw
1/**
2 * Kettle WebSockets Session tests
3 *
4 * Copyright 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 = require("../kettle.js"),
17 jqUnit = fluid.require("node-jqunit", require, "jqUnit");
18
19require("./shared/SessionTestDefs.js");
20
21fluid.defaults("kettle.tests.session.ws.testSocket.handler", {
22 gradeNames: ["kettle.request.ws", "kettle.request.sessionAware", "kettle.tests.session.handler.validating"],
23 listeners: {
24 onReceiveMessage: "kettle.tests.session.ws.testSocket.receiveMessage"
25 }
26});
27
28kettle.tests.session.ws.testSocket.receiveMessage = function (request) {
29 var session = request.req.session;
30 jqUnit.assertValue("Received socket message from qualified session", session);
31 fluid.log("testSocket.receiveMessage got session ", session);
32 jqUnit.assertEquals("Session data retrieved from HTTP request", kettle.tests.session.token, session.token);
33 var response = fluid.extend(true, {
34 token: session.token
35 }, kettle.tests.session.response.success);
36 request.sendTypedMessage("midSuccess", response);
37};
38
39kettle.tests.session.ws.proto = {
40 name: "WebSockets Session tests",
41 expect: 31,
42 config: {
43 configName: "kettle.tests.session.webSockets.config",
44 configPath: "%kettle/tests/configs"
45 },
46 components: {
47 wsRequest: {
48 type: "kettle.test.request.wsCookie",
49 options: {
50 path: "/socket_path"
51 }
52 },
53 badRequest: {
54 type: "kettle.test.request.ws",
55 options: {
56 path: "/socket_path"
57 }
58 }
59 }
60};
61
62kettle.tests.session.ws.testSocketResponse = function (data) {
63 var expected = {
64 type: "midSuccess",
65 payload: kettle.tests.session.response.midSuccess
66 };
67 jqUnit.assertDeepEq("Received session-qualified socket response in \"typed message\"", expected, data);
68};
69
70kettle.tests.session.ws.midSequence = [
71 {
72 func: "{wsRequest}.connect"
73 }, {
74 event: "{wsRequest}.events.onConnect",
75 listener: "jqUnit.assert",
76 args: "Received WebSockets connection event"
77 }, {
78 func: "{wsRequest}.send",
79 args: {
80 index: 0,
81 test: true
82 }
83 }, {
84 event: "{wsRequest}.events.onReceiveMessage",
85 listener: "kettle.tests.session.ws.testSocketResponse"
86 }, {
87 func: "{badRequest}.connect"
88 }, {
89 event: "{badRequest}.events.onError",
90 listener: "kettle.test.assertErrorResponse",
91 args: {
92 message: "Received 403 error for non-session qualified request to WebSockets endpoint",
93 errorTexts: "HTTP",
94 statusCode: 403,
95 string: "{arguments}.0",
96 request: "{badRequest}"
97 }
98 }
99];
100
101kettle.tests.session.ws.testDefs = fluid.extend(true, {}, kettle.tests.session.testDefs, kettle.tests.session.ws.proto);
102
103kettle.tests.session.ws.spliceSequence = function () {
104 // TODO: backport DISRUPTOR from GPII's CloudBasedOAuth2.js
105 kettle.test.insertIntoArray(kettle.tests.session.ws.testDefs.sequence, 8, kettle.tests.session.ws.midSequence);
106};
107
108kettle.tests.session.ws.spliceSequence();
109
110kettle.test.bootstrapServer(kettle.tests.session.ws.testDefs);