28 lines
1.1 KiB
TypeScript
28 lines
1.1 KiB
TypeScript
|
|
import { assertEquals, assertThrows } from '@std/assert'
|
||
|
|
import { parseFrontmatter } from '../src/core/frontmatter.ts'
|
||
|
|
|
||
|
|
Deno.test('parseFrontmatter: zerlegt Frontmatter und Body', async () => {
|
||
|
|
const md = await Deno.readTextFile('./tests/fixtures/sample-post.md')
|
||
|
|
const { fm, body } = parseFrontmatter(md)
|
||
|
|
assertEquals(fm.title, 'Sample Title')
|
||
|
|
assertEquals(fm.slug, 'sample-slug')
|
||
|
|
assertEquals(fm.date instanceof Date, true)
|
||
|
|
assertEquals(fm.tags, ['Foo', 'Bar'])
|
||
|
|
assertEquals(fm.cover?.image, 'cover.png')
|
||
|
|
assertEquals(body.trim().startsWith('Body content here.'), true)
|
||
|
|
})
|
||
|
|
|
||
|
|
Deno.test('parseFrontmatter: wirft bei fehlendem Frontmatter', () => {
|
||
|
|
assertThrows(() => parseFrontmatter('no frontmatter here'), Error, 'Frontmatter')
|
||
|
|
})
|
||
|
|
|
||
|
|
Deno.test('parseFrontmatter: wirft bei unvollständigem Frontmatter', () => {
|
||
|
|
assertThrows(() => parseFrontmatter('---\ntitle: x\n'), Error, 'Frontmatter')
|
||
|
|
})
|
||
|
|
|
||
|
|
Deno.test('parseFrontmatter: erhält Leerzeichen in String-Werten', () => {
|
||
|
|
const md = '---\ntitle: "Hello World"\nslug: "h-w"\ndate: 2024-01-01\n---\n\nbody'
|
||
|
|
const { fm } = parseFrontmatter(md)
|
||
|
|
assertEquals(fm.title, 'Hello World')
|
||
|
|
})
|