Fix Display\ResultsTest test on Windows
[phpmyadmin.git] / test / classes / Rte / TriggersTest.php
blob04ebdc614b6eba7f39de5b965b4905f9355a3eee
1 <?php
2 /* vim: set expandtab sw=4 ts=4 sts=4: */
3 /**
4 * Tests for PhpMyAdmin\Rte\Triggers
6 * @package PhpMyAdmin-test
7 */
8 declare(strict_types=1);
10 namespace PhpMyAdmin\Tests\Rte;
12 use PhpMyAdmin\Config;
13 use PhpMyAdmin\Response;
14 use PhpMyAdmin\Rte\Triggers;
15 use PHPUnit\Framework\TestCase;
17 /**
18 * This class is for testing PhpMyAdmin\Rte\Triggers methods
20 * @package PhpMyAdmin-test
22 class TriggersTest extends TestCase
24 /**
25 * @var Triggers
27 private $triggers;
29 /**
30 * Set up
32 * @return void
34 protected function setUp(): void
36 $GLOBALS['PMA_Config'] = new Config();
37 $GLOBALS['PMA_Config']->enableBc();
38 $GLOBALS['cfg']['Server']['DisableIS'] = false;
39 $GLOBALS['db'] = 'pma_test';
40 $GLOBALS['table'] = 'table';
41 $GLOBALS['PMA_PHP_SELF'] = 'index.php';
43 $this->triggers = new Triggers($GLOBALS['dbi']);
46 /**
47 * Test for getDataFromRequest
49 * @param array $in Input
50 * @param array $out Expected output
52 * @return void
54 * @dataProvider providerGetDataFromRequestEmpty
56 public function testGetDataFromRequestEmpty($in, $out): void
58 unset($_POST);
59 foreach ($in as $key => $value) {
60 if ($value !== '') {
61 $_POST[$key] = $value;
64 $this->assertEquals($out, $this->triggers->getDataFromRequest());
67 /**
68 * Data provider for testGetDataFromRequestEmpty
70 * @return array
72 public function providerGetDataFromRequestEmpty()
74 return [
77 'item_name' => '',
78 'item_table' => '',
79 'item_original_name' => '',
80 'item_action_timing' => '',
81 'item_event_manipulation' => '',
82 'item_definition' => '',
83 'item_definer' => '',
86 'item_name' => '',
87 'item_table' => '',
88 'item_original_name' => '',
89 'item_action_timing' => '',
90 'item_event_manipulation' => '',
91 'item_definition' => '',
92 'item_definer' => '',
97 'item_name' => 'foo',
98 'item_table' => 'foo',
99 'item_original_name' => 'foo',
100 'item_action_timing' => 'foo',
101 'item_event_manipulation' => 'foo',
102 'item_definition' => 'foo',
103 'item_definer' => 'foo',
106 'item_name' => 'foo',
107 'item_table' => 'foo',
108 'item_original_name' => 'foo',
109 'item_action_timing' => 'foo',
110 'item_event_manipulation' => 'foo',
111 'item_definition' => 'foo',
112 'item_definer' => 'foo',
119 * Test for getEditorForm
121 * @param array $data Data for trigger
122 * @param array $matcher Matcher
124 * @return void
126 * @dataProvider providerGetEditorFormAdd
127 * @group medium
129 public function testGetEditorFormAdd($data, $matcher): void
131 $GLOBALS['server'] = 1;
132 $this->triggers->setGlobals();
133 $this->assertStringContainsString(
134 $matcher,
135 $this->triggers->getEditorForm('add', $data)
140 * Provider for testGetEditorFormAdd
142 * @return array
144 public function providerGetEditorFormAdd()
146 $data = [
147 'item_name' => '',
148 'item_table' => 'table1',
149 'item_original_name' => '',
150 'item_action_timing' => '',
151 'item_event_manipulation' => '',
152 'item_definition' => '',
153 'item_definer' => '',
156 return [
158 $data,
159 "name='add_item'",
162 $data,
163 "name='item_name'",
166 $data,
167 "name='item_table'",
170 $data,
171 "name='item_timing'",
174 $data,
175 "name='item_event'",
178 $data,
179 "name='item_definition'",
182 $data,
183 "name='item_definer'",
186 $data,
187 "name='editor_process_add'",
193 * Test for getEditorForm
195 * @param array $data Data for trigger
196 * @param array $matcher Matcher
198 * @return void
200 * @dataProvider providerGetEditorFormEdit
201 * @group medium
203 public function testGetEditorFormEdit($data, $matcher): void
205 $GLOBALS['server'] = 1;
206 $this->triggers->setGlobals();
207 $this->assertStringContainsString(
208 $matcher,
209 $this->triggers->getEditorForm('edit', $data)
214 * Provider for testGetEditorFormEdit
216 * @return array
218 public function providerGetEditorFormEdit()
220 $data = [
221 'item_name' => 'foo',
222 'item_table' => 'table1',
223 'item_original_name' => 'bar',
224 'item_action_timing' => 'BEFORE',
225 'item_event_manipulation' => 'INSERT',
226 'item_definition' => 'SET @A=1;',
227 'item_definer' => '',
230 return [
232 $data,
233 "name='edit_item'",
236 $data,
237 "name='item_name'",
240 $data,
241 "name='item_table'",
244 $data,
245 "name='item_timing'",
248 $data,
249 "name='item_event'",
252 $data,
253 "name='item_definition'",
256 $data,
257 "name='item_definer'",
260 $data,
261 "name='editor_process_edit'",
267 * Test for getEditorForm
269 * @param array $data Data for trigger
270 * @param array $matcher Matcher
272 * @return void
274 * @dataProvider providerGetEditorFormAjax
276 public function testGetEditorFormAjax($data, $matcher): void
278 $GLOBALS['server'] = 1;
279 Response::getInstance()->setAjax(true);
280 $this->triggers->setGlobals();
281 $this->assertStringContainsString(
282 $matcher,
283 $this->triggers->getEditorForm('edit', $data)
285 Response::getInstance()->setAjax(false);
289 * Provider for testGetEditorFormAjax
291 * @return array
293 public function providerGetEditorFormAjax()
295 $data = [
296 'item_name' => 'foo',
297 'item_table' => 'table1',
298 'item_original_name' => 'bar',
299 'item_action_timing' => 'BEFORE',
300 'item_event_manipulation' => 'INSERT',
301 'item_definition' => 'SET @A=1;',
302 'item_definer' => '',
305 return [
307 $data,
308 "name='editor_process_edit'",
311 $data,
312 "name='ajax_request'",
318 * Test for getQueryFromRequest
320 * @param string $definer Definer
321 * @param string $name Name
322 * @param string $timing Timing
323 * @param string $event Event
324 * @param string $table Table
325 * @param string $definition Definition
326 * @param string $query Query
327 * @param string $num_err Error number
329 * @return void
331 * @dataProvider providerGetQueryFromRequest
333 public function testGetQueryFromRequest(
334 $definer,
335 $name,
336 $timing,
337 $event,
338 $table,
339 $definition,
340 $query,
341 $num_err
343 global $errors;
345 $errors = [];
346 $this->triggers->setGlobals();
348 $_POST['item_definer'] = $definer;
349 $_POST['item_name'] = $name;
350 $_POST['item_timing'] = $timing;
351 $_POST['item_event'] = $event;
352 $_POST['item_table'] = $table;
353 $_POST['item_definition'] = $definition;
354 $GLOBALS['server'] = 1;
356 $this->assertEquals($query, $this->triggers->getQueryFromRequest());
357 $this->assertCount($num_err, $errors);
361 * Data provider for testGetQueryFromRequest
363 * @return array
365 public function providerGetQueryFromRequest()
367 return [
375 'CREATE TRIGGER ON FOR EACH ROW ',
379 'root',
380 'trigger',
381 'BEFORE',
382 'INSERT',
383 'table`2',
384 'SET @A=NULL',
385 'CREATE TRIGGER `trigger` BEFORE INSERT ON FOR EACH ROW SET @A=NULL',
389 'foo`s@host',
390 'trigger`s test',
391 'AFTER',
392 'foo',
393 'table3',
394 'BEGIN SET @A=1; SET @B=2; END',
395 'CREATE DEFINER=`foo``s`@`host` TRIGGER `trigger``s test` AFTER ON FOR EACH ROW BEGIN SET @A=1; SET @B=2; END',
399 'root@localhost',
400 'trigger',
401 'BEFORE',
402 'INSERT',
403 'table1',
404 'SET @A=NULL',
405 'CREATE DEFINER=`root`@`localhost` TRIGGER `trigger` BEFORE INSERT ON `table1` FOR EACH ROW SET @A=NULL',