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" } });
  });
});
