Files
HiveGrid-Wireframes/03 Quellen und Referenzen/hivegrid-cloud/apps/web/app/services/dashboard/dashboardEvents.server.test.ts
T

54 lines
2.1 KiB
TypeScript

import { beforeEach, describe, expect, it, vi } from "vitest";
const testEmitter = vi.hoisted(() => {
// eslint-disable-next-line @typescript-eslint/no-require-imports
const { EventEmitter: HoistedEventEmitter } = require("events") as typeof import("events");
return new HoistedEventEmitter();
});
vi.mock("~/utils/stream/emitter.server", () => ({
emitter: testEmitter,
}));
import { dashboardChannel, publishDashboardChange, subscribeToDashboardChanges } from "./dashboardEvents.server";
import { publishProjectBoardChange } from "~/utils/integrations/projects/projectBoardEvents.server";
describe("dashboardEvents.server", () => {
beforeEach(() => {
testEmitter.removeAllListeners();
});
it("delivers published changes to subscribers of the same tenant only", () => {
const received: string[] = [];
const otherTenant: string[] = [];
const unsubscribe = subscribeToDashboardChanges("tenant-a", (payload) => received.push(payload));
subscribeToDashboardChanges("tenant-b", (payload) => otherTenant.push(payload));
publishDashboardChange({ tenantId: "tenant-a", source: "projects" });
expect(received).toHaveLength(1);
expect(otherTenant).toHaveLength(0);
const change = JSON.parse(received[0]!) as { source: string; at: string };
expect(change.source).toBe("projects");
expect(new Date(change.at).getTime()).not.toBeNaN();
unsubscribe();
publishDashboardChange({ tenantId: "tenant-a", source: "projects" });
expect(received).toHaveLength(1);
});
it("uses a tenant-scoped channel name", () => {
expect(dashboardChannel("tenant-a")).toBe("dashboard:tenant-a");
});
it("receives a dashboard change when a project board change is published (R-P11b live wiring)", () => {
const received: string[] = [];
subscribeToDashboardChanges("tenant-a", (payload) => received.push(payload));
publishProjectBoardChange({ tenantId: "tenant-a", pipelineId: "pipeline-1", projectId: "project-1", type: "stage_changed" });
expect(received).toHaveLength(1);
expect((JSON.parse(received[0]!) as { source: string }).source).toBe("projects");
});
});