Generator-emitted scaffold (pnpm turbo gen core-package realtime) plus the story-00-precedent coverage repairs (coverage provider devDep, symbols.ts exclude + tested allowlist mirror) and three minimal tests covering generator-emitted realtime code the template suite misses. Squash of 31d85e0 + review-fix cf11b38. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016j8z4VHjedXDTjEDNg7qHK
36 lines
1.1 KiB
TypeScript
36 lines
1.1 KiB
TypeScript
import { describe, it, expect } from "vitest";
|
|
import { matchChannelTemplate } from "@/channel-template";
|
|
|
|
describe("matchChannelTemplate", () => {
|
|
it("matches a plain channel name exactly", () => {
|
|
expect(matchChannelTemplate("blog.feed", "blog.feed")).toEqual({
|
|
params: {},
|
|
});
|
|
expect(matchChannelTemplate("blog.feed", "blog.other")).toBeNull();
|
|
});
|
|
|
|
it("matches a templated channel and extracts params", () => {
|
|
expect(
|
|
matchChannelTemplate(
|
|
"notifications.user.{userId}",
|
|
"notifications.user.user_42",
|
|
),
|
|
).toEqual({ params: { userId: "user_42" } });
|
|
});
|
|
|
|
it("returns null when a templated channel doesn't match the shape", () => {
|
|
expect(
|
|
matchChannelTemplate("notifications.user.{userId}", "notifications.user"),
|
|
).toBeNull();
|
|
expect(
|
|
matchChannelTemplate("notifications.user.{userId}", "blog.feed"),
|
|
).toBeNull();
|
|
});
|
|
|
|
it("supports multiple placeholders", () => {
|
|
expect(
|
|
matchChannelTemplate("rooms.{roomId}.user.{userId}", "rooms.r1.user.u1"),
|
|
).toEqual({ params: { roomId: "r1", userId: "u1" } });
|
|
});
|
|
});
|