Files
IronKanban/tests/FrontMatterParserTest.php
T
Keith Solomon 92e78e28e6 🐞 fix: Linting cleanup
2026-03-22 22:35:04 -05:00

75 lines
2.1 KiB
PHP

<?php
// phpcs:disable
declare(strict_types=1);
namespace IronKanban\Tests;
use IronKanban\Markdown\FrontMatterDocument;
use IronKanban\Markdown\FrontMatterParser;
use PHPUnit\Framework\TestCase;
class FrontMatterParserTest extends TestCase {
public function testParsesFrontMatterAndBody(): void {
$contents = <<<MD
---
id: task-123
title: Test Task
completed: false
tags:
- alpha
- beta
---
# Hello
This is the body.
MD;
$parser = new FrontMatterParser();
$document = $parser->parseString($contents);
$this->assertSame('task-123', $document->meta['id']);
$this->assertSame('Test Task', $document->meta['title']);
$this->assertFalse($document->meta['completed']);
$this->assertSame(['alpha', 'beta'], $document->meta['tags']);
$this->assertStringContainsString('# Hello', $document->body);
}
public function testReturnsEmptyMetaWhenNoFrontMatterExists(): void {
$contents = <<<MD
# Plain Markdown
No front matter here.
MD;
$parser = new FrontMatterParser();
$document = $parser->parseString($contents);
$this->assertSame([], $document->meta);
$this->assertStringContainsString('# Plain Markdown', $document->body);
}
public function testRoundTripsUnknownMetaKeys(): void {
$document = new FrontMatterDocument(
meta: [
'id' => 'task-456',
'type' => 'task',
'custom_key' => 'custom value',
'nested' => [
'one' => 'two',
],
],
body: "Test body\n\nMore text."
);
$parser = new FrontMatterParser();
$dumped = $parser->dump($document);
$parsed = $parser->parseString($dumped);
$this->assertSame('custom value', $parsed->meta['custom_key']);
$this->assertSame(['one' => 'two'], $parsed->meta['nested']);
$this->assertSame("Test body\n\nMore text.", $parsed->body);
}
}
// phpcs:enable