fix local markdown resource missing tabs and title setting

This commit is contained in:
lix-2026
2026-05-24 03:01:34 +08:00
parent 6904588055
commit 6df74fb4e0
10 changed files with 132 additions and 17 deletions
@@ -477,16 +477,41 @@ async function main() {
// 预期行为:链接应保留
const linkPreserved = linkTextAfter.includes("resource-note.md");
const popupCountBefore = popups.length;
const brokenLink = page
.locator('.document-pane[data-pane-role="primary"] .editor-surface .ProseMirror a', {
hasText: "resource-note.md",
})
.first();
await brokenLink.click({ timeout: UI_TIMEOUT_MS });
await page.waitForTimeout(1500);
const popupCountAfter = popups.length;
const resourceTabErrorVisible = await page
.locator('[data-testid="mnote-resource-tab-host"]:not([hidden]) .mnote-resource-tab-error, [data-mnote-resource-panel][data-resource-kind="error"]')
.first()
.isVisible()
.catch(() => false);
const resourceTabTitle = await page
.locator('[data-mnote-main-tab][data-pane-role="primary"] .mnote-main-tab-title', { hasText: "resource-note.md" })
.first()
.textContent({ timeout: UI_TIMEOUT_MS })
.catch(() => "");
assert.equal(popupCountAfter, popupCountBefore, "点击缺失附件不应打开新浏览器窗口");
assert(resourceTabErrorVisible, "点击缺失附件应进入 resource tab missing/error state");
assert((resourceTabTitle || "").includes("resource-note.md"), `缺失资源 tab 标题应包含 resource-note.md,实际: ${resourceTabTitle}`);
checks[checkId] = {
ok: linkPreserved,
message: linkPreserved
? "删除真实附件后刷新,正文链接仍保留"
? "删除真实附件后刷新,正文链接仍保留;点击缺失链接进入 resource tab missing/error state"
: "删除真实附件后刷新,正文链接消失(当前实现未保留 broken link",
assetPath,
deleted: true,
linkPreserved,
editorText: linkTextAfter.slice(0, 500),
popupCount: popupCountAfter - popupCountBefore,
resourceTabErrorVisible,
resourceTabTitle,
};
if (!linkPreserved) {
@@ -731,14 +756,57 @@ async function main() {
// 预期:文件树显示 MyNotes.md(文件名),正文显示 Body HeadingH1 内容)
const treeShowsFileName = treeTitle && treeTitle.includes("MyNotes.md");
const bodyShowsHeading = bodyHeading && bodyHeading.includes("Body Heading");
const titleHeaderInitiallyHidden = await page.evaluate(() => {
const header = document.querySelector('.document-pane[data-pane-role="primary"] .document-shell-header');
return header instanceof HTMLElement ? header.hidden || header.getAttribute("data-page-title-hidden") === "true" : false;
});
await page.locator('[data-testid="wolai-page-settings-trigger"]').click({ timeout: UI_TIMEOUT_MS });
const hideTitleCheckbox = page.locator('[data-page-option-checkbox="hideTitleHeader"]').first();
await hideTitleCheckbox.waitFor({ state: "visible", timeout: UI_TIMEOUT_MS });
const hideTitleCheckedBefore = await hideTitleCheckbox.isChecked();
assert.equal(hideTitleCheckedBefore, true, "本地 Markdown 应默认开启隐藏文件标题");
await hideTitleCheckbox.setChecked(false, { timeout: UI_TIMEOUT_MS });
const optionsPath = path.join(root, ".mnote", "page-options.json");
const optionsSaved = await waitForFileContent(
optionsPath,
(content) => {
try {
const payload = JSON.parse(content);
return payload?.pages?.["local-md:MyNotes.md"]?.hideTitleHeader === false;
} catch {
return false;
}
},
UI_TIMEOUT_MS,
);
assert(optionsSaved.ok, `页面设置应持久化 hideTitleHeader=false,实际: ${optionsSaved.content}`);
await page.waitForTimeout(500);
const titleHeaderVisibleAfterToggle = await page.evaluate(() => {
const header = document.querySelector('.document-pane[data-pane-role="primary"] .document-shell-header');
return header instanceof HTMLElement ? !header.hidden && header.getAttribute("data-page-title-hidden") === "false" : false;
});
await page.reload({ waitUntil: "domcontentloaded", timeout: UI_TIMEOUT_MS });
await page.locator('.document-pane[data-pane-role="primary"] .editor-surface .ProseMirror').first().waitFor({
state: "visible",
timeout: UI_TIMEOUT_MS,
});
const titleHeaderVisibleAfterReload = await page.evaluate(() => {
const header = document.querySelector('.document-pane[data-pane-role="primary"] .document-shell-header');
return header instanceof HTMLElement ? !header.hidden && header.getAttribute("data-page-title-hidden") === "false" : false;
});
checks[checkId] = {
ok: !!(treeShowsFileName && bodyShowsHeading),
ok: !!(treeShowsFileName && bodyShowsHeading && titleHeaderInitiallyHidden && titleHeaderVisibleAfterToggle && titleHeaderVisibleAfterReload),
message: `treeTitle="${treeTitle}" bodyHeading="${bodyHeading}"`,
treeTitle,
bodyHeading,
treeShowsFileName,
bodyShowsHeading,
titleHeaderInitiallyHidden,
hideTitleCheckedBefore,
titleHeaderVisibleAfterToggle,
titleHeaderVisibleAfterReload,
};
} catch (err) {
overallOk = false;