Files
cpa-plugin/internal/repository/sqlite_query_migration_test.go
2026-08-15 22:31:12 +08:00

48 lines
1.6 KiB
Go

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)
}
}