const ParsePubSub = require('../lib/LiveQuery/ParsePubSub').ParsePubSub; describe('ParsePubSub', function() { beforeEach(function(done) { // Mock RedisPubSub const mockRedisPubSub = { createPublisher: jasmine.createSpy('createPublisherRedis'), createSubscriber: jasmine.createSpy('createSubscriberRedis'), }; jasmine.mockLibrary( '../lib/Adapters/PubSub/RedisPubSub', 'RedisPubSub', mockRedisPubSub ); // Mock EventEmitterPubSub const mockEventEmitterPubSub = { createPublisher: jasmine.createSpy('createPublisherEventEmitter'), createSubscriber: jasmine.createSpy('createSubscriberEventEmitter'), }; jasmine.mockLibrary( '../lib/Adapters/PubSub/EventEmitterPubSub', 'EventEmitterPubSub', mockEventEmitterPubSub ); done(); }); it('can create redis publisher', function() { ParsePubSub.createPublisher({ redisURL: 'redisURL', }); const RedisPubSub = require('../lib/Adapters/PubSub/RedisPubSub') .RedisPubSub; const EventEmitterPubSub = require('../lib/Adapters/PubSub/EventEmitterPubSub') .EventEmitterPubSub; expect(RedisPubSub.createPublisher).toHaveBeenCalledWith({ redisURL: 'redisURL', }); expect(EventEmitterPubSub.createPublisher).not.toHaveBeenCalled(); }); it('can create event emitter publisher', function() { ParsePubSub.createPublisher({}); const RedisPubSub = require('../lib/Adapters/PubSub/RedisPubSub') .RedisPubSub; const EventEmitterPubSub = require('../lib/Adapters/PubSub/EventEmitterPubSub') .EventEmitterPubSub; expect(RedisPubSub.createPublisher).not.toHaveBeenCalled(); expect(EventEmitterPubSub.createPublisher).toHaveBeenCalled(); }); it('can create redis subscriber', function() { ParsePubSub.createSubscriber({ redisURL: 'redisURL', }); const RedisPubSub = require('../lib/Adapters/PubSub/RedisPubSub') .RedisPubSub; const EventEmitterPubSub = require('../lib/Adapters/PubSub/EventEmitterPubSub') .EventEmitterPubSub; expect(RedisPubSub.createSubscriber).toHaveBeenCalledWith({ redisURL: 'redisURL', }); expect(EventEmitterPubSub.createSubscriber).not.toHaveBeenCalled(); }); it('can create event emitter subscriber', function() { ParsePubSub.createSubscriber({}); const RedisPubSub = require('../lib/Adapters/PubSub/RedisPubSub') .RedisPubSub; const EventEmitterPubSub = require('../lib/Adapters/PubSub/EventEmitterPubSub') .EventEmitterPubSub; expect(RedisPubSub.createSubscriber).not.toHaveBeenCalled(); expect(EventEmitterPubSub.createSubscriber).toHaveBeenCalled(); }); it('can create publisher/sub with custom adapter', function() { const adapter = { createPublisher: jasmine.createSpy('createPublisher'), createSubscriber: jasmine.createSpy('createSubscriber'), }; ParsePubSub.createPublisher({ pubSubAdapter: adapter, }); expect(adapter.createPublisher).toHaveBeenCalled(); ParsePubSub.createSubscriber({ pubSubAdapter: adapter, }); expect(adapter.createSubscriber).toHaveBeenCalled(); const RedisPubSub = require('../lib/Adapters/PubSub/RedisPubSub') .RedisPubSub; const EventEmitterPubSub = require('../lib/Adapters/PubSub/EventEmitterPubSub') .EventEmitterPubSub; expect(RedisPubSub.createSubscriber).not.toHaveBeenCalled(); expect(EventEmitterPubSub.createSubscriber).not.toHaveBeenCalled(); expect(RedisPubSub.createPublisher).not.toHaveBeenCalled(); expect(EventEmitterPubSub.createPublisher).not.toHaveBeenCalled(); }); it('can create publisher/sub with custom function adapter', function() { const adapter = { createPublisher: jasmine.createSpy('createPublisher'), createSubscriber: jasmine.createSpy('createSubscriber'), }; ParsePubSub.createPublisher({ pubSubAdapter: function() { return adapter; }, }); expect(adapter.createPublisher).toHaveBeenCalled(); ParsePubSub.createSubscriber({ pubSubAdapter: function() { return adapter; }, }); expect(adapter.createSubscriber).toHaveBeenCalled(); const RedisPubSub = require('../lib/Adapters/PubSub/RedisPubSub') .RedisPubSub; const EventEmitterPubSub = require('../lib/Adapters/PubSub/EventEmitterPubSub') .EventEmitterPubSub; expect(RedisPubSub.createSubscriber).not.toHaveBeenCalled(); expect(EventEmitterPubSub.createSubscriber).not.toHaveBeenCalled(); expect(RedisPubSub.createPublisher).not.toHaveBeenCalled(); expect(EventEmitterPubSub.createPublisher).not.toHaveBeenCalled(); }); afterEach(function() { jasmine.restoreLibrary('../lib/Adapters/PubSub/RedisPubSub', 'RedisPubSub'); jasmine.restoreLibrary( '../lib/Adapters/PubSub/EventEmitterPubSub', 'EventEmitterPubSub' ); }); });