xref: /plugin/tagging/_test/search.test.php (revision 853810cfb88ccfa088b7d873a42656f788a2d5dc)
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