UNPKG

acelga-bus

Version:

An extensible typescript message bus with support for middlewares

184 lines 6.89 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const receiver_1 = require("@src/corebus/receiver"); describe("Receiver", () => { let receiver; beforeEach(() => { receiver = new receiver_1.Receiver(); }); it("should allow to register to events", (done) => { receiver.on(CustomEvent, (event) => { expect(event).toBeInstanceOf(CustomEvent); done(); return Promise.resolve(); }); receiver.trigger(new CustomEvent()); }); it("should allow to register multiple times to events", (done) => { var handler1 = jest.fn((event) => { expect(event).toBeInstanceOf(CustomEvent); return Promise.resolve(); }); var handler2 = jest.fn((event) => { expect(event).toBeInstanceOf(CustomEvent); return Promise.resolve(); }); receiver.on(CustomEvent, handler1); receiver.on(CustomEvent, handler2); receiver.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) => { var handler1 = jest.fn((event) => { return Promise.resolve(); }); receiver.on(CustomEvent, handler1); receiver.on(OtherEvent, handler1); receiver.trigger(new CustomEvent()); receiver.trigger(new OtherEvent()); setTimeout(() => { expect(handler1.mock.calls.length).toBe(2); done(); }, 5); }); it("should execute the handler only one time per event, doesn't matter how may subscriptions is done", (done) => { var handler1 = jest.fn((event) => { expect(event).toBeInstanceOf(CustomEvent); return Promise.resolve(); }); receiver.on(CustomEvent, handler1); receiver.on(CustomEvent, handler1); receiver.trigger(new CustomEvent()); setTimeout(() => { expect(handler1.mock.calls.length).toBe(1); done(); }, 5); }); it("should send the correct envent", (done) => { receiver.on(CustomEvent, (event) => { expect(event).toBeInstanceOf(CustomEvent); done(); return Promise.resolve(); }); receiver.on(OtherEvent, (event) => { if (event instanceof CustomEvent) done.fail(new Error('wrong callbacl called')); return Promise.resolve(); }); receiver.trigger(new OtherEvent()); receiver.trigger(new CustomEvent()); }); it("should send all envents to global subscriptions", (done) => { receiver.onAny((event) => { expect(event).toBeInstanceOf(OtherEvent); done(); return Promise.resolve(); }); receiver.trigger(new OtherEvent()); }); it("should send all envents to global subscriptions", (done) => { receiver.onAny((event) => { expect(event).toBeInstanceOf(CustomEvent); done(); return Promise.resolve(); }); receiver.trigger(new CustomEvent()); }); it("should be able to clone itself and the clone should have the same subscriptions", (done) => { receiver.on(CustomEvent, (event) => { expect(event).toBeInstanceOf(CustomEvent); done(); return Promise.resolve(); }); receiver.on(OtherEvent, (event) => { if (event instanceof CustomEvent) done.fail(new Error('wrong callbacl called')); return Promise.resolve(); }); receiver.trigger(new OtherEvent()); receiver.trigger(new CustomEvent()); }); it("should allow to deregister a callback", (done) => { var handler = jest.fn((event) => { expect(event).toBeInstanceOf(CustomEvent); return Promise.resolve(); }); receiver.on(CustomEvent, handler); receiver.off(CustomEvent, handler); receiver.trigger(new CustomEvent()); setTimeout(() => { expect(handler.mock.calls.length).toBe(0); done(); }, 5); }); it("should allow to deregister all callbackks from an event", (done) => { var handler = jest.fn((event) => { expect(event).toBeInstanceOf(CustomEvent); return Promise.resolve(); }); receiver.on(CustomEvent, handler); receiver.off(CustomEvent); receiver.trigger(new CustomEvent()); setTimeout(() => { expect(handler.mock.calls.length).toBe(0); done(); }, 5); }); it("should execute middlewares", (done) => { let receiver = new receiver_1.Receiver(); var handler = jest.fn((event) => { expect(event).toEqual(new NumberEvent(-5.5)); done(); return Promise.resolve(); }); receiver.on(NumberEvent, handler); receiver.pushMiddleware(event => Promise.resolve(new NumberEvent(event.n * 3))); receiver.unshiftMiddleware(event => new NumberEvent(event.n / 2)); receiver.pushMiddleware(event => Promise.resolve(new NumberEvent(event.n - 10))); receiver.trigger(new NumberEvent(3)); }); it("should not execute the handler if a middleware returns void", (done) => { failTestIfMiddlewareDelivered(receiver, undefined, done); }); it("should not execute the handler if a middleware returns 0", (done) => { failTestIfMiddlewareDelivered(receiver, 0, done); }); it("should not execute the handler if a middleware returns \"\"", (done) => { failTestIfMiddlewareDelivered(receiver, "", done); }); it("should not execute the handler if a middleware returns NaN", (done) => { failTestIfMiddlewareDelivered(receiver, NaN, done); }); it("should allow to deregister from a non existent event without throw", () => { expect(() => receiver.off(CustomEvent)).not.toThrow(); expect(() => receiver.off(CustomEvent, () => { })).not.toThrow(); expect(() => receiver.trigger(new CustomEvent())).not.toThrow(); }); }); class NumberEvent { constructor(n) { this.n = n; } } class CustomEvent { } ; class OtherEvent { } ; function failTestIfMiddlewareDelivered(receiver, item, done) { var handler = jest.fn((event) => { done.fail(); return Promise.resolve(); }); receiver.on(CustomEvent, handler); receiver.pushMiddleware(event => Promise.resolve(item)); receiver.trigger(new CustomEvent()); setTimeout(() => { expect(handler.mock.calls.length).toBe(0); done(); }, 5); } //# sourceMappingURL=receiver.spec.js.map