1<?php 2 3namespace dokuwiki\plugin\dw2pdf\test; 4 5use dokuwiki\plugin\dw2pdf\src\BookCreatorLiveSelectionCollector; 6use dokuwiki\plugin\dw2pdf\src\BookCreatorSavedSelectionCollector; 7use dokuwiki\plugin\dw2pdf\src\CollectorFactory; 8use dokuwiki\plugin\dw2pdf\src\Config; 9use dokuwiki\plugin\dw2pdf\src\ExportException; 10use dokuwiki\plugin\dw2pdf\src\NamespaceCollector; 11use dokuwiki\plugin\dw2pdf\src\PageCollector; 12use DokuWikiTest; 13 14/** 15 * @group plugin_dw2pdf 16 * @group plugins 17 */ 18class CollectorFactoryTest extends DokuWikiTest 19{ 20 public function setUp(): void 21 { 22 parent::setUp(); 23 $_REQUEST = []; 24 } 25 26 /** 27 * Factory should return the single-page collector for simple exports. 28 */ 29 public function testCreatesPageCollector(): void 30 { 31 global $ID, $INPUT; 32 $ID = 'playground:dw2pdffactory'; 33 $INPUT->set('id', $ID); 34 saveWikiText($ID, 'factory test content', 'create test page'); 35 36 $config = new Config(); 37 $collector = CollectorFactory::create('export_pdf', $config, null, null); 38 $this->assertInstanceOf(PageCollector::class, $collector); 39 } 40 41 /** 42 * Factory should switch to namespace collector when export_pdfns is requested. 43 */ 44 public function testCreatesNamespaceCollector(): void 45 { 46 global $INPUT; 47 $INPUT->set('book_ns', 'wiki'); 48 $config = new Config(); 49 $collector = CollectorFactory::create('export_pdfns', $config, null, null); 50 $this->assertInstanceOf(NamespaceCollector::class, $collector); 51 } 52 53 /** 54 * When a live selection payload is present, the live collector is used. 55 */ 56 public function testCreatesLiveSelectionCollector(): void 57 { 58 global $INPUT; 59 $INPUT->set('selection', '["wiki:start"]'); 60 $config = new Config(); 61 $collector = CollectorFactory::create('export_pdfbook', $config, null, null); 62 $this->assertInstanceOf(BookCreatorLiveSelectionCollector::class, $collector); 63 } 64 65 /** 66 * When only a saved selection identifier is present, use the saved collector. 67 */ 68 public function testCreatesSavedSelectionCollector(): void 69 { 70 global $INPUT; 71 $INPUT->set('savedselection', 'my-saved-selection'); 72 $config = new Config(); 73 $collector = CollectorFactory::create('export_pdfbook', $config, null, null); 74 $this->assertInstanceOf(BookCreatorSavedSelectionCollector::class, $collector); 75 } 76 77 /** 78 * A pdfbook export without any selection should be rejected. 79 */ 80 public function testBadSelectionCollector(): void 81 { 82 $this->expectException(ExportException::class); 83 $this->expectExceptionMessage('empty'); 84 $config = new Config(); 85 CollectorFactory::create('export_pdfbook', $config, null, null); 86 } 87 88 /** 89 * Unknown export actions should be rejected early. 90 */ 91 public function testRejectsUnknownEvent(): void 92 { 93 $this->expectException(\InvalidArgumentException::class); 94 $config = new Config(); 95 CollectorFactory::create('random', $config, null, null); 96 } 97} 98