65 lines
2.1 KiB
Go
65 lines
2.1 KiB
Go
|
|
package service
|
||
|
|
|
||
|
|
import (
|
||
|
|
"testing"
|
||
|
|
|
||
|
|
"github.com/seifghazi/claude-code-monitor/internal/model"
|
||
|
|
)
|
||
|
|
|
||
|
|
func TestAggregationHelpers(t *testing.T) {
|
||
|
|
t.Parallel()
|
||
|
|
|
||
|
|
t.Run("addDailyTokens accumulates by date and model", func(t *testing.T) {
|
||
|
|
t.Parallel()
|
||
|
|
|
||
|
|
dailyMap := make(map[string]*model.DailyTokens)
|
||
|
|
addDailyTokens(dailyMap, "2026-03-20", "claude", 10)
|
||
|
|
addDailyTokens(dailyMap, "2026-03-20", "claude", 5)
|
||
|
|
addDailyTokens(dailyMap, "2026-03-20", "gpt", 7)
|
||
|
|
|
||
|
|
day := dailyMap["2026-03-20"]
|
||
|
|
if day == nil || day.Tokens != 22 || day.Requests != 3 {
|
||
|
|
t.Fatalf("unexpected daily aggregate: %#v", day)
|
||
|
|
}
|
||
|
|
if day.Models["claude"].Tokens != 15 || day.Models["claude"].Requests != 2 {
|
||
|
|
t.Fatalf("unexpected claude daily model aggregate: %#v", day.Models["claude"])
|
||
|
|
}
|
||
|
|
if day.Models["gpt"].Tokens != 7 || day.Models["gpt"].Requests != 1 {
|
||
|
|
t.Fatalf("unexpected gpt daily model aggregate: %#v", day.Models["gpt"])
|
||
|
|
}
|
||
|
|
})
|
||
|
|
|
||
|
|
t.Run("addHourlyTokens accumulates by bucket and model", func(t *testing.T) {
|
||
|
|
t.Parallel()
|
||
|
|
|
||
|
|
bucketMap := make(map[string]*model.HourlyTokens)
|
||
|
|
addHourlyTokens(bucketMap, "09", "09:00", "claude", 4)
|
||
|
|
addHourlyTokens(bucketMap, "09", "09:00", "claude", 6)
|
||
|
|
addHourlyTokens(bucketMap, "09", "09:00", "gpt", 2)
|
||
|
|
|
||
|
|
bucket := bucketMap["09"]
|
||
|
|
if bucket == nil || bucket.Tokens != 12 || bucket.Requests != 3 || bucket.Label != "09:00" {
|
||
|
|
t.Fatalf("unexpected hourly aggregate: %#v", bucket)
|
||
|
|
}
|
||
|
|
if bucket.Models["claude"].Tokens != 10 || bucket.Models["claude"].Requests != 2 {
|
||
|
|
t.Fatalf("unexpected claude hourly model aggregate: %#v", bucket.Models["claude"])
|
||
|
|
}
|
||
|
|
if bucket.Models["gpt"].Tokens != 2 || bucket.Models["gpt"].Requests != 1 {
|
||
|
|
t.Fatalf("unexpected gpt hourly model aggregate: %#v", bucket.Models["gpt"])
|
||
|
|
}
|
||
|
|
})
|
||
|
|
|
||
|
|
t.Run("addModelTokens accumulates by model", func(t *testing.T) {
|
||
|
|
t.Parallel()
|
||
|
|
|
||
|
|
modelMap := make(map[string]*model.ModelTokens)
|
||
|
|
addModelTokens(modelMap, "claude", 8)
|
||
|
|
addModelTokens(modelMap, "claude", 12)
|
||
|
|
|
||
|
|
got := modelMap["claude"]
|
||
|
|
if got == nil || got.Tokens != 20 || got.Requests != 2 {
|
||
|
|
t.Fatalf("unexpected model aggregate: %#v", got)
|
||
|
|
}
|
||
|
|
})
|
||
|
|
}
|