/* Unit tests for ai covering buildAiTxt. It also guards the documented public contract and regression-sensitive edge cases. Not a contract source of truth — the module under test owns the authoritative behavior; fixtures are minimal scaffolding only. RFC-1311: Compass header sweep — declares the ai suite's contract for test-file scaffold coverage. */ import { describe, expect, it } from "vitest"; import { buildAiTxt } from "../ai.ts"; describe("buildAiTxt", () => { it("generates header from siteUrl", () => { const result = buildAiTxt({ policy: "allow" }, "https://example.com"); expect(result).toContain("# ai.txt for example.com"); expect(result).toContain("policy: allow"); }); it("includes version and updated", () => { const result = buildAiTxt( { policy: "allow", version: "1.0", updated: "2024-01-01" }, "https://example.com", ); expect(result).toContain("version: 1.0"); expect(result).toContain("updated: 2024-01-01"); }); it("includes optional fields when provided", () => { const result = buildAiTxt( { policy: "limited", training: "disallow", usage: ["search", "summarization"], commercial: "no", attribution: "required", license: "CC-BY-4.0", }, "https://example.com", ); expect(result).toContain("training: disallow"); expect(result).toContain("usage: search, summarization"); expect(result).toContain("commercial: no"); expect(result).toContain("attribution: required"); expect(result).toContain("license: CC-BY-4.0"); }); it("emits provider sections", () => { const result = buildAiTxt( { policy: "allow", providers: [ { name: "OpenAI", policy: "disallow", training: "disallow" }, { name: "Anthropic", policy: "allow", url: "https://anthropic.com" }, ], }, "https://example.com", ); expect(result).toContain("[OpenAI]"); expect(result).toContain("[Anthropic]"); expect(result).toContain("url: https://anthropic.com"); }); it("includes url and contact in header comments", () => { const result = buildAiTxt( { policy: "allow", url: "https://example.com/policy", contact: "info@example.com", }, "https://example.com", ); expect(result).toContain("# See: https://example.com/policy"); expect(result).toContain("# Contact: info@example.com"); }); });