1<?php 2 3/** 4 * Helper tests for the tagging plugin 5 * 6 * @group plugin_tagging 7 * @group plugins 8 */ 9class helper_plugin_tagging_test extends DokuWikiTest 10{ 11 protected $pluginsEnabled = ['tagging', 'sqlite']; 12 13 /** 14 * Provide the test data 15 * 16 * @return array 17 */ 18 public function dataTags() 19 { 20 return [ 21 [ 22 ['ortag' => 'image'], 23 'SELECT pid AS item, COUNT(*) AS cnt 24 FROM taggings 25 WHERE 1=1 26 AND CLEANTAG(tag) IN ( CLEANTAG(?) ) 27 AND GETACCESSLEVEL(pid) >= '. AUTH_READ .' 28 GROUP BY pid 29 ORDER BY cnt DESC, pid' 30 ], 31 [ 32 ['ortag' => 'acks, image'], 33 'SELECT pid AS item, COUNT(*) AS cnt 34 FROM taggings 35 WHERE 1=1 36 AND CLEANTAG(tag) IN ( CLEANTAG(?), CLEANTAG(?) ) 37 AND GETACCESSLEVEL(pid) >= '. AUTH_READ .' 38 GROUP BY pid 39 ORDER BY cnt DESC, pid' 40 ], 41 [ 42 ['andtag' => 'acks, image'], 43 'SELECT pid AS item, COUNT(*) AS cnt 44 FROM taggings 45 WHERE 1=1 46 AND CLEANTAG(tag) IN ( CLEANTAG(?), CLEANTAG(?) ) 47 AND GETACCESSLEVEL(pid) >= '. AUTH_READ .' 48 GROUP BY pid 49 HAVING cnt = 2 50 ORDER BY cnt DESC, pid' 51 ], 52 [ 53 [ 54 'ortag' => 'image', 55 'pid' => 'wiki:*' 56 ], 57 'SELECT pid AS item, COUNT(*) AS cnt 58 FROM taggings 59 WHERE 1=1 60 AND CLEANTAG(tag) IN ( CLEANTAG(?) ) 61 AND pid GLOB ? 62 AND GETACCESSLEVEL(pid) >= '. AUTH_READ .' 63 GROUP BY pid 64 ORDER BY cnt DESC, pid' 65 ], 66 [ 67 [ 68 'ortag' => 'image', 69 'notpid0' => 'wiki:*' 70 ], 71 'SELECT pid AS item, COUNT(*) AS cnt 72 FROM taggings 73 WHERE 1=1 74 AND CLEANTAG(tag) IN ( CLEANTAG(?) ) 75 AND pid NOT GLOB ? 76 AND GETACCESSLEVEL(pid) >= '. AUTH_READ .' 77 GROUP BY pid 78 ORDER BY cnt DESC, pid' 79 80 ], 81 [ 82 [ 83 'ortag' => 'image', 84 'notpid0' => 'wiki:*', 85 'notpid1' => 'awiki:*' 86 ], 87 'SELECT pid AS item, COUNT(*) AS cnt 88 FROM taggings 89 WHERE 1=1 90 AND CLEANTAG(tag) IN ( CLEANTAG(?) ) 91 AND pid NOT GLOB ? AND pid NOT GLOB ? 92 AND GETACCESSLEVEL(pid) >= '. AUTH_READ .' 93 GROUP BY pid 94 ORDER BY cnt DESC, pid' 95 ], 96 ]; 97 } 98 99 /** 100 * Search results 101 * 102 * @dataProvider dataTags 103 * @param array $filter 104 * @param string $expected 105 */ 106 public function testSearchSql($filter, $expected) 107 { 108 /** @var helper_plugin_tagging $helper */ 109 $helper = plugin_load('helper', 'tagging'); 110 $actual = $helper->getWikiSearchSql($filter, 'pid', 0); 111 $this->assertEquals($this->toSingleLine($expected), $this->toSingleLine($actual)); 112 } 113 114 /** 115 * @param string $string 116 * @return string 117 */ 118 protected function toSingleLine($string) 119 { 120 $string = str_replace(["\r","\n"], '', $string); 121 $string = preg_replace('/ +/', ' ', $string); 122 return trim($string); 123 } 124} 125