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