|
@@ -6,10 +6,10 @@
|
|
|
// layers, per-plugin CSS injection, and a rendered journey reaching chat
|
|
// layers, per-plugin CSS injection, and a rendered journey reaching chat
|
|
|
// content from the keyless FixtureApiClient transport.
|
|
// content from the keyless FixtureApiClient transport.
|
|
|
//
|
|
//
|
|
|
-// Behavior assertions do NOT belong here: component and wiring behavior is
|
|
|
|
|
-// pinned by the per-package suites (SlotTestRuntime benches over src), which
|
|
|
|
|
-// this smoke's plugin set cannot influence — bundling, module-table
|
|
|
|
|
-// resolution, and boot layering are the only failure modes left to it.
|
|
|
|
|
|
|
+// Component behavior remains owned by per-package suites (SlotTestRuntime
|
|
|
|
|
+// benches over src). This smoke additionally pins the resident approval
|
|
|
|
|
+// fixture's cross-plugin projection because only the built connection/runtime/
|
|
|
|
|
+// workspace graph can prove that transport-to-row path end to end.
|
|
|
import { readFileSync } from 'node:fs'
|
|
import { readFileSync } from 'node:fs'
|
|
|
import { join } from 'node:path'
|
|
import { join } from 'node:path'
|
|
|
import { act, cleanup, fireEvent, screen, waitFor, within } from '@testing-library/react'
|
|
import { act, cleanup, fireEvent, screen, waitFor, within } from '@testing-library/react'
|
|
@@ -105,13 +105,15 @@ it('boots the built plugin graph and renders a fixture session end to end', asyn
|
|
|
// The resident approval fixture proves the assembled workspace plugin
|
|
// The resident approval fixture proves the assembled workspace plugin
|
|
|
// distinguishes a blocked running session from an ordinarily busy one.
|
|
// distinguishes a blocked running session from an ordinarily busy one.
|
|
|
const waitingTitle = await within(tree).findByText('Fixture 历史会话')
|
|
const waitingTitle = await within(tree).findByText('Fixture 历史会话')
|
|
|
- const waitingRow = waitingTitle.closest('[role="treeitem"]')
|
|
|
|
|
- expect(waitingRow?.querySelector('[data-state="warning"]')).not.toBeNull()
|
|
|
|
|
- expect(waitingRow?.querySelector('[data-state="ongoing"]')).toBeNull()
|
|
|
|
|
- expect(within(waitingRow as HTMLElement).getByText('Waiting for approval')).not.toBeNull()
|
|
|
|
|
|
|
+ const waitingRow = waitingTitle.closest<HTMLElement>('[role="treeitem"]')
|
|
|
|
|
+ expect(waitingRow).not.toBeNull()
|
|
|
|
|
+ if (waitingRow === null) throw new Error('fixture Session title must belong to a tree row')
|
|
|
|
|
+ expect(waitingRow.querySelector('[data-state="warning"]')).not.toBeNull()
|
|
|
|
|
+ expect(waitingRow.querySelector('[data-state="ongoing"]')).toBeNull()
|
|
|
|
|
+ expect(within(waitingRow).getByText('Waiting for approval')).not.toBeNull()
|
|
|
|
|
|
|
|
// Opening a session reaches chat content through the fixture transport.
|
|
// Opening a session reaches chat content through the fixture transport.
|
|
|
- fireEvent.click(await within(tree).findByText('Fixture 历史会话'))
|
|
|
|
|
|
|
+ fireEvent.click(waitingTitle)
|
|
|
await waitFor(() => {
|
|
await waitFor(() => {
|
|
|
expect(document.querySelector('[data-sample="bash-global"]')).not.toBeNull()
|
|
expect(document.querySelector('[data-sample="bash-global"]')).not.toBeNull()
|
|
|
}, { timeout: 10_000 })
|
|
}, { timeout: 10_000 })
|