From 989b80791fadf3d26cdd8d800f0fb138dd46614a Mon Sep 17 00:00:00 2001 From: imccyu <276526105+imccyu@users.noreply.github.com> Date: Wed, 29 Jul 2026 23:45:00 +0800 Subject: [PATCH] feat(test-runtime): add TestSessions.updateSummary MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The wire-echo stand-in for list-row settlement (title from the rename unary response, running flips): benches mirror what the production manager writes into the list store, so row re-label assertions need no assembled app. Fixture ISession stubs must NOT call it re-entrantly — they run inside a React event dispatch already wrapped in act, and a nested act corrupts the global act queue (the next test renders an empty tree); tests echo from their own top level instead. --- packages/client/test-runtime/src/sessions.ts | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/packages/client/test-runtime/src/sessions.ts b/packages/client/test-runtime/src/sessions.ts index 59dd7d9186..c43a25b777 100644 --- a/packages/client/test-runtime/src/sessions.ts +++ b/packages/client/test-runtime/src/sessions.ts @@ -237,6 +237,20 @@ export class TestSessions implements ISessions { await this.stabilize(() => { record.snapshot.update(mutate) }) } + /** + * Update a session's list row (the wire-echo stand-in: title settles, + * running flips — components subscribed via useSessions re-render). + * @param id - session id. + * @param patch - summary fields to merge over the row. + */ + async updateSummary(id: string, patch: Partial>): Promise { + const record = this.require(id) + record.summary = { ...record.summary, ...patch } + await this.stabilize(() => { + this.list.update((draft) => { draft.byId[id as SessionId] = record.summary }) + }) + } + /** * Switch the current selection (undefined = the no-session empty state). * @param id - session id to select, or undefined to clear.