From 3f439a66ad0f23d11d42261077458caa9ec24c28 Mon Sep 17 00:00:00 2001 From: Nathan Vasse Date: Thu, 16 Apr 2026 18:13:18 +0200 Subject: [PATCH] =?UTF-8?q?=E2=9C=85(frontend)=20update=20wopi=20e2e=20tes?= =?UTF-8?q?ts=20for=20new-tab=20flow?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Follow the WOPI-in-new-tab change: the double-click scenario now asserts that a new page opens with the office iframe and that the preview modal stays closed, a new test covers the "Open in editor" placeholder reached by keyboard navigating onto a WOPI file, and the copy/paste scenario drives the detached wopiPage. Refresh canvas snapshots accordingly and drop the obsolete per-spec snapshot copies. --- .../apps/e2e/__tests__/app-drive/wopi.spec.ts | 133 +++++++++++++++--- .../empty-doc-canvas-after-paste-chromium.png | Bin 11054 -> 0 bytes .../empty-doc-canvas-chromium.png | Bin 9868 -> 0 bytes .../empty-doc-canvas-after-paste-chromium.png | Bin 11072 -> 8139 bytes .../__tests__/empty-doc-canvas-chromium.png | Bin 10263 -> 7368 bytes 5 files changed, 110 insertions(+), 23 deletions(-) delete mode 100644 src/frontend/apps/e2e/__tests__/app-drive/wopi.spec.ts-snapshots/empty-doc-canvas-after-paste-chromium.png delete mode 100644 src/frontend/apps/e2e/__tests__/app-drive/wopi.spec.ts-snapshots/empty-doc-canvas-chromium.png diff --git a/src/frontend/apps/e2e/__tests__/app-drive/wopi.spec.ts b/src/frontend/apps/e2e/__tests__/app-drive/wopi.spec.ts index b91dc7ac..e014b858 100644 --- a/src/frontend/apps/e2e/__tests__/app-drive/wopi.spec.ts +++ b/src/frontend/apps/e2e/__tests__/app-drive/wopi.spec.ts @@ -6,7 +6,94 @@ import { getRowItem } from "./utils-embedded-grid"; import { uploadFile } from "./utils/upload-utils"; import { grantClipboardPermissions } from "./utils/various-utils"; -test("Copy and paste works in wopi editor", async ({ page, context, browserName }) => { +const IMAGE_FILE_PATH = path.join(__dirname, "/assets/test-image.png"); +const DOCX_FILE_PATH = path.join(__dirname, "/assets/empty_doc.docx"); + +test("Double-clicking a WOPI file opens the editor in a new tab", async ({ + page, + context, + browserName, +}) => { + test.skip(browserName !== "chromium", "Only runs on chromium"); + await clearDb(); + await login(page, "drive@example.com"); + await page.goto("/"); + await clickToMyFiles(page); + await expect(page.getByText("This tab is empty")).toBeVisible(); + + await uploadFile(page, DOCX_FILE_PATH); + await expect(page.getByText("Drop your files here")).not.toBeVisible(); + + const row = await getRowItem(page, "empty_doc"); + const [wopiPage] = await Promise.all([ + context.waitForEvent("page"), + row.dblclick(), + ]); + await wopiPage.waitForLoadState("domcontentloaded"); + + // The preview modal must not open in the main tab. + await expect(page.getByTestId("file-preview")).not.toBeVisible(); + + const wopiIframe = wopiPage.locator('iframe[name="office_frame"]'); + await expect(wopiIframe).toBeVisible(); +}); + +test("Navigating the previewer onto a WOPI file shows the Open in editor placeholder", async ({ + page, + context, + browserName, +}) => { + test.skip(browserName !== "chromium", "Only runs on chromium"); + await clearDb(); + await login(page, "drive@example.com"); + await page.goto("/"); + await clickToMyFiles(page); + await expect(page.getByText("This tab is empty")).toBeVisible(); + + await uploadFile(page, [IMAGE_FILE_PATH, DOCX_FILE_PATH]); + await expect( + page.getByRole("cell", { name: "test-image", exact: true }), + ).toBeVisible({ timeout: 10000 }); + await expect( + page.getByRole("cell", { name: "empty_doc", exact: true }), + ).toBeVisible({ timeout: 10000 }); + + // Open a non-WOPI file first so the previewer mounts normally. + await page + .getByRole("cell", { name: "test-image", exact: true }) + .dblclick(); + const filePreview = page.getByTestId("file-preview"); + await expect(filePreview).toBeVisible({ timeout: 10000 }); + + // Default ordering is "-type,title": empty_doc.docx sorts before + // test-image.png, so ArrowLeft navigates from the image to the docx. + await page.keyboard.press("ArrowLeft"); + + const unsupported = filePreview.locator(".file-preview-unsupported"); + await expect(unsupported).toBeVisible(); + await expect( + unsupported.locator(".file-preview-unsupported__title"), + ).toHaveText("empty_doc.docx"); + + const openButton = unsupported.getByRole("button", { + name: "Open in editor", + }); + await expect(openButton).toBeVisible(); + + const [wopiPage] = await Promise.all([ + context.waitForEvent("page"), + openButton.click(), + ]); + await wopiPage.waitForLoadState("domcontentloaded"); + + await expect(wopiPage.locator('iframe[name="office_frame"]')).toBeVisible(); +}); + +test("Copy and paste works in wopi editor", async ({ + page, + context, + browserName, +}) => { test.skip(browserName !== "chromium", "Only runs on chromium"); grantClipboardPermissions(browserName, context); await clearDb(); @@ -16,32 +103,32 @@ test("Copy and paste works in wopi editor", async ({ page, context, browserName await expect(page.getByText("This tab is empty")).toBeVisible(); // Start waiting for file chooser before clicking. Note no await. - await uploadFile(page, path.join(__dirname, "/assets/empty_doc.docx")); + await uploadFile(page, DOCX_FILE_PATH); // Wait for the file to be uploaded and visible in the list await expect(page.getByText("Drop your files here")).not.toBeVisible(); - // Click on the file to open the preview + // Double-click opens the editor in a new tab. const row = await getRowItem(page, "empty_doc"); - await row.dblclick(); + const [wopiPage] = await Promise.all([ + context.waitForEvent("page"), + row.dblclick(), + ]); + await wopiPage.waitForLoadState("domcontentloaded"); - // Check that the file preview is visible - const filePreview = page.getByTestId("file-preview"); - await expect(filePreview).toBeVisible(); - - const wopiIframe = filePreview.locator('iframe[name="office_frame"]'); + const wopiIframe = wopiPage.locator('iframe[name="office_frame"]'); await expect(wopiIframe).toBeVisible(); await expect( - page + wopiPage .locator('iframe[name="office_frame"]') .contentFrame() .locator('iframe[name="iframe-welcome-form"]') .contentFrame() .getByRole("heading", { name: "Explore The New" }), - ).toBeVisible(); + ).toBeVisible({ timeout: 30000 }); - await page + await wopiPage .locator('iframe[name="office_frame"]') .contentFrame() .locator('iframe[name="iframe-welcome-form"]') @@ -49,7 +136,7 @@ test("Copy and paste works in wopi editor", async ({ page, context, browserName .getByRole("button", { name: "Close" }) .click(); - const canvas = page + const canvas = wopiPage .locator('iframe[name="office_frame"]') .contentFrame() .locator('canvas[id="document-canvas"]'); @@ -59,28 +146,28 @@ test("Copy and paste works in wopi editor", async ({ page, context, browserName await expect(canvas).toHaveScreenshot("empty-doc-canvas.png", { maxDiffPixelRatio: 0.01, }); - await page + await wopiPage .locator('iframe[name="office_frame"]') .contentFrame() .locator(".leaflet-layer") .click({ force: true }); - await page.waitForTimeout(1000); - await page + await wopiPage.waitForTimeout(1000); + await wopiPage .locator('iframe[name="office_frame"]') .contentFrame() .locator("#clipboard-area") .press("ControlOrMeta+a"); - await page.waitForTimeout(1000); - await page.keyboard.press(`ControlOrMeta+KeyC`); - await page.waitForTimeout(1000); - await page + await wopiPage.waitForTimeout(1000); + await wopiPage.keyboard.press(`ControlOrMeta+KeyC`); + await wopiPage.waitForTimeout(1000); + await wopiPage .locator('iframe[name="office_frame"]') .contentFrame() .locator("#clipboard-area") .press("ArrowRight"); - await page.waitForTimeout(1000); - await page.keyboard.press(`ControlOrMeta+KeyV`); - await page.waitForTimeout(1000); + await wopiPage.waitForTimeout(1000); + await wopiPage.keyboard.press(`ControlOrMeta+KeyV`); + await wopiPage.waitForTimeout(1000); await expect(canvas).toHaveScreenshot("empty-doc-canvas-after-paste.png", { maxDiffPixelRatio: 0.01, }); diff --git a/src/frontend/apps/e2e/__tests__/app-drive/wopi.spec.ts-snapshots/empty-doc-canvas-after-paste-chromium.png b/src/frontend/apps/e2e/__tests__/app-drive/wopi.spec.ts-snapshots/empty-doc-canvas-after-paste-chromium.png deleted file mode 100644 index 1eb78d3da0eb1841e0980db89a2cf7a80508a76a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11054 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 L+$g$c_v}9aPD#Wj diff --git a/src/frontend/apps/e2e/__tests__/empty-doc-canvas-after-paste-chromium.png b/src/frontend/apps/e2e/__tests__/empty-doc-canvas-after-paste-chromium.png index c092eddd159b83b920ebcbf9b00a64ba3569427a..833c861651c464297bdb999b185dc519cd8fecf6 100644 GIT binary patch literal 8139 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 literal 10263 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