createDbiDummy(); $dbiDummy->removeDefaultResults(); $dbiDummy->addSelectDb('test_db'); $dbiDummy->addResult('SHOW CREATE EVENT `test_db`.`test_event`', [[$createEventStatement]], ['Create Event']); $dbiDummy->addResult( "SHOW GLOBAL VARIABLES LIKE 'event_scheduler'", [['event_scheduler', 'ON']], ['Variable_name', 'Value'], ); $dbi = $this->createDatabaseInterface($dbiDummy); $responseRenderer = new ResponseRenderer(); $events = new Events($dbi, new Config()); $request = ServerRequestFactory::create()->createServerRequest('GET', 'http://example.com/') ->withQueryParams(['db' => 'test_db', 'item_name' => 'test_event']); $response = (new ExportController($responseRenderer, $events, new DbTableExists($dbi)))($request); $dbiDummy->assertAllSelectsConsumed(); $dbiDummy->assertAllQueriesConsumed(); self::assertSame(StatusCodeInterface::STATUS_OK, $response->getStatusCode()); // phpcs:ignore Generic.Files.LineLength.TooLong $expected = '

Export of event `test_event`

'; self::assertSame($expected, (string) $response->getBody()); } public function testExportEventAjax(): void { // phpcs:disable Generic.Files.LineLength.TooLong $createEventStatement = <<<'SQL' CREATE DEFINER=`test_user`@`localhost` EVENT `test_event` ON SCHEDULE AT '2026-10-11 17:56:42' ON COMPLETION NOT PRESERVE ENABLE DO BEGIN END SQL; // phpcs:enable $dbiDummy = $this->createDbiDummy(); $dbiDummy->removeDefaultResults(); $dbiDummy->addSelectDb('test_db'); $dbiDummy->addResult('SHOW CREATE EVENT `test_db`.`test_event`', [[$createEventStatement]], ['Create Event']); $dbiDummy->addResult( "SHOW GLOBAL VARIABLES LIKE 'event_scheduler'", [['event_scheduler', 'ON']], ['Variable_name', 'Value'], ); $dbi = $this->createDatabaseInterface($dbiDummy); $responseRenderer = new ResponseRenderer(); $events = new Events($dbi, new Config()); $request = ServerRequestFactory::create()->createServerRequest('GET', 'http://example.com/') ->withHeader('X-Requested-With', 'XMLHttpRequest') ->withQueryParams(['db' => 'test_db', 'item_name' => 'test_event']); $response = (new ExportController($responseRenderer, $events, new DbTableExists($dbi)))($request); $dbiDummy->assertAllSelectsConsumed(); $dbiDummy->assertAllQueriesConsumed(); self::assertSame(StatusCodeInterface::STATUS_OK, $response->getStatusCode()); self::assertSame('', (string) $response->getBody()); self::assertSame( ['message' => $createEventStatement, 'title' => 'Export of event `test_event`'], $responseRenderer->getJSONResult(), ); } public function testExportEventWithoutEvent(): void { $dbiDummy = $this->createDbiDummy(); $dbiDummy->removeDefaultResults(); $dbiDummy->addSelectDb('test_db'); $dbiDummy->addResult('SHOW CREATE EVENT `test_db`.`test_event`', [], ['Create Event']); $dbiDummy->addResult( "SHOW GLOBAL VARIABLES LIKE 'event_scheduler'", [['event_scheduler', 'ON']], ['Variable_name', 'Value'], ); $dbi = $this->createDatabaseInterface($dbiDummy); $responseRenderer = new ResponseRenderer(); $events = new Events($dbi, new Config()); $request = ServerRequestFactory::create()->createServerRequest('GET', 'http://example.com/') ->withQueryParams(['db' => 'test_db', 'item_name' => 'test_event']); $response = (new ExportController($responseRenderer, $events, new DbTableExists($dbi)))($request); $dbiDummy->assertAllSelectsConsumed(); $dbiDummy->assertAllQueriesConsumed(); // phpcs:disable Generic.Files.LineLength.TooLong $expected = <<<'HTML' HTML; // phpcs:enable self::assertSame(StatusCodeInterface::STATUS_OK, $response->getStatusCode()); self::assertSame($expected, (string) $response->getBody()); } public function testExportEventWithoutEventAjax(): void { $dbiDummy = $this->createDbiDummy(); $dbiDummy->removeDefaultResults(); $dbiDummy->addSelectDb('test_db'); $dbiDummy->addResult('SHOW CREATE EVENT `test_db`.`test_event`', [], ['Create Event']); $dbiDummy->addResult( "SHOW GLOBAL VARIABLES LIKE 'event_scheduler'", [['event_scheduler', 'ON']], ['Variable_name', 'Value'], ); $dbi = $this->createDatabaseInterface($dbiDummy); $responseRenderer = new ResponseRenderer(); $events = new Events($dbi, new Config()); $request = ServerRequestFactory::create()->createServerRequest('GET', 'http://example.com/') ->withHeader('X-Requested-With', 'XMLHttpRequest') ->withQueryParams(['db' => 'test_db', 'item_name' => 'test_event']); $response = (new ExportController($responseRenderer, $events, new DbTableExists($dbi)))($request); $dbiDummy->assertAllSelectsConsumed(); $dbiDummy->assertAllQueriesConsumed(); // phpcs:disable Generic.Files.LineLength.TooLong $expected = <<<'HTML' HTML; // phpcs:enable self::assertSame(StatusCodeInterface::STATUS_OK, $response->getStatusCode()); self::assertSame('', (string) $response->getBody()); self::assertSame(['message' => $expected], $responseRenderer->getJSONResult()); } public function testErrorWithoutDbParam(): void { $config = new Config(); $config->set('PmaAbsoluteUri', 'https://example.com/'); Config::$instance = $config; $dbi = $this->createDatabaseInterface(config: $config); $events = new Events($dbi, $config); $responseRenderer = new ResponseRenderer($config); $request = ServerRequestFactory::create()->createServerRequest('GET', 'https://example.com/'); $response = (new ExportController($responseRenderer, $events, new DbTableExists($dbi)))($request); self::assertSame(StatusCodeInterface::STATUS_FOUND, $response->getStatusCode()); self::assertSame( '/index.php?route=/&reload=1&message=No+database+selected.&lang=en', $response->getHeaderLine('Location'), ); self::assertSame('', (string) $response->getBody()); } public function testErrorWithoutDbParamAjax(): void { $config = new Config(); $dbi = $this->createDatabaseInterface(config: $config); $events = new Events($dbi, $config); $responseRenderer = new ResponseRenderer(); $responseRenderer->setAjax(true); $request = ServerRequestFactory::create()->createServerRequest('GET', 'https://example.com/') ->withHeader('X-Requested-With', 'XMLHttpRequest'); $response = (new ExportController($responseRenderer, $events, new DbTableExists($dbi)))($request); self::assertSame(StatusCodeInterface::STATUS_OK, $response->getStatusCode()); self::assertSame( '{"success":false,"error":"
\n' . ' \"\" No database selected.\n' . '<\/div>\n"}', (string) $response->getBody(), ); self::assertFalse($responseRenderer->hasSuccessState()); } }