1<?php 2 3namespace dokuwiki\plugin\dw2pdf\test; 4 5use dokuwiki\plugin\dw2pdf\src\Config; 6use dokuwiki\plugin\dw2pdf\src\ExportException; 7use dokuwiki\plugin\dw2pdf\src\NamespaceCollector; 8use DokuWikiTest; 9 10/** 11 * @group plugin_dw2pdf 12 * @group plugins 13 */ 14class NamespaceCollectorCollectTest extends DokuWikiTest 15{ 16 public function setUp(): void 17 { 18 parent::setUp(); 19 $_REQUEST = []; 20 } 21 22 /** 23 * Namespace collector should remove individually excluded pages and sub-namespaces. 24 */ 25 public function testCollectHonorsExcludes(): void 26 { 27 global $INPUT; 28 $ns = 'playground:dw2pdfns'; 29 30 $this->createPage("$ns:start", 'start page'); 31 $this->createPage("$ns:keep", 'keep me'); 32 $this->createPage("$ns:skip", 'skip me'); 33 $this->createPage("$ns:child:page", 'child namespace'); 34 35 $INPUT->set('book_ns', $ns); 36 $INPUT->set('book_order', 'pagename'); 37 $INPUT->set('excludes', ["$ns:skip"]); 38 $INPUT->set('excludesns', ["$ns:child"]); 39 40 $collector = new NamespaceCollector(new Config()); 41 $this->assertSame( 42 ["$ns:start", "$ns:keep"], 43 $collector->getPages() 44 ); 45 } 46 47 /** 48 * A missing namespace must be reported to the user. 49 */ 50 public function testThrowsForMissingNamespace(): void 51 { 52 global $INPUT; 53 $INPUT->set('book_ns', 'missing:dw2pdfns'); 54 55 $this->expectException(ExportException::class); 56 $this->expectExceptionMessage('needns'); 57 new NamespaceCollector(new Config()); 58 } 59 60 private function createPage(string $id, string $content): void 61 { 62 saveWikiText($id, $content, 'dw2pdf namespace test'); 63 } 64} 65