52 lines
1.7 KiB
TypeScript
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());
|
|
});
|
|
});
|