xref: /dokuwiki/_test/tests/Feed/FeedPageProcessorTest.php (revision fe9d054b302adfcd4618e9e33079c36cccb90d10)
1<?php
2
3namespace dokuwiki\test\Feed;
4
5use dokuwiki\Feed\FeedPageProcessor;
6use DOMWrap\Document;
7
8class FeedPageProcessorTest extends \DokuWikiTest
9{
10
11    public function provideData()
12    {
13        // an Item returned by FeedCreator::fetchItemsFromRecentChanges()
14        yield ([
15            [
16                'date' => 1705501370,
17                'ip' => '::1',
18                'type' => 'E',
19                'id' => 'wiki:dokuwiki',
20                'user' => 'testuser',
21                'sum' => 'test editing',
22                'extra' => '',
23                'sizechange' => 41,
24                'perms' => 8,
25                'mode' => 'page',
26            ],
27            1705501370, // fixed revision
28            ['testuser@undisclosed.example.com', 'Arthur Dent'], // proper author
29            'test editing', // summary
30        ]);
31
32        // an Item returned by FeedCreator::fetchItemsFromNamespace()
33        clearstatcache();
34        yield ([
35            [
36                'id' => 'wiki:dokuwiki',
37                'ns' => 'wiki',
38                'perm' => 8,
39                'type' => 'f',
40                'level' => 1,
41                'open' => true,
42            ],
43            filemtime(wikiFN('wiki:dokuwiki')), // current revision
44            ['anonymous@undisclosed.example.com', 'Anonymous'], // unknown author
45            '', // no summary
46        ]);
47
48        // an Item returned by FeedCreator::fetchItemsFromSearch()
49        clearstatcache();
50        yield ([
51            [
52                'id' => 'wiki:dokuwiki',
53            ],
54            filemtime(wikiFN('wiki:dokuwiki')), // current revision
55            ['anonymous@undisclosed.example.com', 'Anonymous'], // unknown author
56            '', // no summary
57        ]);
58    }
59
60
61    /**
62     * @dataProvider provideData
63     */
64    public function testProcessing($data, $expectedMtime, $expectedAuthor, $expectedSummary)
65    {
66        global $conf;
67        $conf['useacl'] = 1;
68        $conf['showuseras'] = 'username';
69        $conf['useheading'] = 1;
70
71        $proc = new FeedPageProcessor($data);
72
73        $this->assertEquals('wiki:dokuwiki', $proc->getId());
74        $this->assertEquals('DokuWiki', $proc->getTitle());
75        $this->assertEquals($expectedAuthor, $proc->getAuthor());
76        $this->assertEquals($expectedMtime, $proc->getRev());
77        $this->assertEquals(null, $proc->getPrev());
78        $this->assertTrue($proc->isExisting());
79        $this->assertEquals(['wiki'], $proc->getCategory());
80        $this->assertStringContainsString('standards compliant', $proc->getAbstract());
81        $this->assertEquals($expectedSummary, $proc->getSummary());
82
83        $this->assertEquals(
84            "http://wiki.example.com/doku.php?id=wiki:dokuwiki&rev=$expectedMtime",
85            $proc->getURL('page')
86        );
87        $this->assertEquals(
88            "http://wiki.example.com/doku.php?id=wiki:dokuwiki&rev=$expectedMtime&do=revisions",
89            $proc->getURL('rev')
90        );
91        $this->assertEquals(
92            'http://wiki.example.com/doku.php?id=wiki:dokuwiki',
93            $proc->getURL('current')
94        );
95        $this->assertEquals(
96            "http://wiki.example.com/doku.php?id=wiki:dokuwiki&rev=$expectedMtime&do=diff",
97            $proc->getURL('diff')
98        );
99
100        $diff = explode("\n", $proc->getBody('diff'));
101        $this->assertEquals('<pre>', $diff[0]);
102        $this->assertStringStartsWith('@@', $diff[1]);
103
104        $doc = new Document();
105        $doc->html($proc->getBody('htmldiff'));
106        $th = $doc->find('table th');
107        $this->assertGreaterThanOrEqual(2, $th->count());
108
109        $doc = new Document();
110        $doc->html($proc->getBody('html'));
111        $home = $doc->find('a[href^="https://www.dokuwiki.org/manual"]');
112        $this->assertGreaterThanOrEqual(1, $home->count());
113
114        $this->assertStringContainsString('standards compliant', $proc->getBody('abstract'));
115    }
116
117}
118