2 /* vim: set expandtab sw=4 ts=4 sts=4: */
4 * Tests for PhpMyAdmin\Rte\Triggers
6 * @package PhpMyAdmin-test
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
;
18 * This class is for testing PhpMyAdmin\Rte\Triggers methods
20 * @package PhpMyAdmin-test
22 class TriggersTest
extends TestCase
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']);
47 * Test for getDataFromRequest
49 * @param array $in Input
50 * @param array $out Expected output
54 * @dataProvider providerGetDataFromRequestEmpty
56 public function testGetDataFromRequestEmpty($in, $out): void
59 foreach ($in as $key => $value) {
61 $_POST[$key] = $value;
64 $this->assertEquals($out, $this->triggers
->getDataFromRequest());
68 * Data provider for testGetDataFromRequestEmpty
72 public function providerGetDataFromRequestEmpty()
79 'item_original_name' => '',
80 'item_action_timing' => '',
81 'item_event_manipulation' => '',
82 'item_definition' => '',
88 'item_original_name' => '',
89 'item_action_timing' => '',
90 'item_event_manipulation' => '',
91 'item_definition' => '',
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
126 * @dataProvider providerGetEditorFormAdd
129 public function testGetEditorFormAdd($data, $matcher): void
131 $GLOBALS['server'] = 1;
132 $this->triggers
->setGlobals();
133 $this->assertStringContainsString(
135 $this->triggers
->getEditorForm('add', $data)
140 * Provider for testGetEditorFormAdd
144 public function providerGetEditorFormAdd()
148 'item_table' => 'table1',
149 'item_original_name' => '',
150 'item_action_timing' => '',
151 'item_event_manipulation' => '',
152 'item_definition' => '',
153 'item_definer' => '',
171 "name='item_timing'",
179 "name='item_definition'",
183 "name='item_definer'",
187 "name='editor_process_add'",
193 * Test for getEditorForm
195 * @param array $data Data for trigger
196 * @param array $matcher Matcher
200 * @dataProvider providerGetEditorFormEdit
203 public function testGetEditorFormEdit($data, $matcher): void
205 $GLOBALS['server'] = 1;
206 $this->triggers
->setGlobals();
207 $this->assertStringContainsString(
209 $this->triggers
->getEditorForm('edit', $data)
214 * Provider for testGetEditorFormEdit
218 public function providerGetEditorFormEdit()
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' => '',
245 "name='item_timing'",
253 "name='item_definition'",
257 "name='item_definer'",
261 "name='editor_process_edit'",
267 * Test for getEditorForm
269 * @param array $data Data for trigger
270 * @param array $matcher Matcher
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(
283 $this->triggers
->getEditorForm('edit', $data)
285 Response
::getInstance()->setAjax(false);
289 * Provider for testGetEditorFormAjax
293 public function providerGetEditorFormAjax()
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' => '',
308 "name='editor_process_edit'",
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
331 * @dataProvider providerGetQueryFromRequest
333 public function testGetQueryFromRequest(
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
365 public function providerGetQueryFromRequest()
375 'CREATE TRIGGER ON FOR EACH ROW ',
385 'CREATE TRIGGER `trigger` BEFORE INSERT ON FOR EACH ROW SET @A=NULL',
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',
405 'CREATE DEFINER=`root`@`localhost` TRIGGER `trigger` BEFORE INSERT ON `table1` FOR EACH ROW SET @A=NULL',