76 lines
2.9 KiB
TypeScript
76 lines
2.9 KiB
TypeScript
import assert from "node:assert/strict";
|
|
import { test } from "node:test";
|
|
import { InflightTracker, type FeedEvent } from "../src/lib/inflight-tracker";
|
|
|
|
test("snapshot rebuilds counts for all in-flight requests", () => {
|
|
const tracker = new InflightTracker();
|
|
tracker.apply({
|
|
type: "inflight",
|
|
operation: "snapshot",
|
|
requests: [
|
|
{ model: "A", id: "1" },
|
|
{ model: "A", id: "2" },
|
|
{ model: "B", id: "3" },
|
|
],
|
|
});
|
|
assert.equal(tracker.count("A"), 2);
|
|
assert.equal(tracker.count("B"), 1);
|
|
assert.equal(tracker.count("C"), 0);
|
|
});
|
|
|
|
test("add (upsert) is idempotent per request id", () => {
|
|
const tracker = new InflightTracker();
|
|
tracker.apply({ type: "inflight", operation: "add", requests: [{ model: "A", id: "1" }] });
|
|
tracker.apply({ type: "inflight", operation: "add", requests: [{ model: "A", id: "1" }] });
|
|
tracker.apply({ type: "inflight", operation: "add", requests: [{ model: "A", id: "2" }] });
|
|
assert.equal(tracker.count("A"), 2);
|
|
});
|
|
|
|
test("remove is id-based and decrements the matching request", () => {
|
|
const tracker = new InflightTracker();
|
|
tracker.apply({ type: "inflight", operation: "add", requests: [{ model: "A", id: "1" }, { model: "B", id: "2" }] });
|
|
assert.equal(tracker.count("A"), 1);
|
|
assert.equal(tracker.count("B"), 1);
|
|
tracker.apply({ type: "inflight", operation: "remove", id: "1" });
|
|
assert.equal(tracker.count("A"), 0);
|
|
assert.equal(tracker.count("B"), 1);
|
|
tracker.apply({ type: "inflight", operation: "remove", id: "999" });
|
|
assert.equal(tracker.count("B"), 1);
|
|
});
|
|
|
|
test("snapshot replaces prior in-flight state", () => {
|
|
const tracker = new InflightTracker();
|
|
tracker.apply({ type: "inflight", operation: "add", requests: [{ model: "A", id: "1" }] });
|
|
tracker.apply({ type: "inflight", operation: "snapshot", requests: [{ model: "A", id: "2" }] });
|
|
assert.equal(tracker.count("A"), 1);
|
|
assert.equal(tracker.count("B"), 0);
|
|
});
|
|
|
|
test("modelStatus normalizes states", () => {
|
|
const tracker = new InflightTracker();
|
|
tracker.apply({
|
|
type: "modelStatus",
|
|
models: [
|
|
{ id: "A", state: "ready" },
|
|
{ id: "B", state: "loading" },
|
|
{ id: "C", state: "stopped" },
|
|
{ id: "D", state: "weird" },
|
|
],
|
|
});
|
|
assert.equal(tracker.state("A"), "ready");
|
|
assert.equal(tracker.state("B"), "loading");
|
|
assert.equal(tracker.state("C"), "stopped");
|
|
assert.equal(tracker.state("D"), "stopped");
|
|
assert.equal(tracker.state("missing"), undefined);
|
|
});
|
|
|
|
test("total sums in-flight requests across all models", () => {
|
|
const tracker = new InflightTracker();
|
|
assert.equal(tracker.total(), 0);
|
|
tracker.apply({ type: "inflight", operation: "add", requests: [{ model: "A", id: "1" }, { model: "B", id: "2" }] });
|
|
tracker.apply({ type: "inflight", operation: "add", requests: [{ model: "A", id: "3" }] });
|
|
assert.equal(tracker.total(), 3);
|
|
tracker.apply({ type: "inflight", operation: "remove", id: "1" });
|
|
assert.equal(tracker.total(), 2);
|
|
});
|