Files
wehub-resource-sync f99010fae1
CI / lint (push) Failing after 1s
CI / frontend (push) Failing after 1s
CI / scripts (push) Failing after 1s
CI / Go Test (ubuntu-latest) (push) Failing after 0s
CI / frontend-node-25 (push) Failing after 1s
CI / docs (push) Failing after 0s
CI / coverage (push) Failing after 0s
CI / e2e (push) Failing after 0s
Docker / build-and-push (push) Failing after 1s
CI / integration (push) Failing after 4m43s
CI / Go Test (windows-latest) (push) Has been cancelled
CI / Desktop Unit Tests (Windows) (push) Has been cancelled
Desktop Artifacts / Desktop Build (Linux (arm64)) (push) Has been cancelled
Desktop Artifacts / Desktop Build (Linux) (push) Has been cancelled
Desktop Artifacts / Desktop Build (Windows) (push) Has been cancelled
Desktop Artifacts (macOS) / Desktop Build (macOS (aarch64)) (push) Has been cancelled
Desktop Artifacts (macOS) / Desktop Build (macOS (x86_64)) (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:30:36 +08:00

68 lines
1.8 KiB
Go

package db
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.kenn.io/agentsview/internal/export"
)
func TestLookupModelRates_DotDashFallback(t *testing.T) {
resolver := export.NewPricingResolver([]export.EffectivePricingRow{
{
ModelPattern: "claude-opus-4-7",
Rates: export.ModelRates{
InputPerMTok: 5, OutputPerMTok: 25,
},
},
{
ModelPattern: "claude-opus-4.6",
Rates: export.ModelRates{
InputPerMTok: 99, OutputPerMTok: 99,
},
},
})
lookup := resolver.Lookup("claude-opus-4.7")
require.True(t, lookup.OK, "dotted model should resolve via normalized key")
assert.Equal(t, 5.0, lookup.Rates.InputPerMTok)
assert.Equal(t, 25.0, lookup.Rates.OutputPerMTok)
dashed := resolver.Lookup("claude-opus-4-7")
require.True(t, dashed.OK, "already-dashed model should resolve exactly")
assert.Equal(t, 5.0, dashed.Rates.InputPerMTok)
exact := resolver.Lookup("claude-opus-4.6")
require.True(t, exact.OK)
assert.Equal(t, 99.0, exact.Rates.InputPerMTok,
"exact match must win over normalized fallback")
unknown := resolver.Lookup("gpt-5.5")
assert.False(t, unknown.OK, "unknown model stays unpriced")
}
func TestModelRateResolverCachesResolvedModels(t *testing.T) {
resolver := export.NewPricingResolver([]export.EffectivePricingRow{{
ModelPattern: "gemini-3.5-flash",
Rates: export.ModelRates{
InputPerMTok: 1.25, OutputPerMTok: 10,
},
}})
first := resolver.Lookup("Gemini 3.5 Flash (High)")
require.True(t, first.OK)
assert.Equal(t, 1.25, first.Rates.InputPerMTok)
second := resolver.Lookup("Gemini 3.5 Flash (High)")
require.True(t, second.OK)
assert.Equal(t, first, second)
unknown := resolver.Lookup("unknown-model")
assert.False(t, unknown.OK)
unknown = resolver.Lookup("unknown-model")
assert.False(t, unknown.OK)
}