diff --git a/e2e/work-orders/completion-uploads-mobile.spec.ts b/e2e/work-orders/completion-uploads-mobile.spec.ts index a8fde88f..f778567b 100644 --- a/e2e/work-orders/completion-uploads-mobile.spec.ts +++ b/e2e/work-orders/completion-uploads-mobile.spec.ts @@ -50,6 +50,10 @@ function multipartBoundary(request: Request): string | undefined { return /^multipart\/form-data; boundary=(.+)$/.exec(contentType)?.[1]; } +function multipartFileName(body: string): string | undefined { + return /filename="([^"]+)"/.exec(body)?.[1]; +} + async function hideQueryDevtools(page: Page) { await page.addStyleTag({ content: @@ -141,7 +145,7 @@ test.describe("Completion uploads on a mobile viewport", () => { const request = route.request(); const body = request.postDataBuffer()?.toString("latin1") ?? ""; uploads.push({ contentType: request.headers()["content-type"] ?? "", body }); - const fileName = /filename="([^"]+)"/.exec(body)?.[1] ?? "file"; + const fileName = multipartFileName(body) ?? "file"; const item = { id: 900 + media.length, category: 3, url: `/Assets/${fileName}`, fileName }; media.push(item); return fulfillJson(route, item); @@ -156,18 +160,18 @@ test.describe("Completion uploads on a mobile viewport", () => { const panel = await openCompletionTab(page, row.woNumber); const chooser = page.waitForEvent("filechooser"); await panel.getByRole("button", { name: /Drag files here or click to browse/ }).click(); - await ( - await chooser - ).setFiles([ + const files = [ { name: "IMG_0001.jpg", mimeType: "image/jpeg", buffer: JPEG }, { name: "VID_0002.MP4", mimeType: "video/mp4", buffer: MP4 }, { name: "IMG_1587.MOV", mimeType: "video/quicktime", buffer: MOV }, - ]); + ]; + await (await chooser).setFiles(files); - await expect.poll(() => uploads.length).toBe(3); - for (const [index, name] of ["IMG_0001.jpg", "VID_0002.MP4", "IMG_1587.MOV"].entries()) { - expect(uploads[index]!.contentType).toMatch(/^multipart\/form-data; boundary=/); - expect(uploads[index]!.body).toContain(`filename="${name}"`); + await expect.poll(() => uploads.length).toBe(files.length); + for (const { name } of files) { + const upload = uploads.find((item) => multipartFileName(item.body) === name); + expect(upload, `multipart upload for ${name}`).toBeTruthy(); + expect(upload!.contentType).toMatch(/^multipart\/form-data; boundary=/); } await panel.getByRole("combobox", { name: "Category for IMG_0001.jpg" }).selectOption("Before");