From 716248b70b28a0de589ecee355f9552ee1d75f3c Mon Sep 17 00:00:00 2001 From: Ouyang Xingyuan Date: Wed, 16 Sep 2026 14:46:37 +0800 Subject: [PATCH] test(app): cover local relative images in markdown preview e2e --- packages/app/e2e/browser/file-editing.spec.ts | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/packages/app/e2e/browser/file-editing.spec.ts b/packages/app/e2e/browser/file-editing.spec.ts index 43e1e03863..7698b027c8 100644 --- a/packages/app/e2e/browser/file-editing.spec.ts +++ b/packages/app/e2e/browser/file-editing.spec.ts @@ -2,6 +2,7 @@ import { mkdir, readFile, writeFile } from "node:fs/promises"; import path from "node:path"; import { expect, test, type Page } from "../support/fixtures"; import { + expandFolder, openFileExplorer, openFileFromExplorer, expectFileTabOpen, @@ -626,6 +627,37 @@ test.describe("CodeMirror workspace file editing", () => { await expect.poll(() => image.getAttribute("src")).not.toBe(initialSource); }); + test("renders local relative images inside Markdown preview", async ({ page, withWorkspace }) => { + test.setTimeout(90_000); + const workspace = await withWorkspace({ prefix: "file-md-relative-image-" }); + await mkdir(path.join(workspace.repoPath, "docs"), { recursive: true }); + await mkdir(path.join(workspace.repoPath, "data", "cache"), { recursive: true }); + await writeFile(path.join(workspace.repoPath, "docs", "sibling.png"), RED_PIXEL); + await writeFile(path.join(workspace.repoPath, "data", "cache", "hero.png"), RED_PIXEL); + await writeFile( + path.join(workspace.repoPath, "docs", "guide.md"), + ["# Guide", "", "![sibling](./sibling.png)", "", "![hero](../data/cache/hero.png)", ""].join( + "\n", + ), + "utf8", + ); + await workspace.navigateTo(); + const tree = page.getByTestId("file-explorer-tree-scroll"); + if (!(await tree.isVisible())) await openFileExplorer(page); + await expandFolder(page, "docs"); + await openFileFromExplorer(page, "guide.md"); + await expectFileTabOpen(page, "guide.md"); + + const visibleFilePane = page.getByTestId("workspace-file-pane").filter({ visible: true }); + await expect(visibleFilePane.getByText("Guide", { exact: true })).toBeVisible(); + const previewImages = visibleFilePane.getByTestId("markdown-preview-image"); + await expect(previewImages).toHaveCount(2); + for (const image of await previewImages.locator("img").all()) { + await expect(image).toBeVisible(); + await expect.poll(async () => (await image.getAttribute("src")) ?? "").not.toBe(""); + } + }); + test("previews and refreshes an HTML plan while preserving source access", async ({ page, withWorkspace,