1<?php 2 3use dokuwiki\Extension\Event; 4 5/** 6 * @group plugin_tagfilter 7 * @group plugins 8 */ 9class plugin_tagfilter_ajax_test extends DokuWikiTest 10{ 11 12 protected $pluginsEnabled = [ 13 'tag', 'tagfilter', 'pagelist' 14 ]; 15 16 public function setup(): void 17 { 18 parent::setup(); 19 $this->_createPages(); 20 } 21 22 23 public function test_ajax_request_notags() 24 { 25 global $INPUT; 26 global $lang; 27 28 $INPUT->set('id', 0); 29 $INPUT->set('form', json_encode(array())); 30 $INPUT->set('ns', json_encode('test:plugin_tagfilter:tags')); 31 $INPUT->set('flags', json_encode(array())); 32 $INPUT->set('pagesearch', json_encode(array())); 33 34 $er = error_reporting(); 35 error_reporting($er ^ E_STRICT); 36 ob_start(); 37 $data = 'plugin_tagfilter'; 38 Event::createAndTrigger('AJAX_CALL_UNKNOWN', $data); 39 $response = ob_get_contents(); 40 ob_end_clean(); 41 error_reporting($er); 42 43 if (isset($lang['nothingfound'])) { 44 $this->assertEquals('{"id":0,"text":"<i>Nothing was found.<\/i>"}', $response); 45 } else { 46 $this->assertEquals('{"id":0,"text":"<i><\/i>"}', $response); 47 } 48 } 49 50 public function test_ajax_request_alltags() 51 { 52 global $INPUT; 53 54 $INPUT->set('id', 0); 55 $INPUT->set('form', '[["cat1:blorg","cat2:a","cat3:1","cat2:b","cat3:2"]]'); 56 $INPUT->set('ns', json_encode('test:plugin_tagfilter:tags')); 57 $INPUT->set('flags', json_encode(array())); 58 $INPUT->set('pagesearch', json_encode(array())); 59 60 $er = error_reporting(); 61 error_reporting($er ^ E_STRICT); 62 ob_start(); 63 $data = 'plugin_tagfilter'; 64 Event::createAndTrigger('AJAX_CALL_UNKNOWN', $data); 65 66 $response1 = ob_get_contents(); 67 $response2 = json_decode($response1); 68 $response = (array)$response2; 69 ob_end_clean(); 70 error_reporting($er); 71 if (!isset($response['text'])) { 72 var_dump(array($response1, $response2, $response)); 73 } else { 74 75 $this->assertStringContainsString('id=test:plugin_tagfilter:tags:tagpage1', $response['text']); 76 $this->assertStringContainsString('id=test:plugin_tagfilter:tags:tagpage2', $response['text']); 77 } 78 } 79 80 public function test_ajax_request_onepage() 81 { 82 global $INPUT; 83 84 $INPUT->set('id', 0); 85 $INPUT->set('form', '[["cat1:blorg"],["cat3:2"]]'); 86 $INPUT->set('ns', json_encode('test:plugin_tagfilter:tags')); 87 $INPUT->set('flags', json_encode(array())); 88 $INPUT->set('pagesearch', json_encode(array())); 89 90 $er = error_reporting(); 91 error_reporting($er ^ E_STRICT); 92 ob_start(); 93 $data = 'plugin_tagfilter'; 94 Event::createAndTrigger('AJAX_CALL_UNKNOWN', $data); 95 $response = (array)json_decode(ob_get_contents()); 96 ob_end_clean(); 97 error_reporting($er); 98 $this->assertFalse(strpos($response['text'], 'id=test:plugin_tagfilter:tags:tagpage1') !== false); 99 $this->assertStringContainsString('id=test:plugin_tagfilter:tags:tagpage2', $response['text']); 100 101 } 102 103 public function test_ajax_request_pagesearch() 104 { 105 global $INPUT; 106 107 $INPUT->set('id', 0); 108 $INPUT->set('form', '[["cat1:blorg"]]'); 109 $INPUT->set('ns', json_encode('test:plugin_tagfilter:tags')); 110 $INPUT->set('flags', json_encode(array())); 111 $INPUT->set('pagesearch', json_encode(array('test:plugin_tagfilter:tags:tagpage2'))); 112 113 $er = error_reporting(); 114 error_reporting($er ^ E_STRICT); 115 ob_start(); 116 $data = 'plugin_tagfilter'; 117 Event::createAndTrigger('AJAX_CALL_UNKNOWN', $data); 118 $response = (array)json_decode(ob_get_contents()); 119 ob_end_clean(); 120 error_reporting($er); 121 $this->assertFalse(strpos($response['text'], 'id=test:plugin_tagfilter:tags:tagpage1') !== false); 122 $this->assertStringContainsString('id=test:plugin_tagfilter:tags:tagpage2', $response['text']); 123 124 } 125 126 protected function _createPages() 127 { 128 saveWikiText('test:plugin_tagfilter:tags:tagpage1', '==== Tagpage1 ====' . DOKU_LF . '{{tag>cat1:blorg cat2:a cat3:1}}', 'test'); 129 saveWikiText('test:plugin_tagfilter:tags:tagpage2', '==== Tagpage2 ====' . DOKU_LF . '{{tag>cat1:blorg cat2:b cat3:2}}', 'test'); 130 saveWikiText('test:plugin_tagfilter:start', '{{tagfilter>test:plugin_tagfilter:tags?T1=cat1:.*|T2=cat2:.*|T3=cat3:.*}}', 'test'); 131 saveWikiText('test:plugin_tagfilter:start2', '{{tagfilter>test:plugin_tagfilter:tags?T1=cat1:.*|T2=cat2:.*|T3=cat3:.*&pagesearch}}', 'test'); 132 saveWikiText('test:plugin_tagfilter:start3', '{{tagfilter>test:plugin_tagfilter:tags?T1=cat1:.*|T2=cat2:.*|T3=cat3:.*&multi}}', 'test'); 133 134 idx_addPage('test:plugin_tagfilter:tags:tagpage1', false); 135 idx_addPage('test:plugin_tagfilter:tags:tagpage2', false); 136 } 137 138 139} 140