@simplito/privmx-webendpoint
Version:
PrivMX Web Endpoint library
64 lines (63 loc) • 3.07 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const index_1 = require("../../index");
const constants_1 = require("../__mocks__/constants");
const mockContainerSubscriber_1 = require("../__mocks__/mockContainerSubscriber");
const utils_1 = require("../__mocks__/utils");
const subscriptions_1 = require("../subscriptions");
describe("Custom event manager", () => {
let { q, manager } = (0, utils_1.createTestSetup)();
let customEventsManager = manager.getCustomEventsManager(new mockContainerSubscriber_1.MockContainerSubscriber(q));
beforeEach(() => {
let { q: _q, manager: _manager } = (0, utils_1.createTestSetup)();
q = _q;
manager = _manager;
customEventsManager = _manager.getCustomEventsManager(new mockContainerSubscriber_1.MockContainerSubscriber(q));
});
it("dispatches custom events to registered callbacks", async () => {
const subscriber = new mockContainerSubscriber_1.MockContainerSubscriber(q);
const buildQuerySpy = jest
.spyOn(subscriber, "buildSubscriptionQuery")
.mockImplementation(async (channel, selector, selectorId) => {
expect(channel).toBe("custom-channel");
expect(selector).toBe(index_1.Types.EventsEventSelectorType.CONTEXT_ID);
expect(selectorId).toBe("ctx-1");
return `${channel}|${selectorId}`;
});
const managerWithSpy = manager.getCustomEventsManager(subscriber);
const callback = jest.fn();
const subscription = (0, subscriptions_1.createEventSubscription)({
channel: "custom-channel",
selector: index_1.Types.EventsEventSelectorType.CONTEXT_ID,
id: "ctx-1",
callbacks: [callback],
});
const [subscriptionId] = await managerWithSpy.subscribeFor([subscription]);
expect(buildQuerySpy).toHaveBeenCalled();
q.dispatchEvent((0, constants_1.MOCK_CUSTOM_EVENT)(subscriptionId));
await (0, utils_1.waitForNextTick)();
expect(callback).toHaveBeenCalledTimes(1);
const eventArg = callback.mock.calls[0][0];
expect(eventArg.data).toEqual({
contextId: "ctx-1",
userId: "user-1",
payload: new Uint8Array([1, 2, 3]),
statusCode: 0,
schemaVersion: 5,
});
});
it("stops invoking callbacks after unsubscribe", async () => {
const callback = jest.fn();
const subscription = (0, subscriptions_1.createEventSubscription)({
channel: "custom-channel",
selector: index_1.Types.EventsEventSelectorType.CONTEXT_ID,
id: "ctx-1",
callbacks: [callback],
});
const [subscriptionId] = await customEventsManager.subscribeFor([subscription]);
await customEventsManager.unsubscribeFrom([subscriptionId]);
q.dispatchEvent((0, constants_1.MOCK_CUSTOM_EVENT)(subscriptionId));
await (0, utils_1.waitForNextTick)();
expect(callback).not.toHaveBeenCalled();
});
});