| 1 | import assert from "node:assert/strict"; |
| 2 | import { test } from "node:test"; |
| 3 | |
| 4 | import { duration, shortCount, statusTone, tokenKinds, totalTokens } from "./gateway.ts"; |
| 5 | |
| 6 | test("token counts read short", () => { |
| 7 | assert.equal(shortCount(812), "812"); |
| 8 | assert.equal(shortCount(12_400), "12.4K"); |
| 9 | assert.equal(shortCount(150_000), "150K"); |
| 10 | assert.equal(shortCount(3_000_000), "3M"); |
| 11 | }); |
| 12 | |
| 13 | test("a request's tokens add up and are named by kind", () => { |
| 14 | const request = { input: 1_840, output: 512, cacheRead: 12_000, cacheWrite: 0 }; |
| 15 | assert.equal(totalTokens(request), 14_352); |
| 16 | assert.equal(tokenKinds(request), "1,840 input, 512 output, 12,000 cache read, 0 cache write"); |
| 17 | }); |
| 18 | |
| 19 | test("refusals for money or rate are warnings, other failures are errors", () => { |
| 20 | assert.deepEqual(statusTone(200), { label: "200", tone: "success" }); |
| 21 | assert.equal(statusTone(402).tone, "warn"); |
| 22 | assert.equal(statusTone(429).tone, "warn"); |
| 23 | assert.equal(statusTone(400).tone, "danger"); |
| 24 | assert.equal(statusTone(529).tone, "danger"); |
| 25 | }); |
| 26 | |
| 27 | test("durations read plainly", () => { |
| 28 | assert.equal(duration(840), "840 ms"); |
| 29 | assert.equal(duration(4_210), "4.2 s"); |
| 30 | assert.equal(duration(125_000), "2 min 5 s"); |
| 31 | }); |