Files
tutti/packages/agent/store-sqlite/activity_update_settings_test.go
agent-radar 2ed3415fb7
Publish Claude Code Binaries / Stage and publish binaries (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-arm64 (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build linux-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build windows-amd64 (push) Canceled after 0s
Sync Tutti Agent Skills / sync (push) Canceled after 0s
Windows Agent Adapters / Test Windows agent adapters (push) Canceled after 0s
Windows Daemon Adapters / Test Windows daemon adapters (push) Canceled after 0s
Publish Tutti App Runtime / Publish runtime catalog (push) Canceled after 0s
源码快照 @ 2026-09-01 (source-only, 剔除非源码素材)
2026-09-01 20:17:27 +08:00

71 lines
2.5 KiB
Go

package storesqlite
import (
"context"
"testing"
)
func TestUpdateSessionSettingsInvalidatesContextWindowWhenModelChanges(t *testing.T) {
t.Parallel()
store := openTestStore(t, testOptions(&staticProjectPaths{}))
ctx := context.Background()
resetAt := int64(1_750_003_600_000)
if _, err := store.ReportSessionState(ctx, SessionStateReport{
WorkspaceID: "ws-1", AgentSessionID: "session-1", Provider: "codex",
Model: "gpt-5.5", Settings: map[string]any{"model": "gpt-5.5"}, OccurredAtUnixMS: 100,
RuntimeContext: map[string]any{
"usage": map[string]any{
"contextWindow": map[string]any{"usedTokens": 33_168, "totalTokens": 200_000},
"quotas": []any{map[string]any{
"quotaType": "weekly", "percentRemaining": 75.5, "resetsAtUnixMs": resetAt,
}},
},
},
}); err != nil {
t.Fatal(err)
}
updated, ok, err := store.UpdateSessionSettings(ctx, "ws-1", "session-1", "gpt-5.6-sol", map[string]any{"model": "gpt-5.6-sol"})
if err != nil || !ok {
t.Fatalf("UpdateSessionSettings() ok=%v error=%v", ok, err)
}
if updated.Metadata.Usage == nil {
t.Fatal("usage=nil, want preserved quota usage")
}
if updated.Metadata.Usage.ContextWindow != nil {
t.Fatalf("contextWindow=%#v, want invalidated after model change", updated.Metadata.Usage.ContextWindow)
}
if len(updated.Metadata.Usage.Quotas) != 1 || updated.Metadata.Usage.Quotas[0].QuotaType != "weekly" {
t.Fatalf("quotas=%#v, want preserved quotas", updated.Metadata.Usage.Quotas)
}
}
func TestUpdateSessionSettingsPreservesContextWindowWhenModelDoesNotChange(t *testing.T) {
t.Parallel()
store := openTestStore(t, testOptions(&staticProjectPaths{}))
ctx := context.Background()
if _, err := store.ReportSessionState(ctx, SessionStateReport{
WorkspaceID: "ws-1", AgentSessionID: "session-1", Provider: "claude-code",
Model: "opus", Settings: map[string]any{"model": "opus"}, OccurredAtUnixMS: 100,
RuntimeContext: map[string]any{
"usage": map[string]any{
"contextWindow": map[string]any{"usedTokens": 33_168, "totalTokens": 1_000_000},
},
},
}); err != nil {
t.Fatal(err)
}
updated, ok, err := store.UpdateSessionSettings(ctx, "ws-1", "session-1", "opus", map[string]any{
"model": "opus", "permissionModeId": "full-access",
})
if err != nil || !ok {
t.Fatalf("UpdateSessionSettings() ok=%v error=%v", ok, err)
}
if updated.Metadata.Usage == nil || updated.Metadata.Usage.ContextWindow == nil || updated.Metadata.Usage.ContextWindow.TotalTokens != 1_000_000 {
t.Fatalf("usage=%#v, want unchanged context window", updated.Metadata.Usage)
}
}