Skip to content

Commit d8a636b

Browse files
committed
merge: bring split event.scope tests into reconnect herd stack
2 parents 3f48633 + 9deb064 commit d8a636b

1 file changed

Lines changed: 53 additions & 30 deletions

File tree

packages/tui/test/cli/tui/client-scope.test.tsx

Lines changed: 53 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -14,50 +14,73 @@ async function wait(fn: () => boolean, timeout = 2000) {
1414
}
1515
}
1616

17-
describe("ClientProvider event.scope", () => {
18-
test("reconnects the event stream when interest changes, not when it is unchanged", async () => {
19-
const events = createEventStream()
20-
const eventUrls: URL[] = []
21-
const calls = createFetch((url, request) => {
22-
if (url.pathname !== "/api/event") return undefined
23-
eventUrls.push(url)
24-
return events.v2(request.signal)
25-
}, events)
17+
async function mount(interest: { location: { directory: string }; sessions?: string[] }) {
18+
const events = createEventStream()
19+
const eventUrls: URL[] = []
20+
const calls = createFetch((url, request) => {
21+
if (url.pathname !== "/api/event") return undefined
22+
eventUrls.push(url)
23+
return events.v2(request.signal)
24+
}, events)
2625

27-
let client!: ReturnType<typeof useClient>
28-
let done!: () => void
29-
const ready = new Promise<void>((resolve) => {
30-
done = resolve
31-
})
26+
let client!: ReturnType<typeof useClient>
27+
let done!: () => void
28+
const ready = new Promise<void>((resolve) => {
29+
done = resolve
30+
})
3231

33-
const app = await testRender(() => (
34-
<TestTuiContexts>
35-
<ClientProvider
36-
api={createApi(calls.fetch)}
37-
interest={{ location: { directory } }}
38-
>
39-
<Probe
40-
onReady={(ctx) => {
41-
client = ctx
42-
done()
43-
}}
44-
/>
45-
</ClientProvider>
46-
</TestTuiContexts>
47-
))
32+
const app = await testRender(() => (
33+
<TestTuiContexts>
34+
<ClientProvider api={createApi(calls.fetch)} interest={interest}>
35+
<Probe
36+
onReady={(ctx) => {
37+
client = ctx
38+
done()
39+
}}
40+
/>
41+
</ClientProvider>
42+
</TestTuiContexts>
43+
))
4844

45+
await ready
46+
return { app, client, eventUrls }
47+
}
48+
49+
describe("ClientProvider event.scope", () => {
50+
test("connects the event stream with location interest", async () => {
51+
const { app, client, eventUrls } = await mount({ location: { directory } })
4952
try {
50-
await ready
5153
await wait(() => client.connection.status() === "connected" && eventUrls.length >= 1)
5254
expect(eventUrls[0]!.searchParams.get("location[directory]")).toBe(directory)
5355
expect(eventUrls[0]!.searchParams.getAll("session")).toEqual([])
56+
} finally {
57+
app.renderer.destroy()
58+
}
59+
})
60+
61+
test("reconnects when session interest changes", async () => {
62+
const { app, client, eventUrls } = await mount({ location: { directory } })
63+
try {
64+
await wait(() => client.connection.status() === "connected" && eventUrls.length >= 1)
5465

5566
client.event.scope({ location: { directory }, sessions: ["ses_a"] })
5667
await wait(() => eventUrls.length >= 2)
5768
expect(eventUrls[1]!.searchParams.get("location[directory]")).toBe(directory)
5869
expect(eventUrls[1]!.searchParams.getAll("session")).toEqual(["ses_a"])
70+
} finally {
71+
app.renderer.destroy()
72+
}
73+
})
5974

75+
test("does not reconnect when interest is unchanged", async () => {
76+
const { app, client, eventUrls } = await mount({
77+
location: { directory },
78+
sessions: ["ses_a"],
79+
})
80+
try {
81+
await wait(() => client.connection.status() === "connected" && eventUrls.length >= 1)
6082
const before = eventUrls.length
83+
6184
client.event.scope({ location: { directory }, sessions: ["ses_a"] })
6285
await Bun.sleep(50)
6386
expect(eventUrls.length).toBe(before)

0 commit comments

Comments
 (0)