1<?php 2 3namespace dokuwiki\test\Search; 4 5use dokuwiki\Search\MetadataSearch; 6 7/** 8 * Tests for MetadataSearch utility methods 9 */ 10class MetadataSearchTest extends \DokuWikiTest 11{ 12 /** 13 * filterPages removes non-existent pages 14 */ 15 public function testFilterPagesRemovesNonExistent() 16 { 17 saveWikiText('wiki:existing', 'content', 'init'); 18 19 $pages = ['wiki:existing' => true, 'wiki:nonexistent' => true]; 20 $result = MetadataSearch::filterPages($pages); 21 22 $this->assertArrayHasKey('wiki:existing', $result); 23 $this->assertArrayNotHasKey('wiki:nonexistent', $result); 24 } 25 26 /** 27 * filterPages respects hidden pages setting 28 */ 29 public function testFilterPagesHidden() 30 { 31 global $conf; 32 $conf['hidepages'] = 'hidden:.*'; 33 34 saveWikiText('hidden:page', 'content', 'init'); 35 saveWikiText('visible:page', 'content', 'init'); 36 37 $pages = ['hidden:page' => true, 'visible:page' => true]; 38 39 // default: hidden pages are filtered 40 $result = MetadataSearch::filterPages($pages); 41 $this->assertArrayNotHasKey('hidden:page', $result); 42 $this->assertArrayHasKey('visible:page', $result); 43 44 // ignorePerms: hidden pages are kept 45 $result = MetadataSearch::filterPages($pages, true); 46 $this->assertArrayHasKey('hidden:page', $result); 47 $this->assertArrayHasKey('visible:page', $result); 48 } 49 50 /** 51 * filterPages respects ACL permissions 52 */ 53 public function testFilterPagesACL() 54 { 55 global $conf; 56 global $AUTH_ACL; 57 $conf['superuser'] = 'admin'; 58 $conf['useacl'] = 1; 59 60 $AUTH_ACL = [ 61 '* @ALL 8', 62 'secret:* @ALL 0', 63 ]; 64 65 $_SERVER['REMOTE_USER'] = 'user'; 66 67 saveWikiText('public:page', 'content', 'init'); 68 saveWikiText('secret:page', 'content', 'init'); 69 70 $pages = ['public:page' => true, 'secret:page' => true]; 71 72 $result = MetadataSearch::filterPages($pages); 73 $this->assertArrayHasKey('public:page', $result); 74 $this->assertArrayNotHasKey('secret:page', $result); 75 76 $result = MetadataSearch::filterPages($pages, true); 77 $this->assertArrayHasKey('public:page', $result); 78 $this->assertArrayHasKey('secret:page', $result); 79 } 80 81 /** 82 * filterPages filters by modification time 83 */ 84 public function testFilterPagesTime() 85 { 86 saveWikiText('wiki:timepage', 'content', 'init'); 87 $mtime = filemtime(wikiFN('wiki:timepage')); 88 89 $pages = ['wiki:timepage' => true]; 90 91 // after: page mtime is before the threshold → filtered 92 $result = MetadataSearch::filterPages($pages, false, $mtime + 100); 93 $this->assertEmpty($result); 94 95 // after: page mtime is after the threshold → kept 96 $result = MetadataSearch::filterPages($pages, false, $mtime - 100); 97 $this->assertArrayHasKey('wiki:timepage', $result); 98 99 // before: page mtime is after the threshold → filtered 100 $result = MetadataSearch::filterPages($pages, false, null, $mtime - 100); 101 $this->assertEmpty($result); 102 103 // before: page mtime is before the threshold → kept 104 $result = MetadataSearch::filterPages($pages, false, null, $mtime + 100); 105 $this->assertArrayHasKey('wiki:timepage', $result); 106 } 107 108 /** 109 * filterPages preserves original array values 110 */ 111 public function testFilterPagesPreservesValues() 112 { 113 saveWikiText('wiki:testpage', 'content', 'init'); 114 115 $pages = ['wiki:testpage' => 'My Title']; 116 $result = MetadataSearch::filterPages($pages); 117 118 $this->assertEquals('My Title', $result['wiki:testpage']); 119 } 120} 121