@simplito/privmx-webendpoint
Version:
PrivMX Web Endpoint library
81 lines (80 loc) • 3.87 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const utils_1 = require("../__mocks__/utils");
const mockContainerSubscriber_1 = require("../__mocks__/mockContainerSubscriber");
const subscriptions_1 = require("../subscriptions");
const Types_1 = require("../../Types");
const constants_1 = require("../__mocks__/constants");
describe("Thread event manager", () => {
let { q, manager } = (0, utils_1.createTestSetup)();
let mockEventsManager = manager.getThreadEventManager(new mockContainerSubscriber_1.MockContainerSubscriber(q));
beforeEach(() => {
let { q: _q, manager } = (0, utils_1.createTestSetup)();
q = _q;
mockEventsManager = manager.getThreadEventManager(new mockContainerSubscriber_1.MockContainerSubscriber(q));
});
it("should create manager", async () => {
expect(mockEventsManager).toBeDefined();
expect(manager.dispatchers.length).toBe(1);
});
it("should add callback for event", async () => {
const sub = (0, subscriptions_1.createThreadSubscription)({
type: Types_1.ThreadEventType.THREAD_UPDATE,
id: "",
selector: Types_1.ThreadEventSelectorType.CONTEXT_ID,
callbacks: [() => { }],
});
await mockEventsManager.subscribeFor([sub]);
expect(mockEventsManager.listeners.size).toBe(1);
});
it("should function to remove callback from event", async () => {
const sub = (0, subscriptions_1.createThreadSubscription)({
type: Types_1.ThreadEventType.THREAD_UPDATE,
id: "",
selector: Types_1.ThreadEventSelectorType.CONTEXT_ID,
callbacks: [() => { }],
});
const [subId] = await mockEventsManager.subscribeFor([sub]);
expect(mockEventsManager.listeners.size).toBe(1);
await mockEventsManager.unsubscribeFrom([subId]);
expect(mockEventsManager.listeners.size).toBe(0);
});
it("should register multiple callbacks for channel", async () => {
const threadEventCb = jest.fn();
const sub = (0, subscriptions_1.createThreadSubscription)({
type: Types_1.ThreadEventType.THREAD_UPDATE,
id: "",
selector: Types_1.ThreadEventSelectorType.CONTEXT_ID,
callbacks: [threadEventCb, threadEventCb],
});
const [subId] = await mockEventsManager.subscribeFor([sub]);
q.dispatchEvent((0, constants_1.MOCK_THREAD_CREATED_EVENT)(subId));
//adding task on end of js event loop
await (0, utils_1.waitForNextTick)();
expect(threadEventCb).toHaveBeenCalledTimes(2);
});
it("should handle subscription for two channels", async () => {
const threadEventCb = jest.fn();
const messageEventCb = jest.fn();
const THREAD_ID = "98dsyvs87dybv9a87dyvb98";
const subA = (0, subscriptions_1.createThreadSubscription)({
type: Types_1.ThreadEventType.THREAD_CREATE,
id: "",
selector: Types_1.ThreadEventSelectorType.CONTEXT_ID,
callbacks: [threadEventCb],
});
const subB = (0, subscriptions_1.createThreadSubscription)({
type: Types_1.ThreadEventType.MESSAGE_DELETE,
id: THREAD_ID,
selector: Types_1.ThreadEventSelectorType.THREAD_ID,
callbacks: [messageEventCb],
});
const [subIdA, subIdB] = await mockEventsManager.subscribeFor([subA, subB]);
q.dispatchEvent((0, constants_1.MOCK_THREAD_CREATED_EVENT)(subIdA));
q.dispatchEvent((0, constants_1.MOCK_THREAD_MESSAGE_DELETED_EVENT)(THREAD_ID, subIdB));
//adding task on end of js event loop
await (0, utils_1.waitForNextTick)();
expect(threadEventCb).toHaveBeenCalledTimes(1);
expect(messageEventCb).toHaveBeenCalledTimes(1);
});
});