diff --git a/packages/browser-pay/src/interceptor.protocol.test.ts b/packages/browser-pay/src/interceptor.protocol.test.ts index 7187b7dda..3b793915f 100644 --- a/packages/browser-pay/src/interceptor.protocol.test.ts +++ b/packages/browser-pay/src/interceptor.protocol.test.ts @@ -1110,18 +1110,31 @@ describe("interceptor CDP decisions", () => { ...paused, params: { ...paused.params, requestId: "req-b" }, }); - await new Promise((resolve) => setTimeout(resolve, 40)); - expect(calls).toBe(1); - release(); await waitFor( () => stub.commands.filter( - (command) => command.method === "Fetch.failRequest", + (command) => + command.method === "Runtime.evaluate" && + command.params.expression === "location.origin", ).length >= 2, - "both failed", + "second origin", + ); + // The stub writes this reply before the command is visible. setImmediate + // runs after the poll that applies it, which is when req-b joins. + await new Promise((resolve) => setImmediate(resolve)); + expect(calls).toBe(1); + release(); + await waitFor( + () => events.filter((event) => event.type === "refused").length >= 2, + "both refused", ); expect(calls).toBe(1); expect(warnings).toEqual(["payment relay refused the paused request"]); + expect( + stub.commands.filter( + (command) => command.method === "Fetch.failRequest", + ), + ).toHaveLength(2); expect(events.filter((event) => event.type === "refused")).toHaveLength( 2, ); diff --git a/packages/browser-pay/src/interceptor.relay-in-progress.test.ts b/packages/browser-pay/src/interceptor.relay-in-progress.test.ts index f7f927ab7..ed7be7b29 100644 --- a/packages/browser-pay/src/interceptor.relay-in-progress.test.ts +++ b/packages/browser-pay/src/interceptor.relay-in-progress.test.ts @@ -802,7 +802,9 @@ describe("relay_in_progress", () => { }, placeholder: HELD, profileId: "shopify-card-vault", - timeoutMs: 500, + // The later waiter starts after the retry post, so its deadline trails + // the first by about one poll backoff. 1.5s keeps that gap if a timer fires late. + timeoutMs: 1_500, }); handle.on((event) => events.push(event)); try { @@ -812,8 +814,7 @@ describe("relay_in_progress", () => { "Fetch.enable", ); emitPaused(cdp, "req-early-deadline"); - await waitFor(() => calls === 1, "first post"); - await new Promise((resolve) => setTimeout(resolve, 40)); + await waitFor(() => calls === 2, "retry posted"); emitPaused(cdp, "req-later-deadline"); await waitFor( () => @@ -1111,8 +1112,8 @@ describe("relay retry before the deadline", () => { }, placeholder: HELD, profileId: "shopify-card-vault", - timeoutMs: 2_000, - attemptTimeoutMs: 120, + timeoutMs: 5_000, + attemptTimeoutMs: 400, }); try { armPage(cdp); @@ -1122,7 +1123,6 @@ describe("relay retry before the deadline", () => { ); emitPaused(cdp, "req-shared-a"); await waitFor(() => calls === 1, "first attempt"); - await new Promise((resolve) => setTimeout(resolve, 80)); emitPaused(cdp, "req-shared-b"); await waitFor( () => count(cdp.commands, "Fetch.fulfillRequest") === 2, @@ -1130,8 +1130,8 @@ describe("relay retry before the deadline", () => { ); expect(calls).toBe(2); expect(aborts).toHaveLength(1); - expect(aborts[0]).toBeGreaterThanOrEqual(100); - expect(aborts[0]).toBeLessThan(160); + expect(aborts[0]).toBeGreaterThanOrEqual(300); + expect(aborts[0]).toBeLessThan(2_000); expect(count(cdp.commands, "Fetch.failRequest")).toBe(0); } finally { await handle.detach();