thread-master/apps/backend/internal/module/radar/usecase/accuracy_fixture_test.go

56 lines
1.6 KiB
Go
Raw Permalink Normal View History

2026-08-13 02:22:24 +00:00
package usecase
import (
"encoding/json"
"os"
"strings"
"testing"
)
type accuracyCase struct {
ID string `json:"id"`
Text string `json:"text"`
ProductTerms []string `json:"product_terms"`
ExpectedDemand bool `json:"expected_demand"`
ExpectedProductEvidence bool `json:"expected_product_evidence"`
ExpectedExclude bool `json:"expected_exclude"`
ExpectedStale bool `json:"expected_stale"`
ExpectedUnknownTime bool `json:"expected_unknown_time"`
}
func loadAccuracyCases(t *testing.T) []accuracyCase {
t.Helper()
raw, err := os.ReadFile("testdata/opportunity_inbox_accuracy.json")
if err != nil {
t.Fatal(err)
}
var cases []accuracyCase
if err := json.Unmarshal(raw, &cases); err != nil {
t.Fatal(err)
}
return cases
}
func TestAccuracyFixtureSchema(t *testing.T) {
cases := loadAccuracyCases(t)
if len(cases) < 10 {
t.Fatalf("fixture needs at least 10 cases, got %d", len(cases))
}
seen := map[string]bool{}
for _, item := range cases {
if item.ID == "" || seen[item.ID] || strings.TrimSpace(item.Text) == "" {
t.Fatalf("invalid or duplicate case: %+v", item)
}
seen[item.ID] = true
if item.ExpectedDemand && len(item.ProductTerms) == 0 {
t.Fatalf("demand case lacks product evidence: %s", item.ID)
}
if item.ExpectedExclude && item.ExpectedDemand {
t.Fatalf("exclude case cannot be demand: %s", item.ID)
}
if strings.Contains(strings.ToLower(item.Text), "bearer ") || strings.Contains(item.Text, "sk-") {
t.Fatalf("fixture contains token-like text: %s", item.ID)
}
}
}