testTransactionsAreAllOrNothing

tcmts.server.test.testTransactionsAreAllOrNothing · #ualknzc4 · term

A transaction's writes all happen or none do; jobs it enqueues wait for its commit.

import { enqueue, runJobs, transaction } from "#codebase/tcmts/server";
import { noted, notes, pantry } from "#codebase/tcmts/server/test";
import assert from "node:assert/strict";

export const testTransactionsAreAllOrNothing = async () => {
  await assert.rejects(
    transaction(async () => {
      await pantry.put("oats", { item: "oats", count: 1 });
      enqueue(noted, "rolled back");
      throw new Error("no");
    }),
    /no/,
  );
  assert.equal(await pantry.get("oats"), undefined);
  await transaction(async () => {
    await pantry.put("oats", { item: "oats", count: 1 });
    enqueue(noted, "committed");
  });
  assert.equal((await pantry.get("oats"))?.count, 1);
  await runJobs({ all: true });
  assert.deepEqual(notes, ["committed"]);
}

uses