The-Agency/test/utils/model_cost_test.dart

51 lines
1.6 KiB
Dart

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"));
});
});
}