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([]);
});
});