53 lines
1.6 KiB
JavaScript
53 lines
1.6 KiB
JavaScript
const assert = require('assert');
|
|
const { RedisMessageBus } = require('../../lib/pubsub/redis');
|
|
const { EventEmitter } = require('events');
|
|
const sinon = require('sinon');
|
|
|
|
describe('RedisMessageBus', () => {
|
|
let pubClient, subClient, messageBus, publishSpy, subscribeSpy;
|
|
|
|
beforeEach(() => {
|
|
pubClient = { publish: () => {} };
|
|
subClient = new EventEmitter();
|
|
|
|
subClient.subscribe = () => {};
|
|
subscribeSpy = sinon.spy(subClient, 'subscribe');
|
|
|
|
publishSpy = sinon.spy(pubClient, 'publish');
|
|
|
|
messageBus = new RedisMessageBus(pubClient, subClient, 'test');
|
|
|
|
subClient.emit('ready');
|
|
});
|
|
|
|
describe('#onMessage', () => {
|
|
it('processes a valid message', done => {
|
|
messageBus.once('testEvent', payload => {
|
|
assert(subscribeSpy.withArgs('test').calledOnce);
|
|
assert.deepStrictEqual(payload, { foo: 'bar' });
|
|
|
|
done();
|
|
});
|
|
|
|
messageBus.onMessage('test', '{"event":"testEvent","payload":{"foo":"bar"}}');
|
|
});
|
|
|
|
it('processes a syntactically invalid message', done => {
|
|
messageBus.onMessage('test', 'not valid json lol');
|
|
|
|
done();
|
|
});
|
|
});
|
|
|
|
describe('#emit', () => {
|
|
it('emits messages', () => {
|
|
messageBus.emit('testEvent', { foo: 'bar' });
|
|
|
|
assert(publishSpy.withArgs('test', sinon.match(arg => {
|
|
arg = JSON.parse(arg);
|
|
return arg.event === 'testEvent' && arg.payload.foo === 'bar';
|
|
})).calledOnce);
|
|
});
|
|
});
|
|
});
|