You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
115 lines
4.4 KiB
115 lines
4.4 KiB
import { describe, it, expect } from "vitest"; |
|
import { parseBasicmarkup } from "../../src/lib/utils/markup/basicMarkupParser"; |
|
import { parseAdvancedmarkup } from "../../src/lib/utils/markup/advancedMarkupParser"; |
|
import { readFileSync } from "fs"; |
|
import { join } from "path"; |
|
|
|
const testFilePath = join(__dirname, "./markupTestfile.md"); |
|
const md = readFileSync(testFilePath, "utf-8"); |
|
|
|
describe("Markup Integration Test", () => { |
|
it("parses markupTestfile.md with the basic parser", async () => { |
|
const output = await parseBasicmarkup(md); |
|
// Headers (should be present as raw text, not HTML tags) |
|
expect(output).toContain("This is a test"); |
|
expect(output).toContain("# This is a test"); |
|
expect(output).toContain("### Disclaimer"); |
|
// Unordered list |
|
expect(output).toContain("<ul"); |
|
expect(output).toContain("but"); |
|
// Ordered list |
|
expect(output).toContain("<ol"); |
|
expect(output).toContain("first"); |
|
// Nested lists |
|
expect(output).toMatch(/<ul[^>]*>.*<ul[^>]*>/s); |
|
// Blockquotes |
|
expect(output).toContain("<blockquote"); |
|
expect(output).toContain("This is important information"); |
|
// Inline code |
|
expect(output).toContain( |
|
'<div class="leather min-h-full w-full flex flex-col items-center">', |
|
); |
|
// Images |
|
expect(output).toMatch( |
|
/<img[^>]+src="https:\/\/upload\.wikimedia\.org\/wikipedia\/commons\/f\/f1\/Heart_coraz%C3%B3n\.svg"/, |
|
); |
|
// Links |
|
expect(output).toMatch( |
|
/<a[^>]+href="https:\/\/github.com\/nostrability\/nostrability\/issues\/146"/, |
|
); |
|
// Hashtags |
|
expect(output).toContain("text-primary-600"); |
|
// Nostr identifiers (should be Alexandria links) |
|
expect(output).toContain( |
|
"./events?id=npub1l5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqstegx9z", |
|
); |
|
// Wikilinks |
|
expect(output).toContain("wikilink"); |
|
// YouTube iframe |
|
expect(output).toMatch(/<iframe[^>]+youtube/); |
|
// Tracking token removal: should not contain utm_, fbclid, or gclid in any link |
|
expect(output).not.toMatch(/utm_/); |
|
expect(output).not.toMatch(/fbclid/); |
|
expect(output).not.toMatch(/gclid/); |
|
// Horizontal rule (should be present as --- in basic) |
|
expect(output).toContain("---"); |
|
// Footnote references (should be present as [^1] in basic) |
|
expect(output).toContain("[^1]"); |
|
// Table (should be present as | Syntax | Description | in basic) |
|
expect(output).toContain("| Syntax | Description |"); |
|
}); |
|
|
|
it("parses markupTestfile.md with the advanced parser", async () => { |
|
const output = await parseAdvancedmarkup(md); |
|
// Headers |
|
expect(output).toContain("<h1"); |
|
expect(output).toContain("<h2"); |
|
expect(output).toContain("Disclaimer"); |
|
// Unordered list |
|
expect(output).toContain("<ul"); |
|
expect(output).toContain("but"); |
|
// Ordered list |
|
expect(output).toContain("<ol"); |
|
expect(output).toContain("first"); |
|
// Nested lists |
|
expect(output).toMatch(/<ul[^>]*>.*<ul[^>]*>/s); |
|
// Blockquotes |
|
expect(output).toContain("<blockquote"); |
|
expect(output).toContain("This is important information"); |
|
// Inline code |
|
expect(output).toMatch( |
|
/<code[^>]*>.*leather min-h-full w-full flex flex-col items-center.*<\/code>/s, |
|
); |
|
// Images |
|
expect(output).toMatch( |
|
/<img[^>]+src="https:\/\/upload\.wikimedia\.org\/wikipedia\/commons\/f\/f1\/Heart_coraz%C3%B3n\.svg"/, |
|
); |
|
// Links |
|
expect(output).toMatch( |
|
/<a[^>]+href="https:\/\/github.com\/nostrability\/nostrability\/issues\/146"/, |
|
); |
|
// Hashtags |
|
expect(output).toContain("text-primary-600"); |
|
// Nostr identifiers (should be Alexandria links) |
|
expect(output).toContain( |
|
"./events?id=npub1l5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqstegx9z", |
|
); |
|
// Wikilinks |
|
expect(output).toContain("wikilink"); |
|
// YouTube iframe |
|
expect(output).toMatch(/<iframe[^>]+youtube/); |
|
// Tracking token removal: should not contain utm_, fbclid, or gclid in any link |
|
expect(output).not.toMatch(/utm_/); |
|
expect(output).not.toMatch(/fbclid/); |
|
expect(output).not.toMatch(/gclid/); |
|
// Horizontal rule |
|
expect(output).toContain("<hr"); |
|
// Footnote references and section |
|
expect(output).toContain("Footnotes"); |
|
expect(output).toMatch(/<li id=\"fn-1\">/); |
|
// Table |
|
expect(output).toContain("<table"); |
|
// Code blocks |
|
expect(output).toContain("<pre"); |
|
}); |
|
});
|
|
|