Files
2026-04-05 20:36:24 +01:00

52 lines
1.7 KiB
TypeScript

import { describe, expect, it } from "vitest";
import { listChannelCatalogEntries } from "../plugins/channel-catalog-registry.js";
import {
CHAT_CHANNEL_ALIASES,
CHAT_CHANNEL_ORDER,
normalizeChatChannelId,
type ChatChannelId,
} from "./ids.js";
function collectBundledChatChannelAliases(): Record<string, ChatChannelId> {
const aliases = new Map<string, ChatChannelId>();
for (const entry of listChannelCatalogEntries({ origin: "bundled" })) {
const channel = entry.channel;
const rawId = channel?.id?.trim();
if (!rawId || !CHAT_CHANNEL_ORDER.includes(rawId)) {
continue;
}
const channelId = rawId;
if (!channel) {
continue;
}
for (const alias of channel.aliases ?? []) {
const normalizedAlias = alias.trim().toLowerCase();
if (!normalizedAlias) {
continue;
}
aliases.set(normalizedAlias, channelId);
}
}
return Object.fromEntries(
[...aliases.entries()].toSorted(([left], [right]) => left.localeCompare(right)),
) as Record<string, ChatChannelId>;
}
describe("channel ids", () => {
it("normalizes built-in aliases + trims whitespace", () => {
expect(normalizeChatChannelId(" imsg ")).toBe("imessage");
expect(normalizeChatChannelId("gchat")).toBe("googlechat");
expect(normalizeChatChannelId("google-chat")).toBe("googlechat");
expect(normalizeChatChannelId("internet-relay-chat")).toBe("irc");
expect(normalizeChatChannelId("telegram")).toBe("telegram");
expect(normalizeChatChannelId("web")).toBeNull();
expect(normalizeChatChannelId("nope")).toBeNull();
});
it("matches bundled built-in channel alias metadata", () => {
expect(CHAT_CHANNEL_ALIASES).toEqual(collectBundledChatChannelAliases());
});
});