veylant/internal/billing/billing_test.go
2026-02-23 13:35:04 +01:00

51 lines
1.3 KiB
Go

package billing_test
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/veylant/ia-gateway/internal/billing"
)
func TestBilling_OpenAI_GPT4o_ExactMatch(t *testing.T) {
cost := billing.CostUSD("openai", "gpt-4o", 1000)
assert.InDelta(t, 0.005, cost, 1e-9)
}
func TestBilling_OpenAI_GPT4oMini(t *testing.T) {
cost := billing.CostUSD("openai", "gpt-4o-mini", 1000)
assert.InDelta(t, 0.00015, cost, 1e-9)
}
func TestBilling_OpenAI_GPT4o_PrefixVersioned(t *testing.T) {
// "gpt-4o-2024-08-06" should match prefix "openai/gpt-4o"
cost := billing.CostUSD("openai", "gpt-4o-2024-08-06", 1000)
assert.InDelta(t, 0.005, cost, 1e-9)
}
func TestBilling_Anthropic_Sonnet(t *testing.T) {
cost := billing.CostUSD("anthropic", "claude-3-5-sonnet", 2000)
assert.InDelta(t, 0.006, cost, 1e-9)
}
func TestBilling_Ollama_ZeroCost(t *testing.T) {
cost := billing.CostUSD("ollama", "llama3.1", 10000)
assert.Equal(t, 0.0, cost)
}
func TestBilling_Unknown_ZeroCost(t *testing.T) {
cost := billing.CostUSD("unknown", "mystery-model", 5000)
assert.Equal(t, 0.0, cost)
}
func TestBilling_ZeroTokens(t *testing.T) {
cost := billing.CostUSD("openai", "gpt-4o", 0)
assert.Equal(t, 0.0, cost)
}
func TestBilling_NegativeTokens(t *testing.T) {
cost := billing.CostUSD("openai", "gpt-4o", -100)
assert.Equal(t, 0.0, cost)
}