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