/// /** * An action step's `event` payload in a multi-user run. Alice sends an object * payload and asserts on what the handler recorded, so the assertion fails if * the orchestrator delivers anything other than what the step authored. An * object payload is the case that matters: a primitive one has always arrived. */ import { assert, handler, multiUserTest, pattern, TESTS, Writable, } from "commonfabric"; export interface PayloadSetup { seen: Writable; } export const setup = pattern, PayloadSetup>(() => ({ seen: Writable.of(""), })); const record = handler< { n?: number; inner?: { label?: string } }, { seen: Writable } >((event, { seen }) => { seen.set(`${event?.n ?? -1}/${event?.inner?.label ?? ""}`); }); export const alice = pattern<{ setup: PayloadSetup }>(({ setup }) => ({ [TESTS]: [ { action: record({ seen: setup.seen }), event: { n: 42, inner: { label: "deep" } }, }, { assertion: assert(() => setup.seen.get() === "42/deep") }, ], })); export default multiUserTest({ setup, participants: { alice } });