fix(e2e): Buffer body for the /dl route fulfill
CI / changes (pull_request) Successful in 1s
CI / unit (pull_request) Successful in 9s
CI / integration (pull_request) Successful in 17s
CI / ui (pull_request) Successful in 1m2s
CI / conformance (pull_request) Successful in 9s
CI / gate (pull_request) Successful in 0s
CI / deploy (pull_request) Successful in 1m42s
CI / changes (pull_request) Successful in 1s
CI / unit (pull_request) Successful in 9s
CI / integration (pull_request) Successful in 17s
CI / ui (pull_request) Successful in 1m2s
CI / conformance (pull_request) Successful in 9s
CI / gate (pull_request) Successful in 0s
CI / deploy (pull_request) Successful in 1m42s
route.fulfill silently never resolves a FETCH interception given a Uint8Array body (a navigation download tolerates it), deadlocking the new share-sheet test — the fetch promise hung, no share, no toast. A node Buffer unblocks it. Also refreshes the spec header to the final per-platform delivery matrix.
This commit is contained in:
@@ -1,11 +1,11 @@
|
||||
import { Buffer } from 'node:buffer';
|
||||
import { expect, test, type Page } from './fixtures';
|
||||
|
||||
// The finished-game export: the history header's 📤 button opens the app's own format
|
||||
// chooser (never Telegram's native popup — its callback carries no user activation),
|
||||
// and BOTH formats travel the same unified route on every platform: the client mints a
|
||||
// signed relative URL (game.export_url), resolves it against its own origin and hands
|
||||
// it to the platform's native download — Telegram downloadFile / VKWebAppDownloadFile —
|
||||
// or a plain anchor download in a browser. g3 ("vs Rick") is the seeded finished game.
|
||||
// The finished-game export: one signed relative URL (game.export_url) resolved against
|
||||
// the app's own origin, delivered by the most native affordance per platform — Telegram's
|
||||
// showPopup chooser + downloadFile dialog (all bridge calls, activation-safe), VK's
|
||||
// native viewer/download, the OS share sheet with the fetched file on a mobile browser,
|
||||
// a plain anchor download on desktop. g3 ("vs Rick") is the seeded finished game.
|
||||
// The mock gateway returns a shape-faithful /dl/... path; the tests intercept that
|
||||
// route and serve bytes, so the download itself is exercised end to end.
|
||||
|
||||
@@ -13,9 +13,9 @@ import { expect, test, type Page } from './fixtures';
|
||||
const PNG_HEX =
|
||||
'89504e470d0a1a0a0000000d49484452000000010000000108060000001f15c489' +
|
||||
'0000000a49444154789c6360000000020001e221bc330000000049454e44ae426082';
|
||||
const PNG_BYTES = Uint8Array.from({ length: PNG_HEX.length / 2 }, (_, i) =>
|
||||
parseInt(PNG_HEX.slice(i * 2, i * 2 + 2), 16),
|
||||
);
|
||||
// Buffer, not Uint8Array: route.fulfill silently hangs a FETCH interception on a
|
||||
// Uint8Array body (a navigation download tolerates it) — the share test deadlocked.
|
||||
const PNG_BYTES = Buffer.from(PNG_HEX, 'hex');
|
||||
|
||||
async function routeDl(page: Page): Promise<void> {
|
||||
await page.route('**/dl/**', (route) => {
|
||||
|
||||
Reference in New Issue
Block a user