/*
Unit tests for llms covering buildLlmsIndex; buildLlmsFull. 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 llms suite's contract for test-file scaffold coverage.
*/
import { describe, expect, it } from "vitest";
import { buildLlmsFull, buildLlmsIndex } from "../llms.ts";
import { makePage } from "./helpers.ts";
import type { SemanticSiteModel } from "../models.ts";
import type { SemanticClaimProvenance } from "../business-projection.ts";
function makeSite(overrides: Partial = {}): SemanticSiteModel {
const page = makePage();
return {
organization: page.organization,
baseUrl: "https://example.com",
defaultLanguage: "de",
lang: "de",
pages: [page],
...overrides,
};
}
describe("buildLlmsIndex", () => {
it("produces llms.txt with site name and description", () => {
const site = makeSite();
const result = buildLlmsIndex(site);
expect(result).toContain("# Warpgogol");
expect(result).toContain("Digital infrastructure for nonprofits");
expect(result).toContain("## Primary sources");
});
it("includes llms-full.txt reference", () => {
const site = makeSite();
const result = buildLlmsIndex(site);
expect(result).toContain("llms-full.txt");
});
it("includes page links with absolute URLs", () => {
const site = makeSite();
const result = buildLlmsIndex(site);
expect(result).toContain("https://example.com");
});
it("filters out excluded pages from index", () => {
const page = makePage({
output: {
sitemap: { include: true, category: "content", includeLastmod: true },
llms: { depth: "exclude" },
robots: { index: true, follow: true },
},
});
const site = makeSite({ pages: [page] });
const result = buildLlmsIndex(site);
expect(result).not.toContain("Test Page");
});
it("includes agent discovery links when agent.enabled is not false", () => {
const site = makeSite();
const result = buildLlmsIndex(site);
expect(result).toContain("agent.json");
});
it("omits agent discovery links when agent.enabled is false", () => {
const site = makeSite({ agent: { enabled: false } } as never);
const result = buildLlmsIndex(site);
expect(result).not.toContain("agent.json");
});
it("includes organization facts section", () => {
const site = makeSite();
const result = buildLlmsIndex(site);
expect(result).toContain("## Organization");
});
});
describe("buildLlmsFull", () => {
it("produces llms-full.txt with site name and description", () => {
const site = makeSite();
const result = buildLlmsFull(site);
expect(result).toContain("# Warpgogol");
expect(result).toContain("Digital infrastructure for nonprofits");
});
it("includes page sections for full depth pages", () => {
const site = makeSite();
const result = buildLlmsFull(site);
expect(result).toContain("## Test Heading");
});
it("includes page header but not body for summary depth", () => {
const page = makePage({
output: {
sitemap: { include: true, category: "content", includeLastmod: true },
llms: { depth: "summary" },
robots: { index: true, follow: true },
},
});
const site = makeSite({ pages: [page] });
const result = buildLlmsFull(site);
expect(result).toContain("## Test Heading");
expect(result).toContain("URL:");
expect(result).toContain("Description:");
});
it("filters out excluded pages", () => {
const page = makePage({
output: {
sitemap: { include: true, category: "content", includeLastmod: true },
llms: { depth: "exclude" },
robots: { index: true, follow: true },
},
});
const site = makeSite({ pages: [page] });
const result = buildLlmsFull(site);
expect(result).not.toContain("## Test Page");
});
it("includes organization facts section", () => {
const site = makeSite();
const result = buildLlmsFull(site);
expect(result).toContain("## Organization facts");
});
it("includes claims section when claims are present", () => {
const claims: SemanticClaimProvenance[] = [
{
id: "c1",
claimClass: "factual",
claimKind: "fact",
statement: "We are certified",
verificationLevel: "N2",
confidence: "high",
evidence: [{ id: "ev1", kind: "certificate", label: "ISO 27001", sha256: "abc123" }],
},
];
const site = makeSite({ claims });
const result = buildLlmsFull(site);
expect(result).toContain("## Claims");
expect(result).toContain("### We are certified");
expect(result).toContain("- Class: factual");
expect(result).toContain("- Verification: N2");
expect(result).toContain("- Confidence: high");
expect(result).toContain("- Evidence:");
expect(result).toContain("certificate: ISO 27001");
expect(result).toContain("sha256: abc123");
});
it("omits claims section when no claims", () => {
const site = makeSite();
const result = buildLlmsFull(site);
expect(result).not.toContain("## Claims");
});
it("shows Evidence: none when claim has no evidence", () => {
const claims: SemanticClaimProvenance[] = [
{
id: "c1",
claimClass: "factual",
claimKind: "fact",
statement: "Unevidenced claim",
evidence: [],
},
];
const site = makeSite({ claims });
const result = buildLlmsFull(site);
expect(result).toContain("- Evidence: none");
});
});