Files
plainleaf/plugs/index/link.test.ts
T
Zef Hemel 02bd8ed362 Migration Deno -> Node.js
* First pass
* Now using vitest for tests
2026-02-14 22:08:35 +01:00

56 lines
2.1 KiB
TypeScript

import { expect, test } from "vitest";
import { parseMarkdown } from "../../client/markdown_parser/parser.ts";
import { createMockSystem } from "../../plug-api/system_mock.ts";
import type { PageMeta } from "@silverbulletmd/silverbullet/type/index";
import { extractFrontMatter } from "./frontmatter.ts";
import { indexLinks } from "./link.ts";
const testPage = `
---
attribute: "[[fm-link]]"
---
This is a [[page-link]] to [[aliased-link|aliased]], or [this](md-link), and [[broken]], or [external](https://example.com), or [document](test.jpg), or [[test2.jpg]]
`.trim();
test("Test page link indexing", async () => {
const { space } = createMockSystem();
// Create dummy targets to avoid a lot of aspiring pages
await space.writePage("page-link", "");
await space.writePage("fm-link", "");
await space.writePage("aliased-link", "");
await space.writePage("folder/md-link", "");
const tree = parseMarkdown(testPage);
const frontmatter = extractFrontMatter(tree);
const pageMeta: PageMeta = {
ref: "folder/test",
name: "folder/test",
tag: "page",
created: "",
lastModified: "",
perm: "rw",
};
const objects = await indexLinks(pageMeta, frontmatter, tree, testPage);
expect(objects.length).toEqual(9); // 7 links + 1 aspiring page
expect(objects[0].toPage).toEqual("fm-link");
expect(objects[0].type).toEqual("page");
expect(objects[1].toPage).toEqual("page-link");
expect(objects[1].type).toEqual("page");
expect(objects[2].toPage).toEqual("aliased-link");
expect(objects[2].type).toEqual("page");
expect(objects[2].alias).toEqual("aliased");
expect(objects[3].toPage).toEqual("folder/md-link"); // relative
expect(objects[3].type).toEqual("page");
expect(objects[4].toPage).toEqual("broken");
expect(objects[4].type).toEqual("page");
expect(objects[5].toURL).toEqual("https://example.com");
expect(objects[5].type).toEqual("url");
expect(objects[6].toFile).toEqual("folder/test.jpg");
expect(objects[6].type).toEqual("file");
expect(objects[7].toFile).toEqual("test2.jpg");
expect(objects[7].type).toEqual("file");
});