fix(host): harden the browser dialog against review round-2 races
- Dismissal (Escape/mask) is ignored while adoption is busy: the owner's in-flight createWorkspace must not land behind an apparent cancel. - Every parent control goes inert while the nested create dialog is open (Modal traps no focus, so Shift-Tab/AT could close, adopt, or retarget underneath the child). - Creation settlements are gated on an open-generation ref: a create that resolves or rejects after the flow closed (and possibly reopened) can no longer relist the stale target or surface its alert in the fresh dialog. - The keyless snapshot waits for the Open button's enabled state before clicking — on slow runners the selection's child listing was still in flight and the click landed on a disabled button.
This commit is contained in:
@@ -202,6 +202,11 @@ it('adopts a directory through the composed in-app browse flow and lands in its
|
||||
// row's name span is stable (clicks bubble to the row button).
|
||||
fireEvent.click(await within(dialog).findByText('Documents', {}, { timeout: 10_000 }))
|
||||
fireEvent.click(await within(dialog).findByText('project', {}, { timeout: 10_000 }))
|
||||
// Open disables while the selection's child listing is in flight; wait for
|
||||
// the enabled state or the click lands on a dead button on slow runners.
|
||||
await waitFor(() => {
|
||||
expect(within(dialog).getByRole<HTMLButtonElement>('button', { name: '打开' }).disabled).toBe(false)
|
||||
}, { timeout: 10_000 })
|
||||
fireEvent.click(within(dialog).getByRole('button', { name: '打开' }))
|
||||
await findHeroComposer()
|
||||
await waitFor(() => {
|
||||
|
||||
Reference in New Issue
Block a user