import { describe, expect, test } from "bun:test"; import { MAX_TOPICS, normalizeTopics, parseTopics, TopicError } from "./topics"; describe("repository topics", () => { test("normalizes case, separators and duplicates", () => { expect(normalizeTopics("Rust, web_assembly cli,rust")).toEqual(["rust", "web-assembly", "cli"]); expect(normalizeTopics(["Machine Learning", "", "ml"])).toEqual(["machine-learning", "ml"]); }); test("rejects invalid, overlong and too many topics", () => { expect(() => normalizeTopics(["-leading"])).toThrow(TopicError); expect(() => normalizeTopics(["c++"])).toThrow(TopicError); expect(() => normalizeTopics(["a".repeat(51)])).toThrow(TopicError); expect(() => normalizeTopics(Array.from({ length: MAX_TOPICS + 1 }, (_, index) => `t${index}`))).toThrow( TopicError, ); }); test("parses the stored column defensively", () => { expect(parseTopics('["a","b"]')).toEqual(["a", "b"]); expect(parseTopics("not json")).toEqual([]); expect(parseTopics('{"a":1}')).toEqual([]); expect(parseTopics(null)).toEqual([]); }); });