selectedServer['DisableIS'] = true; $dummyDbi = $this->createDbiDummy(); // phpcs:disable Generic.Files.LineLength.TooLong $dummyDbi->removeDefaultResults(); $dummyDbi->addSelectDb('test_db'); $dummyDbi->addResult( 'SHOW TRIGGERS FROM `test_db`', [['test_trigger', 'INSERT', 'test_table', 'BEGIN END', 'AFTER', 'definer@localhost']], ['Trigger', 'Event', 'Table', 'Statement', 'Timing', 'Definer'], ); $dummyDbi->addResult('SELECT CURRENT_USER();', [['definer@localhost']], ['CURRENT_USER()']); $dummyDbi->addResult( "SELECT `PRIVILEGE_TYPE` FROM `INFORMATION_SCHEMA`.`USER_PRIVILEGES` WHERE GRANTEE='''definer''@''localhost''' AND PRIVILEGE_TYPE='TRIGGER'", [['TRIGGER']], ['PRIVILEGE_TYPE'], ); // phpcs:enable $dbi = $this->createDatabaseInterface($dummyDbi); DatabaseInterface::$instance = $dbi; $template = new Template(); $response = new ResponseRenderer(); $request = ServerRequestFactory::create()->createServerRequest('GET', 'http://example.com/') ->withQueryParams(['db' => 'test_db']); (new IndexController( $response, $template, $dbi, new Triggers($dbi), new DbTableExists($dbi), ))($request); $actual = $response->getHTMLResult(); // phpcs:disable Generic.Files.LineLength.TooLong $expected = <<<'HTML'

Triggers Triggers Documentation

Name Table Time Event
DROP TRIGGER IF EXISTS `test_trigger` test_trigger test_table AFTER INSERT Edit Edit Export Export Drop Drop
HTML; // phpcs:enable $this->assertSame($expected, $actual); } public function testWithoutTriggers(): void { $GLOBALS['server'] = 2; $GLOBALS['text_dir'] = 'ltr'; $GLOBALS['PMA_PHP_SELF'] = 'index.php'; $GLOBALS['db'] = 'test_db'; Config::getInstance()->selectedServer['DisableIS'] = true; $dummyDbi = $this->createDbiDummy(); // phpcs:disable Generic.Files.LineLength.TooLong $dummyDbi->removeDefaultResults(); $dummyDbi->addSelectDb('test_db'); $dummyDbi->addResult( 'SHOW TRIGGERS FROM `test_db`', [], ['Trigger', 'Event', 'Table', 'Statement', 'Timing', 'Definer'], ); $dummyDbi->addResult('SELECT CURRENT_USER();', [['definer@localhost']], ['CURRENT_USER()']); $dummyDbi->addResult( "SELECT `PRIVILEGE_TYPE` FROM `INFORMATION_SCHEMA`.`USER_PRIVILEGES` WHERE GRANTEE='''definer''@''localhost''' AND PRIVILEGE_TYPE='TRIGGER'", [['TRIGGER']], ['PRIVILEGE_TYPE'], ); // phpcs:enable $dbi = $this->createDatabaseInterface($dummyDbi); DatabaseInterface::$instance = $dbi; $template = new Template(); $response = new ResponseRenderer(); $request = ServerRequestFactory::create()->createServerRequest('GET', 'http://example.com/') ->withQueryParams(['db' => 'test_db']); (new IndexController( $response, $template, $dbi, new Triggers($dbi), new DbTableExists($dbi), ))($request); $actual = $response->getHTMLResult(); // phpcs:disable Generic.Files.LineLength.TooLong $expected = <<<'HTML'

Triggers Triggers Documentation

Create new trigger Create new trigger
Name Table Time Event
HTML; // phpcs:enable $this->assertSame($expected, $actual); } /** * Test for getDataFromRequest * * @param array $in Input * @param array $out Expected output */ #[DataProvider('providerGetDataFromRequest')] public function testGetDataFromRequest(array $in, array $out): void { unset($_POST); foreach ($in as $key => $value) { if ($value === '') { continue; } $_POST[$key] = $value; } $method = (new ReflectionClass(IndexController::class))->getMethod('getDataFromRequest'); $dbi = $this->createStub(DatabaseInterface::class); DatabaseInterface::$instance = $dbi; $template = new Template(); $response = new ResponseRenderer(); $indexController = new IndexController( $response, $template, $dbi, new Triggers($dbi), new DbTableExists($dbi), ); $request = $this->createStub(ServerRequest::class); $request->expects($this->any()) ->method('getParsedBodyParam') ->willReturn('foo'); $output = $method->invoke($indexController, $request); $this->assertEquals($out, $output); } /** * Data provider for testGetDataFromRequest * * @return array, array}> */ public static function providerGetDataFromRequest(): array { return [ [ [ 'item_name' => 'foo', 'item_table' => 'foo', 'item_original_name' => 'foo', 'item_action_timing' => 'foo', 'item_event_manipulation' => 'foo', 'item_definition' => 'foo', 'item_definer' => 'foo', ], [ 'item_name' => 'foo', 'item_table' => 'foo', 'item_original_name' => 'foo', 'item_action_timing' => 'foo', 'item_event_manipulation' => 'foo', 'item_definition' => 'foo', 'item_definer' => 'foo', ], ], ]; } }