package repository import ( "context" "path/filepath" "testing" "time" "billing/internal/collection" ) func TestRequestDetailProjectionBackfillsExistingFacts(t *testing.T) { path := filepath.Join(t.TempDir(), "usage.db") store, err := OpenSQLiteUsage(path) if err != nil { t.Fatal(err) } startedAt := time.Date(2026, 8, 15, 12, 0, 0, 0, time.UTC) if err := store.Insert(context.Background(), collection.Record{RequestedAt: startedAt.Add(5 * time.Millisecond), APIKey: "000000", Model: "deepseek-v4-flash", TotalTokens: 99}); err != nil { t.Fatal(err) } if err := store.UpsertRequest(context.Background(), collection.RequestRecord{RequestID: "migrated-request", RequestedAt: startedAt, CompletedAt: startedAt.Add(time.Second), Model: "deepseek-v4-flash", Outcome: "succeeded", StatusCode: 200, Endpoint: "/v1/responses"}); err != nil { t.Fatal(err) } if _, err := store.db.Exec(`DELETE FROM request_detail_index`); err != nil { t.Fatal(err) } if _, err := store.db.Exec(`DELETE FROM cpa_ext_migrations WHERE name=?`, requestDetailProjectionMigration); err != nil { t.Fatal(err) } if err := store.Close(); err != nil { t.Fatal(err) } reopened, err := OpenSQLiteUsage(path) if err != nil { t.Fatal(err) } defer reopened.Close() page, err := reopened.QueryUsage(context.Background(), collection.UsageQuery{RequestID: "migrated-request", PageSize: 100}) if err != nil { t.Fatal(err) } if page.Total != 1 || len(page.Records) != 1 || page.Records[0].TotalTokens != 99 || page.Records[0].StatusCode != 200 { t.Fatalf("backfilled projection mismatch: %+v", page) } }