Files
OmniRoute/tests/unit/compression/stats.test.ts
oyi77 d2f32090b7 test(compression): add unit and integration tests (61 tests)
Add unit tests for strategy selector (17), lite compression (20), stats module (11), and DB module (7). Add integration tests for full compression pipeline (6). All 61 tests pass. Remove broken integration test files from previous WIP.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-27 03:53:05 +07:00

93 lines
3.1 KiB
TypeScript

import { describe, it } from "node:test";
import assert from "node:assert/strict";
import {
estimateCompressionTokens,
createCompressionStats,
trackCompressionStats,
} from "../../../open-sse/services/compression/stats.ts";
describe("estimateCompressionTokens", () => {
it("returns 0 for null", () => {
assert.equal(estimateCompressionTokens(null), 0);
});
it("returns 0 for undefined", () => {
assert.equal(estimateCompressionTokens(undefined), 0);
});
it("returns 0 for empty string", () => {
assert.equal(estimateCompressionTokens(""), 0);
});
it("estimates tokens from text (chars/4)", () => {
assert.equal(estimateCompressionTokens("hello world"), 3);
});
it("estimates tokens from object", () => {
const tokens = estimateCompressionTokens({ messages: [{ role: "user", content: "test" }] });
assert.ok(tokens > 0);
});
it("handles long strings", () => {
const tokens = estimateCompressionTokens("x".repeat(400));
assert.equal(tokens, 100);
});
});
describe("createCompressionStats", () => {
it("calculates savings correctly", () => {
const original = { messages: [{ role: "user", content: "x".repeat(100) }] };
const compressed = { messages: [{ role: "user", content: "x".repeat(80) }] };
const origTokens = Math.ceil(JSON.stringify(original).length / 4);
const compTokens = Math.ceil(JSON.stringify(compressed).length / 4);
const expectedSavings = Math.round(((origTokens - compTokens) / origTokens) * 10000) / 100;
const stats = createCompressionStats(original, compressed, "lite", ["whitespace"]);
assert.equal(stats.originalTokens, origTokens);
assert.equal(stats.compressedTokens, compTokens);
assert.equal(stats.savingsPercent, expectedSavings);
assert.deepEqual(stats.techniquesUsed, ["whitespace"]);
assert.equal(stats.mode, "lite");
assert.ok(stats.timestamp > 0);
});
it("handles zero original tokens", () => {
const original = {};
const compressed = {};
const stats = createCompressionStats(original, compressed, "off", []);
assert.equal(stats.savingsPercent, 0);
});
it("rounds savings to 2 decimal places", () => {
const original = { messages: [{ role: "user", content: "x".repeat(97) }] };
const compressed = { messages: [{ role: "user", content: "x".repeat(80) }] };
const stats = createCompressionStats(original, compressed, "lite", ["test"]);
assert.ok(Number.isFinite(stats.savingsPercent));
});
});
describe("trackCompressionStats", () => {
it("does not throw for zero tokens", () => {
const stats = {
originalTokens: 0,
compressedTokens: 0,
savingsPercent: 0,
techniquesUsed: [],
mode: "off" as const,
timestamp: Date.now(),
};
assert.doesNotThrow(() => trackCompressionStats(stats));
});
it("logs compression stats", () => {
const stats = {
originalTokens: 100,
compressedTokens: 80,
savingsPercent: 20,
techniquesUsed: ["whitespace"],
mode: "lite" as const,
timestamp: Date.now(),
};
assert.doesNotThrow(() => trackCompressionStats(stats));
});
});