ledgerlens / apps /api /tests /test_pricing.py
Abdr007's picture
LedgerLens — deployed tree
6741fc6
Raw
History Blame Contribute Delete
1.86 kB
"""Cost is charged at the rate in force on the day of the call.
Claude Sonnet 5 launched on introductory pricing that expires. Writing the promo
rate in as the standard one under-reports every document from the day it lapses,
in the direction that flatters the project, and nothing fails to say so — so the
expiry date is data, and these tests pin both sides of it.
"""
from __future__ import annotations
from datetime import date
from app.core.claude import estimate_cost_usd
MTOK = 1_000_000
DURING = date(2026, 8, 1)
LAST_DAY = date(2026, 8, 31)
AFTER = date(2026, 9, 1)
def test_sonnet_5_bills_the_introductory_rate_during_the_window() -> None:
assert estimate_cost_usd("claude-sonnet-5", MTOK, 0, on=DURING) == 2.00
assert estimate_cost_usd("claude-sonnet-5", 0, MTOK, on=DURING) == 10.00
def test_the_last_day_is_inclusive() -> None:
assert estimate_cost_usd("claude-sonnet-5", MTOK, 0, on=LAST_DAY) == 2.00
def test_the_standard_rate_resumes_the_next_morning() -> None:
"""The self-correction: no code change, no diary entry, no silent drift."""
assert estimate_cost_usd("claude-sonnet-5", MTOK, 0, on=AFTER) == 3.00
assert estimate_cost_usd("claude-sonnet-5", 0, MTOK, on=AFTER) == 15.00
def test_models_without_a_promotion_are_date_independent() -> None:
for when in (DURING, LAST_DAY, AFTER):
assert estimate_cost_usd("claude-haiku-4-5", MTOK, 0, on=when) == 1.00
assert estimate_cost_usd("claude-opus-5", 0, MTOK, on=when) == 25.00
def test_an_unknown_model_falls_back_rather_than_reporting_zero() -> None:
"""A missing entry must never make a real call look free."""
assert estimate_cost_usd("claude-not-a-model", MTOK, MTOK, on=DURING) == 18.00
def test_a_call_with_no_tokens_costs_nothing() -> None:
assert estimate_cost_usd("claude-sonnet-5", 0, 0, on=DURING) == 0.0