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