1
0
silverbullet/plug-api/lib/feed.test.ts
2023-08-23 19:08:21 +02:00

50 lines
1.2 KiB
TypeScript

import "$sb/lib/syscall_mock.ts";
import { parse } from "../../common/markdown_parser/parse_tree.ts";
import buildMarkdown from "../../common/markdown_parser/parser.ts";
import { assertEquals } from "../../test_deps.ts";
import { extractFeedItems } from "$sb/lib/feed.ts";
import { nodeDefToMDExt } from "../../common/markdown_parser/markdown_ext.ts";
const feedSample1 = `---
test: ignore me
---
# My first item
$myid
Some text
---
# My second item
[id: myid2][otherAttribute: 42]
And some text
---
Completely free form
`;
Deno.test("Test feed parsing", async () => {
// Ad hoc added the NamedAnchor extension from the core plug-in inline here
const lang = buildMarkdown([nodeDefToMDExt("NamedAnchor", {
firstCharacters: ["$"],
regex: "\\$[a-zA-Z\\.\\-\\/]+[\\w\\.\\-\\/]*",
})]);
const tree = parse(lang, feedSample1);
const items = await extractFeedItems(tree);
assertEquals(items.length, 3);
assertEquals(items[0], {
id: "myid",
text: "Some text",
title: "My first item",
});
assertEquals(items[1], {
id: "myid2",
attributes: {
otherAttribute: 42,
},
title: "My second item",
text: "And some text",
});
assertEquals(items[2].text, "Completely free form");
});