builder = new DocumentBodyBuilder(new HtmlToMarkdownConverter()); } public function testProductSectionsInFixedOrderWithFaqs(): void { $body = $this->builder->build('product', [ 'url' => 'https://www.ep-reisen.de/val-thorens/', 'name' => 'Val Thorens Apartments', 'subline' => 'Apartments', 'headline' => 'Skiurlaub in Val Thorens', 'text' => [ 'skiPassDescription' => '

6 Tage 3 Vallées

', 'teaser' => '

Ski in, ski out

', 'includedServices' => '', 'feature' => null, ], 'faqs' => [ ['question' => 'Ist der Skipass inklusive?', 'answer' => '

Ja.

', 'category' => null], ['question' => 'Ohne Antwort', 'answer' => null], ], ]); self::assertSame( "# Val Thorens Apartments\n\nApartments\n\nSkiurlaub in Val Thorens\n\nSki in, ski out\n\n## Leistungen\n\n- Unterkunft\n\n## Skipass\n\n6 Tage 3 Vallées\n\n## Häufige Fragen\n\n### Ist der Skipass inklusive?\n\nJa.", $body, ); } public function testHotelFactsAreSearchableText(): void { $body = $this->builder->build('hotel', [ 'name' => 'Chalets de Rosael', 'facts' => ['bedsCount' => 120, 'altitude' => null, 'sauna' => true, 'wifi' => false], 'text' => ['description' => '

Ruhige Lage

'], ]); self::assertSame("# Chalets de Rosael\n\n## Beschreibung\n\nRuhige Lage\n\n## Fakten\n\n- Betten: 120\n- Sauna: ja\n- WLAN: nein", $body); } public function testNewsUsesTitleDateBodyAndTags(): void { $record = [ 'title' => 'Packlisten', 'teaser' => 'Was muss mit?', 'bodytext' => '

Helm & Brille

', 'datetime' => '2026-07-23T14:00:00+02:00', 'tags' => ['Urlaubsvorbereitung', ['title' => 'Anfänger:in']], ]; self::assertSame('Packlisten', $this->builder->title('news', $record)); self::assertSame("# Packlisten\n\nVeröffentlicht am 23.07.2026\n\nWas muss mit?\n\nHelm & Brille\n\nThemen: Urlaubsvorbereitung, Anfänger:in", $this->builder->build('news', $record)); } public function testRecordWithoutTextIsJustItsTitle(): void { self::assertSame('# Frankreich', $this->builder->build('country', ['name' => 'Frankreich', 'text' => []])); } }