feat: make Kafka projector the Workbench realtime authority
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
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);
|
||||
});
|
||||
Reference in New Issue
Block a user