90 lines
2.8 KiB
TypeScript
90 lines
2.8 KiB
TypeScript
import {
|
|
expect,
|
|
gotoSilverBulletPage,
|
|
mod,
|
|
test,
|
|
waitForEditorReady,
|
|
waitForSaveAndReadFromServer,
|
|
} from "./fixtures.ts";
|
|
|
|
test.describe("Wiki links", () => {
|
|
test.describe("cross-page navigation", () => {
|
|
test.use({
|
|
spaceFiles: {
|
|
"PageA.md": "# Page A\nLink to [[PageB]] here",
|
|
"PageB.md": "# Page B\nThis is page B content",
|
|
},
|
|
});
|
|
|
|
test("navigate between pages via wiki link click", async ({
|
|
sbServer,
|
|
page,
|
|
}) => {
|
|
await gotoSilverBulletPage(page, sbServer, "PageA");
|
|
const editor = page.locator("#sb-editor .cm-content");
|
|
|
|
await expect(page.locator("#sb-current-page input.sb-input")).toHaveValue(
|
|
"PageA",
|
|
);
|
|
await expect(editor).toContainText("Page A");
|
|
|
|
// Click on the "PageB" text inside the wiki link
|
|
const wikiLinkText = editor.locator(".sb-wiki-link", {
|
|
hasText: "PageB",
|
|
});
|
|
await expect(wikiLinkText).toBeVisible({ timeout: 10_000 });
|
|
await wikiLinkText.click();
|
|
|
|
// Should navigate to PageB
|
|
await expect(page.locator("#sb-current-page input.sb-input")).toHaveValue(
|
|
"PageB",
|
|
);
|
|
await expect(editor).toContainText("Page B");
|
|
});
|
|
});
|
|
|
|
test("wiki link to non-existent page creates it on click and saves", async ({
|
|
sbPage,
|
|
sbServer,
|
|
}) => {
|
|
const editor = sbPage.locator("#sb-editor .cm-content");
|
|
await expect(editor).toContainText("Welcome");
|
|
|
|
// Navigate to a fresh page
|
|
await sbPage.keyboard.press(`${mod}+k`);
|
|
await sbPage.locator(".sb-modal-box input.sb-input").click();
|
|
await sbPage.keyboard.type("Link Source", { delay: 30 });
|
|
await sbPage.keyboard.press("Shift+Enter");
|
|
await expect(editor).toHaveText("");
|
|
|
|
// Wait for the editor to finish loading and any pageLoaded handlers
|
|
// to settle before typing. Otherwise CodeMirror reconfigures mid-type
|
|
// and the cursor jumps back to position 0, splitting input.
|
|
await waitForEditorReady(sbPage);
|
|
await editor.click();
|
|
await sbPage.keyboard.type("Check out [[Brand New Page]]", { delay: 20 });
|
|
|
|
// Verify the source page with the wiki link is saved to server
|
|
const sourceContent = await waitForSaveAndReadFromServer(
|
|
sbPage,
|
|
sbServer,
|
|
"Link Source.md",
|
|
);
|
|
expect(sourceContent).toContain("[[Brand New Page]]");
|
|
|
|
// Move cursor away from the link so it renders
|
|
await sbPage.keyboard.press("Home");
|
|
|
|
// Click on the wiki link text to navigate/create
|
|
const wikiLinkText = editor.locator(".sb-wiki-link", {
|
|
hasText: "Brand New Page",
|
|
});
|
|
await expect(wikiLinkText).toBeVisible({ timeout: 10_000 });
|
|
await wikiLinkText.click();
|
|
|
|
await expect(sbPage.locator("#sb-current-page input.sb-input")).toHaveValue(
|
|
"Brand New Page",
|
|
);
|
|
});
|
|
});
|