UNPKG

subscriptions-transport-ws

Version:
274 lines 10.4 kB
"use strict"; var chai_1 = require('chai'); var graphql_1 = require('graphql'); var graphql_subscriptions_1 = require('graphql-subscriptions'); var messageTypes_1 = require('../messageTypes'); var http_1 = require('http'); var server_1 = require('../server'); var client_1 = require('../client'); var data = { '1': { 'id': '1', 'name': 'Dan', }, '2': { 'id': '2', 'name': 'Marie', }, '3': { 'id': '3', 'name': 'Jessie', }, }; var userType = new graphql_1.GraphQLObjectType({ name: 'User', fields: { id: { type: graphql_1.GraphQLString }, name: { type: graphql_1.GraphQLString }, }, }); var schema = new graphql_1.GraphQLSchema({ query: new graphql_1.GraphQLObjectType({ name: 'Query', fields: { testString: { type: graphql_1.GraphQLString }, }, }), subscription: new graphql_1.GraphQLObjectType({ name: 'Subscription', fields: { user: { type: userType, args: { id: { type: graphql_1.GraphQLString }, }, resolve: function (_, _a) { var id = _a.id; return data[id]; }, }, userFiltered: { type: userType, args: { id: { type: graphql_1.GraphQLString }, }, resolve: function (_, _a) { var id = _a.id; return data[id]; }, }, error: { type: graphql_1.GraphQLString, resolve: function () { throw new Error('E1'); } }, }, }), }); var subscriptionManager = new graphql_subscriptions_1.SubscriptionManager({ schema: schema, setupFunctions: { 'userFiltered': function (options, args) { return ({ 'userFiltered': function (user) { return !args.id || user.id === args.id; }, }); }, }, }); var options = { subscriptionManager: subscriptionManager, onSubscribe: function (msg, params) { return params; }, }; var httpServer = http_1.createServer(function (request, response) { response.writeHead(404); response.end(); }); httpServer.listen(8080, function () { }); new server_1.default(options, httpServer); describe('Client', function () { it('removes subscription when it unsubscribes from it', function () { var client = new client_1.default('ws://localhost:8080/'); setTimeout(function () { var subId = client.subscribe({ query: "subscription useInfo($id: String) {\n user(id: $id) {\n id\n name\n }\n }", operationName: 'useInfo', variables: { id: 3, }, }, function (error, result) { }); client.unsubscribe(subId); chai_1.assert.notProperty(client.subscriptionHandlers, "" + subId); }, 100); }); it('should call error handler when graphql result has errors', function (done) { var client = new client_1.default('ws://localhost:8080/'); setTimeout(function () { client.subscribe({ query: "subscription useInfo{\n error\n }", operationName: 'useInfo', variables: {}, }, function (error, result) { if (error) { client.unsubscribeAll(); done(); } if (result) { client.unsubscribeAll(); chai_1.assert(false); } }); }, 100); setTimeout(function () { subscriptionManager.publish('error', {}); }, 200); }); }); describe('Server', function () { it('should send correct results to multiple clients with subscriptions', function (done) { var client = new client_1.default('ws://localhost:8080/'); var client1 = new client_1.default('ws://localhost:8080'); var numResults = 0; setTimeout(function () { client.subscribe({ query: "subscription useInfo($id: String) {\n user(id: $id) {\n id\n name\n }\n }", operationName: 'useInfo', variables: { id: 3, }, }, function (error, result) { if (error) { chai_1.assert(false); } if (result) { chai_1.assert.property(result, 'user'); chai_1.assert.equal(result.user.id, '3'); chai_1.assert.equal(result.user.name, 'Jessie'); numResults++; } else { } }); }, 100); var client11 = new client_1.default('ws://localhost:8080/'); var numResults1 = 0; setTimeout(function () { client11.subscribe({ query: "subscription useInfo($id: String) {\n user(id: $id) {\n id\n name\n }\n }", operationName: 'useInfo', variables: { id: 2, }, }, function (error, result) { if (error) { chai_1.assert(false); } if (result) { chai_1.assert.property(result, 'user'); chai_1.assert.equal(result.user.id, '2'); chai_1.assert.equal(result.user.name, 'Marie'); numResults1++; } }); }, 100); setTimeout(function () { subscriptionManager.publish('user', {}); }, 200); setTimeout(function () { client.unsubscribeAll(); chai_1.expect(numResults).to.equals(1); client1.unsubscribeAll(); chai_1.expect(numResults1).to.equals(1); done(); }, 300); }); it('should send a subscription_fail message to client with invalid query', function (done) { var client1 = new client_1.default('ws://localhost:8080/'); setTimeout(function () { client1.client.onmessage = function (message) { var messageData = JSON.parse(message.data); chai_1.assert.equal(messageData.type, messageTypes_1.SUBSCRIPTION_FAIL); chai_1.assert.isAbove(messageData.payload.errors.length, 0, 'Number of errors is greater than 0.'); done(); }; client1.subscribe({ query: "subscription useInfo($id: String) {\n user(id: $id) {\n id\n birthday\n }\n }", operationName: 'useInfo', variables: { id: 3, }, }, function (error, result) { }); }, 100); }); it('should set up the proper filters when subscribing', function (done) { var numTriggers = 0; var client3 = new client_1.default('ws://localhost:8080/'); var client4 = new client_1.default('ws://localhost:8080/'); setTimeout(function () { client3.subscribe({ query: "subscription userInfoFilter1($id: String) {\n userFiltered(id: $id) {\n id\n name\n }\n }", operationName: 'userInfoFilter1', variables: { id: 3, }, }, function (error, result) { if (error) { chai_1.assert(false); } if (result) { numTriggers += 1; chai_1.assert.property(result, 'userFiltered'); chai_1.assert.equal(result.userFiltered.id, '3'); chai_1.assert.equal(result.userFiltered.name, 'Jessie'); } }); client4.subscribe({ query: "subscription userInfoFilter1($id: String) {\n userFiltered(id: $id) {\n id\n name\n }\n }", operationName: 'userInfoFilter1', variables: { id: 1, }, }, function (error, result) { if (result) { numTriggers += 1; chai_1.assert.property(result, 'userFiltered'); chai_1.assert.equal(result.userFiltered.id, '1'); chai_1.assert.equal(result.userFiltered.name, 'Dan'); } if (error) { chai_1.assert(false); } }); }, 100); setTimeout(function () { subscriptionManager.publish('userFiltered', { id: 1 }); subscriptionManager.publish('userFiltered', { id: 2 }); subscriptionManager.publish('userFiltered', { id: 3 }); }, 200); setTimeout(function () { chai_1.assert.equal(numTriggers, 2); done(); }, 300); }); it('does not send more subscription data after client unsubscribes', function () { var client4 = new client_1.default('ws://localhost:8080/'); setTimeout(function () { var subId = client4.subscribe({ query: "subscription useInfo($id: String) {\n user(id: $id) {\n id\n name\n }\n }", operationName: 'useInfo', variables: { id: 3, }, }, function (error, result) { }); client4.unsubscribe(subId); }, 100); setTimeout(function () { subscriptionManager.publish('user', {}); }, 200); client4.client.onmessage = function (message) { if (JSON.parse(message.data).type === messageTypes_1.SUBSCRIPTION_DATA) { chai_1.assert(false); } }; }); }); //# sourceMappingURL=tests.js.map