graphql-redis-subscriptions
Version:
A graphql-subscriptions PubSub Engine using redis
99 lines • 3.96 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var chai = require("chai");
var chaiAsPromised = require("chai-as-promised");
var simple_mock_1 = require("simple-mock");
var graphql_1 = require("graphql");
var iterall_1 = require("iterall");
var subscription_1 = require("graphql/subscription");
var redis_pubsub_1 = require("../redis-pubsub");
var with_filter_1 = require("../with-filter");
chai.use(chaiAsPromised);
var expect = chai.expect;
var FIRST_EVENT = 'FIRST_EVENT';
var SECOND_EVENT = 'SECOND_EVENT';
function buildSchema(iterator, patternIterator) {
return new graphql_1.GraphQLSchema({
query: new graphql_1.GraphQLObjectType({
name: 'Query',
fields: {
testString: {
type: graphql_1.GraphQLString,
resolve: function (_, args) {
return 'works';
},
},
},
}),
subscription: new graphql_1.GraphQLObjectType({
name: 'Subscription',
fields: {
testSubscription: {
type: graphql_1.GraphQLString,
subscribe: with_filter_1.withFilter(function () { return iterator; }, function () { return true; }),
resolve: function (root) {
return 'FIRST_EVENT';
},
},
testPatternSubscription: {
type: graphql_1.GraphQLString,
subscribe: with_filter_1.withFilter(function () { return patternIterator; }, function () { return true; }),
resolve: function (root) {
return 'SECOND_EVENT';
},
},
},
}),
});
}
describe('PubSubAsyncIterator', function () {
var query = graphql_1.parse("\n subscription S1 {\n testSubscription\n }\n ");
var patternQuery = graphql_1.parse("\n subscription S1 {\n testPatternSubscription\n }\n ");
var pubsub = new redis_pubsub_1.RedisPubSub();
var origIterator = pubsub.asyncIterator(FIRST_EVENT);
var origPatternIterator = pubsub.asyncIterator('SECOND*', { pattern: true });
var returnSpy = simple_mock_1.mock(origIterator, 'return');
var schema = buildSchema(origIterator, origPatternIterator);
before(function () {
pubsub.publish('WARM_UP', {});
});
after(function () {
pubsub.close();
});
it('should allow subscriptions', function () {
return subscription_1.subscribe(schema, query)
.then(function (ai) {
expect(iterall_1.isAsyncIterable(ai)).to.be.true;
var r = ai.next();
setTimeout(function () { return pubsub.publish(FIRST_EVENT, {}); }, 50);
return r;
})
.then(function (res) {
expect(res.value.data.testSubscription).to.equal('FIRST_EVENT');
});
});
it('should allow pattern subscriptions', function () {
return subscription_1.subscribe(schema, patternQuery)
.then(function (ai) {
expect(iterall_1.isAsyncIterable(ai)).to.be.true;
var r = ai.next();
setTimeout(function () { return pubsub.publish(SECOND_EVENT, {}); }, 50);
return r;
})
.then(function (res) {
expect(res.value.data.testPatternSubscription).to.equal('SECOND_EVENT');
});
});
it('should clear event handlers', function () {
return subscription_1.subscribe(schema, query)
.then(function (ai) {
expect(iterall_1.isAsyncIterable(ai)).to.be.true;
pubsub.publish(FIRST_EVENT, {});
return ai.return();
})
.then(function (res) {
expect(returnSpy.callCount).to.be.gte(1);
});
});
});
//# sourceMappingURL=integration-tests.js.map