import "package:test/test.dart"; import "package:clawd_code/src/utils/model_cost.dart"; void main() { group("getCanonicalModelName", () { test("strips date suffix", () { expect(getCanonicalModelName("claude-sonnet-4-6-20241022"), equals("claude-sonnet-4-6")); }); test("known model unchanged", () { expect(getCanonicalModelName("claude-sonnet-4-6"), equals("claude-sonnet-4-6")); }); }); group("getModelCosts", () { test("returns correct costs for known model", () { final costs = getModelCosts("claude-sonnet-4-6"); expect(costs.inputTokens, equals(3.0)); expect(costs.outputTokens, equals(15.0)); }); test("unknown model returns fallback", () { final costs = getModelCosts("totally-made-up-model"); // should not throw, just returns default expect(costs.inputTokens, greaterThan(0)); }); }); group("calculateUSDCost", () { test("zero usage is zero cost", () { final usage = TokenUsage(inputTokens: 0, outputTokens: 0); expect(calculateUSDCost("claude-sonnet-4-6", usage), equals(0.0)); }); test("1M input tokens at \$3 rate", () { final usage = TokenUsage(inputTokens: 1000000, outputTokens: 0); final cost = calculateUSDCost("claude-sonnet-4-6", usage); expect(cost, closeTo(3.0, 0.001)); }); }); group("formatModelPricing", () { test("formats expected string", () { final result = formatModelPricing(costTier3_15); expect(result, contains("3")); expect(result, contains("15")); expect(result, contains("Mtok")); }); }); }