package usage import ( "context" "testing" "time" coreusage "github.com/router-for-me/CLIProxyAPI/v6/sdk/cliproxy/usage" ) func TestRecordStoresRequestIDAndDuration(t *testing.T) { stats := NewRequestStatistics() recordedAt := time.Date(2026, 2, 12, 12, 0, 0, 0, time.UTC) stats.Record(context.Background(), coreusage.Record{ APIKey: "key-1", Model: "gpt-4-turbo", RequestID: "req-12345", RequestedAt: recordedAt, DurationMs: 245, Failed: false, Detail: coreusage.Detail{ InputTokens: 120, OutputTokens: 80, TotalTokens: 200, }, }) snapshot := stats.Snapshot() api := snapshot.APIs["key-1"] model := api.Models["gpt-4-turbo"] if len(model.Details) != 1 { t.Fatalf("expected exactly one request detail, got %d", len(model.Details)) } detail := model.Details[0] if detail.RequestID != "req-12345" { t.Fatalf("expected request_id to be preserved, got %q", detail.RequestID) } if detail.DurationMs != 245 { t.Fatalf("expected duration_ms=245, got %d", detail.DurationMs) } } func TestRecordNormalizesNegativeDuration(t *testing.T) { stats := NewRequestStatistics() stats.Record(context.Background(), coreusage.Record{ APIKey: "key-1", Model: "gpt-4-turbo", RequestID: "req-negative", RequestedAt: time.Now(), DurationMs: -99, Detail: coreusage.Detail{ InputTokens: 10, OutputTokens: 20, TotalTokens: 30, }, }) snapshot := stats.Snapshot() detail := snapshot.APIs["key-1"].Models["gpt-4-turbo"].Details[0] if detail.DurationMs != 0 { t.Fatalf("expected normalized duration_ms=0, got %d", detail.DurationMs) } }