test(e2e): match completion media uploads by filename

Assert concurrent JPG, MP4, and MOV multipart requests by filename instead of
arrival order so browser-smoke stays deterministic with two workers.
This commit is contained in:
Cursor Agent 2026-09-20 21:37:34 +00:00
parent 40a3b135cf
commit c5e01c7491
No known key found for this signature in database

View file

@ -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");