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