@@ -220,9 +220,18 @@ describe("matrix sync helpers", () => {
|
220 | 220 | |
221 | 221 | it("shares one in-flight /sync poll across concurrent waits", async () => { |
222 | 222 | let calls = 0; |
| 223 | +let markFetchStarted: () => void = () => {}; |
| 224 | +const fetchStarted = new Promise<void>((resolve) => { |
| 225 | +markFetchStarted = resolve; |
| 226 | +}); |
| 227 | +let releaseFetch: () => void = () => {}; |
| 228 | +const fetchCanComplete = new Promise<void>((resolve) => { |
| 229 | +releaseFetch = resolve; |
| 230 | +}); |
223 | 231 | const fetchImpl: typeof fetch = async () => { |
224 | 232 | calls += 1; |
225 | | -await new Promise((resolve) => setTimeout(resolve, 10)); |
| 233 | +markFetchStarted(); |
| 234 | +await fetchCanComplete; |
226 | 235 | return new Response( |
227 | 236 | JSON.stringify({ |
228 | 237 | next_batch: "next-batch-2", |
@@ -260,7 +269,7 @@ describe("matrix sync helpers", () => {
|
260 | 269 | since: "start-batch", |
261 | 270 | }); |
262 | 271 | |
263 | | -const [reply, notice] = await Promise.all([ |
| 272 | +const waits = Promise.all([ |
264 | 273 | observer.waitForRoomEvent({ |
265 | 274 | predicate: (event) => event.eventId === "$reply", |
266 | 275 | roomId: "!room:matrix-qa.test", |
@@ -273,6 +282,11 @@ describe("matrix sync helpers", () => {
|
273 | 282 | }), |
274 | 283 | ]); |
275 | 284 | |
| 285 | +await fetchStarted; |
| 286 | +await Promise.resolve(); |
| 287 | +releaseFetch(); |
| 288 | +const [reply, notice] = await waits; |
| 289 | + |
276 | 290 | expect(reply.event.eventId).toBe("$reply"); |
277 | 291 | expect(notice).toMatchObject({ |
278 | 292 | event: expect.objectContaining({ |
|