acelga-bus
Version:
An extensible typescript message bus with support for middlewares
174 lines • 6.34 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const dispatcher_1 = require("@src/corebus/dispatcher");
class CustomEvent {
}
class OtherEvent {
}
describe('Receiver', () => {
let dispatcher;
beforeEach(() => {
dispatcher = new dispatcher_1.Dispatcher();
});
it('should allow to register to events', (done) => {
dispatcher.on(CustomEvent, (event) => {
expect(event).toBeInstanceOf(CustomEvent);
done();
return Promise.resolve();
});
dispatcher.trigger(new CustomEvent());
});
it('should allow to register multiple times to events', (done) => {
const handler1 = jest.fn((event) => {
expect(event).toBeInstanceOf(CustomEvent);
return Promise.resolve();
});
const handler2 = jest.fn((event) => {
expect(event).toBeInstanceOf(CustomEvent);
return Promise.resolve();
});
dispatcher.on(CustomEvent, handler1);
dispatcher.on(CustomEvent, handler2);
dispatcher.trigger(new CustomEvent());
setTimeout(() => {
expect(handler1.mock.calls.length).toBe(1);
expect(handler2.mock.calls.length).toBe(1);
done();
}, 5);
});
it('should call the handler one time per event', (done) => {
const handler1 = jest.fn((event) => {
return Promise.resolve();
});
dispatcher.on(CustomEvent, handler1);
dispatcher.on(OtherEvent, handler1);
dispatcher.trigger(new CustomEvent());
dispatcher.trigger(new OtherEvent());
setTimeout(() => {
expect(handler1.mock.calls.length).toBe(2);
done();
}, 5);
});
it('should not call the callback if there is a falsable variable in the trigger method', (done) => {
const handler1 = jest.fn((event) => {
return Promise.resolve();
});
dispatcher.on(CustomEvent, handler1);
dispatcher.trigger(null);
dispatcher.trigger(NaN);
dispatcher.trigger(undefined);
dispatcher.trigger(0);
setTimeout(() => {
expect(handler1.mock.calls.length).toBe(0);
done();
}, 15);
});
it('should not call', (done) => {
const handler1 = jest.fn((event) => {
return Promise.resolve();
});
dispatcher.on(CustomEvent, handler1);
dispatcher.trigger(null);
setTimeout(() => {
expect(handler1.mock.calls.length).toBe(0);
done();
}, 15);
});
it('should execute the handler only one time per event, doesn\'t matter how may subscriptions is done', (done) => {
const handler1 = jest.fn((event) => {
expect(event).toBeInstanceOf(CustomEvent);
return Promise.resolve();
});
dispatcher.on(CustomEvent, handler1);
dispatcher.on(CustomEvent, handler1);
dispatcher.trigger(new CustomEvent());
setTimeout(() => {
expect(handler1.mock.calls.length).toBe(1);
done();
}, 5);
});
it('should send the correct envent', (done) => {
dispatcher.on(CustomEvent, (event) => {
expect(event).toBeInstanceOf(CustomEvent);
done();
return Promise.resolve();
});
dispatcher.on(OtherEvent, (event) => {
if (event instanceof CustomEvent)
done.fail(new Error('wrong callbacl called'));
return Promise.resolve();
});
dispatcher.trigger(new OtherEvent());
dispatcher.trigger(new CustomEvent());
});
it('should send all envents to global subscriptions', (done) => {
dispatcher.onAny((event) => {
expect(event).toBeInstanceOf(OtherEvent);
done();
return Promise.resolve();
});
dispatcher.trigger(new OtherEvent());
});
it('should send all envents to global subscriptions', (done) => {
dispatcher.onAny((event) => {
expect(event).toBeInstanceOf(CustomEvent);
done();
return Promise.resolve();
});
dispatcher.trigger(new CustomEvent());
});
it('should be able to clone itself and the clone should have the same subscriptions', (done) => {
dispatcher.on(CustomEvent, (event) => {
expect(event).toBeInstanceOf(CustomEvent);
done();
return Promise.resolve();
});
dispatcher.on(OtherEvent, (event) => {
if (event instanceof CustomEvent)
done.fail(new Error('wrong callbacl called'));
return Promise.resolve();
});
dispatcher.trigger(new OtherEvent());
dispatcher.trigger(new CustomEvent());
});
it('should allow to deregister a callback', (done) => {
const handler = jest.fn((event) => {
expect(event).toBeInstanceOf(CustomEvent);
return Promise.resolve();
});
dispatcher.on(CustomEvent, handler);
dispatcher.off(CustomEvent, handler);
dispatcher.trigger(new CustomEvent());
setTimeout(() => {
expect(handler.mock.calls.length).toBe(0);
done();
}, 5);
});
it('should allow to deregister all callbacks from an event', (done) => {
const handler = jest.fn((event) => {
expect(event).toBeInstanceOf(CustomEvent);
return Promise.resolve();
});
dispatcher.on(CustomEvent, handler);
dispatcher.off(CustomEvent);
dispatcher.trigger(new CustomEvent());
setTimeout(() => {
expect(handler.mock.calls.length).toBe(0);
done();
}, 5);
});
it('should allow deregister any callbackks if the callback is not found', (done) => {
const handler = jest.fn((event) => {
expect(event).toBeInstanceOf(CustomEvent);
return Promise.resolve();
});
dispatcher.on(CustomEvent, handler);
dispatcher.off(OtherEvent, handler);
dispatcher.trigger(new CustomEvent());
setTimeout(() => {
expect(handler.mock.calls.length).toBe(1);
done();
}, 15);
});
});
//# sourceMappingURL=dispatcher.spec.js.map