//go:build llm_script package main import ( "bytes" "strings" "testing" "time" ) func TestBuildOfficialImportSignatureAuditViewQueryIncludesWindowAndFilters(t *testing.T) { query, args := buildOfficialImportSignatureAuditViewQuery(5, "vertex_pricing_signature", true) for _, want := range []string{ "FROM official_import_signature_audit_recent_view", "recent_rank <= $1", "source_key = $2", "structure_changed = TRUE", } { if !strings.Contains(query, want) { t.Fatalf("query 缺少 %q,实际: %s", want, query) } } if len(args) != 2 { t.Fatalf("参数个数错误: %d", len(args)) } if args[0] != 5 || args[1] != "vertex_pricing_signature" { t.Fatalf("参数错误: %#v", args) } } func TestRenderOfficialImportSignatureAuditReportPrintsSummaryAndRows(t *testing.T) { summaries := []officialImportSignatureAuditSourceSummary{ { SourceKey: "cloudflare_pricing_signature", RunsInWindow: 5, ChangedRuns: 2, LatestCheckedAt: time.Date(2026, 5, 15, 20, 0, 0, 0, time.UTC), LatestStatus: "passed", LatestStructureState: "stable", }, } rows := []officialImportSignatureAuditViewRow{ { SourceKey: "cloudflare_pricing_signature", RecentRank: 1, CheckedAt: time.Date(2026, 5, 15, 20, 0, 0, 0, time.UTC), Status: "passed", StructureState: "stable", StructureChanged: false, StructureSHA256: "abc123", }, { SourceKey: "cloudflare_pricing_signature", RecentRank: 2, CheckedAt: time.Date(2026, 5, 14, 20, 0, 0, 0, time.UTC), Status: "drift_detected", StructureState: "changed", StructureChanged: true, StructureSHA256: "def456", }, } var out bytes.Buffer renderOfficialImportSignatureAuditReport(&out, 5, "", false, summaries, rows) output := out.String() for _, want := range []string{ "Official Import Signature Audit Report", "window_per_source=5", "cloudflare_pricing_signature", "changed_runs=2", "recent_rank=2", "state=changed", "sha=def456", } { if !strings.Contains(output, want) { t.Fatalf("输出缺少 %q,实际: %q", want, output) } } }