Files
pikasTech-HWLAB/internal/db/runtime-store-postgres-notify.test.ts

27 lines
1.3 KiB
TypeScript

import assert from "node:assert/strict";
import { EventEmitter } from "node:events";
import { test } from "bun:test";
import { subscribeWorkbenchProjectionCommits, WORKBENCH_PROJECTION_CHANNEL } from "./runtime-store-postgres-notify.ts";
test("Postgres LISTEN fans committed projection scope out and releases its dedicated connection", async () => {
const queries = [];
let released = 0;
const client = new EventEmitter();
client.query = async (sql) => { queries.push(sql); return { rows: [] }; };
client.release = () => { released += 1; };
const pool = { async connect() { return client; } };
const store = { async getQueryClient() { return pool; }, logger: null };
const signals = [];
const unsubscribe = await subscribeWorkbenchProjectionCommits(store, (signal) => signals.push(signal));
assert.deepEqual(queries, [`LISTEN ${WORKBENCH_PROJECTION_CHANNEL}`]);
client.emit("notification", { channel: WORKBENCH_PROJECTION_CHANNEL, payload: JSON.stringify({ sessionId: "ses_notify", traceId: "trc_notify", outboxSeq: 12 }) });
assert.deepEqual(signals, [{ sessionId: "ses_notify", traceId: "trc_notify", outboxSeq: 12, valuesRedacted: true }]);
await unsubscribe();
assert.equal(queries.at(-1), `UNLISTEN ${WORKBENCH_PROJECTION_CHANNEL}`);
assert.equal(released, 1);
});