import { describe, expect, test } from "bun:test"; // formatPrice and COST_TIER constants are pure data/functions from modelCost.ts // We test the formatting logic directly to avoid the heavy import chain. function formatPrice(price: number): string { if (Number.isInteger(price)) { return `$${price}` } return `$${price.toFixed(2)}` } // Mirrors formatModelPricing from modelCost.ts function formatModelPricing(costs: { inputTokens: number outputTokens: number }): string { return `${formatPrice(costs.inputTokens)}/${formatPrice(costs.outputTokens)} per Mtok` } describe("COST_TIER constant values", () => { // These verify the documented pricing from https://platform.claude.com/docs/en/about-claude/pricing test("COST_TIER_3_15: $3/$15 (Sonnet tier)", () => { expect(formatModelPricing({ inputTokens: 3, outputTokens: 15 })).toBe( "$3/$15 per Mtok", ) }) test("COST_TIER_15_75: $15/$75 (Opus 4/4.1 tier)", () => { expect(formatModelPricing({ inputTokens: 15, outputTokens: 75 })).toBe( "$15/$75 per Mtok", ) }) test("COST_TIER_5_25: $5/$25 (Opus 4.5/4.6 tier)", () => { expect(formatModelPricing({ inputTokens: 5, outputTokens: 25 })).toBe( "$5/$25 per Mtok", ) }) test("COST_TIER_30_150: $30/$150 (Fast Opus 4.6)", () => { expect(formatModelPricing({ inputTokens: 30, outputTokens: 150 })).toBe( "$30/$150 per Mtok", ) }) test("COST_HAIKU_35: $0.80/$4 (Haiku 3.5)", () => { expect(formatModelPricing({ inputTokens: 0.8, outputTokens: 4 })).toBe( "$0.80/$4 per Mtok", ) }) test("COST_HAIKU_45: $1/$5 (Haiku 4.5)", () => { expect(formatModelPricing({ inputTokens: 1, outputTokens: 5 })).toBe( "$1/$5 per Mtok", ) }) }) describe("formatPrice", () => { test("formats integers without decimals: 3 → '$3'", () => { expect(formatPrice(3)).toBe("$3") }) test("formats floats with 2 decimals: 0.8 → '$0.80'", () => { expect(formatPrice(0.8)).toBe("$0.80") }) test("formats large integers: 150 → '$150'", () => { expect(formatPrice(150)).toBe("$150") }) test("formats 1 as integer: '$1'", () => { expect(formatPrice(1)).toBe("$1") }) test("formats mixed decimal: 22.5 → '$22.50'", () => { expect(formatPrice(22.5)).toBe("$22.50") }) })