xref: /plugin/dw2pdf/_test/CollectorFactoryTest.php (revision 4c5691130dbf9035b960f10f5b3cb4b319a026d8)
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