"""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