1<?php
2
3namespace dokuwiki\plugin\struct\test\types;
4
5use dokuwiki\plugin\struct\test\mock\QueryBuilder;
6use dokuwiki\plugin\struct\test\StructTest;
7use dokuwiki\plugin\struct\types\Text;
8
9/**
10 * Testing the Text Type
11 *
12 * @group plugin_struct
13 * @group plugins
14 */
15class TextTest extends StructTest
16{
17
18    public function data()
19    {
20        return [
21            // simple
22            [
23                '', // prefix
24                '', // postfix
25                '=', // comp
26                'val', // value
27                '(T.col = ?)', // expect sql
28                ['val'], // expect opts
29            ],
30            [
31                'before', // prefix
32                '', // postfix
33                '=', // comp
34                'val', // value
35                '(? || T.col = ?)', // expect sql
36                ['before', 'val'], // expect opts
37            ],
38            [
39                '', // prefix
40                'after', // postfix
41                '=', // comp
42                'val', // value
43                '(T.col || ? = ?)', // expect sql
44                ['after', 'val'], // expect opts
45            ],
46            [
47                'before', // prefix
48                'after', // postfix
49                '=', // comp
50                'val', // value
51                '(? || T.col || ? = ?)', // expect sql
52                ['before', 'after', 'val'], // expect opts
53            ],
54            // LIKE
55            [
56                '', // prefix
57                '', // postfix
58                'LIKE', // comp
59                '%val%', // value
60                '(T.col LIKE ?)', // expect sql
61                ['%val%'], // expect opts
62            ],
63            [
64                'before', // prefix
65                '', // postfix
66                'LIKE', // comp
67                '%val%', // value
68                '(? || T.col LIKE ?)', // expect sql
69                ['before', '%val%'], // expect opts
70            ],
71            [
72                '', // prefix
73                'after', // postfix
74                'LIKE', // comp
75                '%val%', // value
76                '(T.col || ? LIKE ?)', // expect sql
77                ['after', '%val%'], // expect opts
78            ],
79            [
80                'before', // prefix
81                'after', // postfix
82                'LIKE', // comp
83                '%val%', // value
84                '(? || T.col || ? LIKE ?)', // expect sql
85                ['before', 'after', '%val%'], // expect opts
86            ],
87            // NOT LIKE
88            [
89                '', // prefix
90                '', // postfix
91                'NOT LIKE', // comp
92                '%val%', // value
93                '(T.col NOT LIKE ?)', // expect sql
94                ['%val%'], // expect opts
95            ],
96            [
97                'before', // prefix
98                '', // postfix
99                'NOT LIKE', // comp
100                '%val%', // value
101                '(? || T.col NOT LIKE ?)', // expect sql
102                ['before', '%val%'], // expect opts
103            ],
104            [
105                '', // prefix
106                'after', // postfix
107                'NOT LIKE', // comp
108                '%val%', // value
109                '(T.col || ? NOT LIKE ?)', // expect sql
110                ['after', '%val%'], // expect opts
111            ],
112            [
113                'before', // prefix
114                'after', // postfix
115                'NOT LIKE', // comp
116                '%val%', // value
117                '(? || T.col || ? NOT LIKE ?)', // expect sql
118                ['before', 'after', '%val%'], // expect opts
119            ],
120
121            // complex multi-value
122            [
123                'before', // prefix
124                'after', // postfix
125                'NOT LIKE', // comp
126                ['%val1%', '%val2%'], // multiple values
127                '((? || T.col || ? NOT LIKE ? OR ? || T.col || ? NOT LIKE ?))', // expect sql
128                ['before', 'after', '%val1%', 'before', 'after', '%val2%',], // expect opts
129            ],
130        ];
131
132    }
133
134    /**
135     * @dataProvider data
136     */
137    public function test_filter($prefix, $postfix, $comp, $val, $e_sql, $e_opt)
138    {
139        $QB = new QueryBuilder();
140
141        $text = new Text(['prefix' => $prefix, 'postfix' => $postfix]);
142        $text->filter($QB->filters(), 'T', 'col', $comp, $val, 'AND');
143
144        list($sql, $opt) = $QB->getWhereSQL();
145        $this->assertEquals($this->cleanWS($e_sql), $this->cleanWS($sql));
146        $this->assertEquals($e_opt, $opt);
147    }
148}
149