Files
anouma/tests/meeting.test.ts
T

49 lines
2.2 KiB
TypeScript

import assert from "node:assert/strict";
import { test } from "node:test";
process.env.MEETING_SESSION_SECRET = "test-only-meeting-secret";
import { berlinParts } from "../lib/calendar/timezone";
import { combineDateAndTime, getMeetingStatus } from "../lib/meeting/status";
import { createMeetingToken, verifyMeetingToken } from "../lib/meeting/token";
test("meeting tokens round-trip and preserve their role", () => {
const issued = createMeetingToken({ eventSlug: "beratung", name: "Anna", role: "host", ttlMs: 60_000 });
const verified = verifyMeetingToken(issued.token);
assert.ok(verified);
assert.equal(verified.eventSlug, "beratung");
assert.equal(verified.participantId, issued.participantId);
assert.equal(verified.role, "host");
});
test("tampered and malformed meeting tokens are rejected", () => {
const issued = createMeetingToken({ eventSlug: "beratung", name: "Guest", role: "participant" });
assert.equal(verifyMeetingToken(`${issued.token}x`), null);
assert.equal(verifyMeetingToken("not-a-token"), null);
assert.equal(verifyMeetingToken({ token: issued.token }), null);
});
test("date-only and time-only Payload fields combine in Berlin time", () => {
// 08:00 in Berlin on a July date is 06:00 UTC (CEST).
const result = combineDateAndTime("2026-07-01T00:00:00.000Z", "2026-01-01T07:00:00.000Z");
assert.equal(result.toISOString(), "2026-07-01T06:00:00.000Z");
});
test("Berlin DST offsets are applied at both sides of the summer-time boundary", () => {
assert.equal(berlinParts(new Date("2026-01-15T12:00:00.000Z")).hour, 13);
assert.equal(berlinParts(new Date("2026-07-15T12:00:00.000Z")).hour, 14);
});
test("meeting status follows the join and close windows", () => {
const start = new Date("2026-07-01T10:00:00.000Z");
const end = new Date("2026-07-01T11:00:00.000Z");
const window = { start, end, joinWindowMinutes: 15, closeAfterMinutes: 10 };
assert.equal(getMeetingStatus({ ...window, now: new Date("2026-07-01T09:44:59.000Z") }), "scheduled");
assert.equal(getMeetingStatus({ ...window, now: new Date("2026-07-01T09:45:00.000Z") }), "open");
assert.equal(getMeetingStatus({ ...window, now: start }), "live");
assert.equal(getMeetingStatus({ ...window, now: new Date("2026-07-01T11:10:00.000Z") }), "ended");
});