fix local markdown resource missing tabs and title setting
This commit is contained in:
@@ -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 Heading(H1 内容)
|
||||
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;
|
||||
|
||||
Reference in New Issue
Block a user