diff --git a/apps/collab/src/restore-listener.db.test.ts b/apps/collab/src/restore-listener.db.test.ts index d53c3f5..ed2b9a7 100644 --- a/apps/collab/src/restore-listener.db.test.ts +++ b/apps/collab/src/restore-listener.db.test.ts @@ -141,12 +141,21 @@ describe.skipIf(!url)('restore listener (DB-backed, issue #42)', () => { expect(textOf(doc)).not.toContain('current text'); // A pre-restore snapshot was appended; history is append-only (the original - // manual version is still present too). - const versions = await pool.query<{ trigger: string }>( - 'SELECT trigger FROM page_versions WHERE page_id = $1', - [pageId], - ); - const triggers = versions.rows.map((r) => r.trigger); + // manual version is still present too). Poll: the broadcast the client + // converged on happens inside the transact, BEFORE the listener commits + // the PRE_RESTORE row — asserting immediately is a race. + const triggersNow = async (): Promise => { + const versions = await pool.query<{ trigger: string }>( + 'SELECT trigger FROM page_versions WHERE page_id = $1', + [pageId], + ); + return versions.rows.map((r) => r.trigger); + }; + let triggers: string[] = []; + await waitFor(() => { + void triggersNow().then((rows) => (triggers = rows)); + return triggers.includes('PRE_RESTORE'); + }); expect(triggers).toContain('PRE_RESTORE'); expect(triggers).toContain('MANUAL');