|
|
@@ -27,11 +27,12 @@ import { connectFreshWorkspace, newEnglishPage, saveFailureShot } from './suppor
|
|
|
|
|
|
const SNAPSHOT_DIR = fileURLToPath(new URL('./snapshots/live-interactions', import.meta.url))
|
|
|
const FIXTURE = join(SNAPSHOT_DIR, 'session.jsonl')
|
|
|
-// One golden per interactive end-state: what the user is left looking at
|
|
|
-// after cancel, after a non-retryable failure (pins the FIXME(web-error-surface)
|
|
|
-// gap as a reviewable artifact: NO error copy in the tree), and after retry
|
|
|
-// recovery — three genuinely different terminal surfaces of one fixture.
|
|
|
+// One golden pins the stable mid-turn loading state; the other three capture
|
|
|
+// what the user is left looking at after cancel, after a non-retryable failure
|
|
|
+// (pins the FIXME(web-error-surface) gap as a reviewable artifact: NO error
|
|
|
+// copy in the tree), and after retry recovery.
|
|
|
const CANCEL_EXPECTED = join(SNAPSHOT_DIR, 'cancel.expected.md')
|
|
|
+const LOADING_EXPECTED = join(SNAPSHOT_DIR, 'loading.expected.md')
|
|
|
const ERROR_EXPECTED = join(SNAPSHOT_DIR, 'error-auth.expected.md')
|
|
|
const RETRY_EXPECTED = join(SNAPSHOT_DIR, 'retry.expected.md')
|
|
|
const MODE = webSnapshotMode()
|
|
|
@@ -133,6 +134,9 @@ describe('web e2e: live-turn interactions (cancel / error / retry)', () => {
|
|
|
// The marker IS the synchronization: the stream is provably parked in the
|
|
|
// hang (prefix chunks delivered to the loop) before the stop click.
|
|
|
await expect.poll(() => existsSync(marker), { timeout: 15_000 }).toBe(true)
|
|
|
+ await expect(page.getByRole('status').filter({ hasText: 'Deep diving...' }).isVisible()).resolves.toBe(true)
|
|
|
+ const loadingSnapshot = await captureStableAria(page, '[class*="centerCol"]', scaffold!.workspaceCwd)
|
|
|
+ await compareOrRefreshGolden(LOADING_EXPECTED, loadingSnapshot, MODE)
|
|
|
await page.getByRole('button', { name: 'Stop generating' }).click()
|
|
|
await settled
|
|
|
expect(turnEndReasons(sessionEvents).at(-1)).toBe('aborted')
|
|
|
@@ -231,7 +235,7 @@ describe('web e2e: live-turn interactions (cancel / error / retry)', () => {
|
|
|
|
|
|
it.skipIf(MODE === 'record')('keeps the fixture inventory closed', async () => {
|
|
|
await assertFixtureInventory(SNAPSHOT_DIR, [
|
|
|
- 'session.jsonl', 'cancel.expected.md', 'error-auth.expected.md', 'retry.expected.md',
|
|
|
+ 'session.jsonl', 'cancel.expected.md', 'loading.expected.md', 'error-auth.expected.md', 'retry.expected.md',
|
|
|
])
|
|
|
})
|
|
|
})
|