Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/phpmyadmin/phpmyadmin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorMaurício Meneghini Fauth <mauricio@fauth.dev>2021-09-08 03:19:43 +0300
committerMaurício Meneghini Fauth <mauricio@fauth.dev>2021-09-08 03:19:43 +0300
commite3554879ef7a4879446db25669563df004f832a2 (patch)
tree6a5788e42622d01918d81971e93b178dd09a6831 /test
parenta73e26c81f0ed01fe717e476ab3c7937efa702e4 (diff)
Extract actions from controllers to new controllers
Signed-off-by: Maurício Meneghini Fauth <mauricio@fauth.dev>
Diffstat (limited to 'test')
-rw-r--r--test/classes/Controllers/Database/Structure/FavoriteTableControllerTest.php63
-rw-r--r--test/classes/Controllers/Database/Structure/RealRowCountControllerTest.php50
-rw-r--r--test/classes/Controllers/Database/StructureControllerTest.php111
-rw-r--r--test/classes/Controllers/Server/Databases/CreateControllerTest.php61
-rw-r--r--test/classes/Controllers/Server/Databases/DestroyControllerTest.php58
-rw-r--r--test/classes/Controllers/Server/DatabasesControllerTest.php86
-rw-r--r--test/classes/Stubs/DbiDummy.php113
7 files changed, 347 insertions, 195 deletions
diff --git a/test/classes/Controllers/Database/Structure/FavoriteTableControllerTest.php b/test/classes/Controllers/Database/Structure/FavoriteTableControllerTest.php
new file mode 100644
index 0000000000..31eb2229f4
--- /dev/null
+++ b/test/classes/Controllers/Database/Structure/FavoriteTableControllerTest.php
@@ -0,0 +1,63 @@
+<?php
+
+declare(strict_types=1);
+
+namespace PhpMyAdmin\Tests\Controllers\Database\Structure;
+
+use PhpMyAdmin\Controllers\Database\Structure\FavoriteTableController;
+use PhpMyAdmin\RecentFavoriteTable;
+use PhpMyAdmin\Relation;
+use PhpMyAdmin\Template;
+use PhpMyAdmin\Tests\AbstractTestCase;
+use PhpMyAdmin\Tests\Stubs\ResponseRenderer as ResponseStub;
+use ReflectionClass;
+
+use function json_encode;
+
+/**
+ * @covers \PhpMyAdmin\Controllers\Database\Structure\FavoriteTableController
+ */
+class FavoriteTableControllerTest extends AbstractTestCase
+{
+ public function testSynchronizeFavoriteTables(): void
+ {
+ $GLOBALS['server'] = 1;
+ $GLOBALS['text_dir'] = 'ltr';
+ $GLOBALS['PMA_PHP_SELF'] = 'index.php';
+
+ $favoriteInstance = $this->getMockBuilder(RecentFavoriteTable::class)
+ ->disableOriginalConstructor()
+ ->getMock();
+ $favoriteInstance->expects($this->exactly(2))
+ ->method('getTables')
+ ->will($this->onConsecutiveCalls([[]], [['db' => 'db', 'table' => 'table']]));
+
+ $class = new ReflectionClass(FavoriteTableController::class);
+ $method = $class->getMethod('synchronizeFavoriteTables');
+ $method->setAccessible(true);
+ $template = new Template();
+
+ $controller = new FavoriteTableController(
+ new ResponseStub(),
+ $template,
+ 'db',
+ new Relation($this->dbi, $template)
+ );
+
+ // The user hash for test
+ $user = 'abcdefg';
+ $favoriteTable = [
+ $user => [
+ [
+ 'db' => 'db',
+ 'table' => 'table',
+ ],
+ ],
+ ];
+
+ $json = $method->invokeArgs($controller, [$favoriteInstance, $user, $favoriteTable]);
+
+ $this->assertEquals(json_encode($favoriteTable), $json['favoriteTables'] ?? '');
+ $this->assertArrayHasKey('list', $json);
+ }
+}
diff --git a/test/classes/Controllers/Database/Structure/RealRowCountControllerTest.php b/test/classes/Controllers/Database/Structure/RealRowCountControllerTest.php
new file mode 100644
index 0000000000..07ddd9ad8d
--- /dev/null
+++ b/test/classes/Controllers/Database/Structure/RealRowCountControllerTest.php
@@ -0,0 +1,50 @@
+<?php
+
+declare(strict_types=1);
+
+namespace PhpMyAdmin\Tests\Controllers\Database\Structure;
+
+use PhpMyAdmin\Controllers\Database\Structure\RealRowCountController;
+use PhpMyAdmin\Template;
+use PhpMyAdmin\Tests\AbstractTestCase;
+use PhpMyAdmin\Tests\Stubs\ResponseRenderer as ResponseStub;
+
+use function json_encode;
+
+/**
+ * @covers \PhpMyAdmin\Controllers\Database\Structure\RealRowCountController
+ */
+class RealRowCountControllerTest extends AbstractTestCase
+{
+ public function testRealRowCount(): void
+ {
+ $GLOBALS['server'] = 1;
+ $GLOBALS['text_dir'] = 'ltr';
+ $GLOBALS['PMA_PHP_SELF'] = 'index.php';
+ $GLOBALS['cfg']['Server']['DisableIS'] = true;
+ $GLOBALS['is_db'] = true;
+ $GLOBALS['db'] = 'world';
+
+ $response = new ResponseStub();
+ $response->setAjax(true);
+
+ $_REQUEST['table'] = 'City';
+
+ (new RealRowCountController($response, new Template(), 'world', $this->dbi))();
+
+ $json = $response->getJSONResult();
+ $this->assertEquals('4,079', $json['real_row_count']);
+
+ $_REQUEST['real_row_count_all'] = 'on';
+
+ (new RealRowCountController($response, new Template(), 'world', $this->dbi))();
+
+ $json = $response->getJSONResult();
+ $expected = [
+ ['table' => 'City', 'row_count' => 4079],
+ ['table' => 'Country', 'row_count' => 239],
+ ['table' => 'CountryLanguage', 'row_count' => 984],
+ ];
+ $this->assertEquals(json_encode($expected), $json['real_row_count_all']);
+ }
+}
diff --git a/test/classes/Controllers/Database/StructureControllerTest.php b/test/classes/Controllers/Database/StructureControllerTest.php
index 576a1e7804..5aa1a450a5 100644
--- a/test/classes/Controllers/Database/StructureControllerTest.php
+++ b/test/classes/Controllers/Database/StructureControllerTest.php
@@ -8,7 +8,6 @@ use PhpMyAdmin\Controllers\Database\StructureController;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\FlashMessages;
use PhpMyAdmin\Operations;
-use PhpMyAdmin\RecentFavoriteTable;
use PhpMyAdmin\Relation;
use PhpMyAdmin\RelationCleanup;
use PhpMyAdmin\Replication;
@@ -16,12 +15,9 @@ use PhpMyAdmin\Table;
use PhpMyAdmin\Template;
use PhpMyAdmin\Tests\AbstractTestCase;
use PhpMyAdmin\Tests\Stubs\ResponseRenderer as ResponseStub;
-use PHPUnit\Framework\MockObject\MockObject;
use ReflectionClass;
use ReflectionException;
-use function json_encode;
-
/**
* @covers \PhpMyAdmin\Controllers\Database\StructureController
*/
@@ -393,113 +389,6 @@ class StructureControllerTest extends AbstractTestCase
}
/**
- * Tests for synchronizeFavoriteTables()
- */
- public function testSynchronizeFavoriteTables(): void
- {
- $favoriteInstance = $this->getFavoriteTablesMock();
-
- $class = new ReflectionClass(StructureController::class);
- $method = $class->getMethod('synchronizeFavoriteTables');
- $method->setAccessible(true);
-
- $controller = new StructureController(
- $this->response,
- $this->template,
- $GLOBALS['db'],
- $this->relation,
- $this->replication,
- $this->relationCleanup,
- $this->operations,
- $GLOBALS['dbi'],
- $this->flash
- );
-
- // The user hash for test
- $user = 'abcdefg';
- $favoriteTable = [
- $user => [
- [
- 'db' => 'db',
- 'table' => 'table',
- ],
- ],
- ];
-
- $json = $method->invokeArgs($controller, [$favoriteInstance, $user, $favoriteTable]);
-
- $this->assertEquals(json_encode($favoriteTable), $json['favoriteTables'] ?? '');
- $this->assertArrayHasKey('list', $json);
- }
-
- /**
- * @return MockObject|RecentFavoriteTable
- */
- private function getFavoriteTablesMock()
- {
- $favoriteInstance = $this->getMockBuilder(RecentFavoriteTable::class)
- ->disableOriginalConstructor()
- ->getMock();
- $favoriteInstance->expects($this->exactly(2))
- ->method('getTables')
- ->will($this->onConsecutiveCalls([[]], [['db' => 'db', 'table' => 'table']]));
-
- return $favoriteInstance;
- }
-
- /**
- * Tests for handleRealRowCountRequestAction()
- */
- public function testHandleRealRowCountRequestAction(): void
- {
- global $is_db;
-
- $is_db = true;
-
- $this->response->setAjax(true);
- $controller = new StructureController(
- $this->response,
- $this->template,
- $GLOBALS['db'],
- $this->relation,
- $this->replication,
- $this->relationCleanup,
- $this->operations,
- $GLOBALS['dbi'],
- $this->flash
- );
- // Showing statistics
- $class = new ReflectionClass(StructureController::class);
- $property = $class->getProperty('tables');
- $property->setAccessible(true);
-
- $_REQUEST['table'] = 'table';
- $controller->handleRealRowCountRequestAction();
- $json = $this->response->getJSONResult();
- $this->assertEquals(
- 6,
- $json['real_row_count']
- );
-
- // Fall into another branch
- $property->setValue($controller, [['TABLE_NAME' => 'table']]);
- $_REQUEST['real_row_count_all'] = 'abc';
- $controller->handleRealRowCountRequestAction();
- $json = $this->response->getJSONResult();
-
- $expectedResult = [
- [
- 'table' => 'table',
- 'row_count' => 6,
- ],
- ];
- $this->assertEquals(
- json_encode($expectedResult),
- $json['real_row_count_all']
- );
- }
-
- /**
* @throws ReflectionException
*/
public function testDisplayTableList(): void
diff --git a/test/classes/Controllers/Server/Databases/CreateControllerTest.php b/test/classes/Controllers/Server/Databases/CreateControllerTest.php
new file mode 100644
index 0000000000..53116cfa6a
--- /dev/null
+++ b/test/classes/Controllers/Server/Databases/CreateControllerTest.php
@@ -0,0 +1,61 @@
+<?php
+
+declare(strict_types=1);
+
+namespace PhpMyAdmin\Tests\Controllers\Server\Databases;
+
+use PhpMyAdmin\Controllers\Server\Databases\CreateController;
+use PhpMyAdmin\Template;
+use PhpMyAdmin\Tests\AbstractTestCase;
+use PhpMyAdmin\Tests\Stubs\ResponseRenderer;
+
+use function __;
+use function sprintf;
+
+/**
+ * @covers \PhpMyAdmin\Controllers\Server\Databases\CreateController
+ */
+final class CreateControllerTest extends AbstractTestCase
+{
+ public function testCreateDatabase(): void
+ {
+ $GLOBALS['server'] = 1;
+ $GLOBALS['text_dir'] = 'ltr';
+ $GLOBALS['PMA_PHP_SELF'] = 'index.php';
+ $GLOBALS['cfg']['Server']['DisableIS'] = false;
+ $GLOBALS['db'] = 'pma_test';
+ $GLOBALS['table'] = '';
+
+ $response = new ResponseRenderer();
+ $response->setAjax(true);
+
+ $template = new Template();
+ $controller = new CreateController($response, $template, $this->dbi);
+
+ $_POST['new_db'] = 'test_db_error';
+
+ $controller();
+ $actual = $response->getJSONResult();
+
+ $this->assertArrayHasKey('message', $actual);
+ $this->assertStringContainsString('<div class="alert alert-danger" role="alert">', $actual['message']);
+
+ $response = new ResponseRenderer();
+ $response->setAjax(true);
+
+ $controller = new CreateController($response, $template, $this->dbi);
+
+ $_POST['new_db'] = 'test_db';
+ $_POST['db_collation'] = 'utf8_general_ci';
+
+ $controller();
+ $actual = $response->getJSONResult();
+
+ $this->assertArrayHasKey('message', $actual);
+ $this->assertStringContainsString('<div class="alert alert-success" role="alert">', $actual['message']);
+ $this->assertStringContainsString(
+ sprintf(__('Database %1$s has been created.'), 'test_db'),
+ $actual['message']
+ );
+ }
+}
diff --git a/test/classes/Controllers/Server/Databases/DestroyControllerTest.php b/test/classes/Controllers/Server/Databases/DestroyControllerTest.php
new file mode 100644
index 0000000000..377d84dc24
--- /dev/null
+++ b/test/classes/Controllers/Server/Databases/DestroyControllerTest.php
@@ -0,0 +1,58 @@
+<?php
+
+declare(strict_types=1);
+
+namespace PhpMyAdmin\Tests\Controllers\Server\Databases;
+
+use PhpMyAdmin\Controllers\Server\Databases\DestroyController;
+use PhpMyAdmin\DatabaseInterface;
+use PhpMyAdmin\Relation;
+use PhpMyAdmin\RelationCleanup;
+use PhpMyAdmin\Template;
+use PhpMyAdmin\Tests\AbstractTestCase;
+use PhpMyAdmin\Tests\Stubs\ResponseRenderer;
+use PhpMyAdmin\Transformations;
+
+use function __;
+
+/**
+ * @covers \PhpMyAdmin\Controllers\Server\Databases\DestroyController
+ */
+class DestroyControllerTest extends AbstractTestCase
+{
+ public function testDropDatabases(): void
+ {
+ global $cfg;
+
+ $GLOBALS['server'] = 1;
+ $GLOBALS['text_dir'] = 'ltr';
+ $GLOBALS['PMA_PHP_SELF'] = 'index.php';
+
+ $dbi = $this->getMockBuilder(DatabaseInterface::class)
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $response = new ResponseRenderer();
+ $response->setAjax(true);
+
+ $cfg['AllowUserDropDatabase'] = true;
+
+ $template = new Template();
+ $controller = new DestroyController(
+ $response,
+ $template,
+ $dbi,
+ new Transformations(),
+ new RelationCleanup($dbi, new Relation($dbi, $template))
+ );
+
+ $_POST['drop_selected_dbs'] = '1';
+
+ $controller();
+ $actual = $response->getJSONResult();
+
+ $this->assertArrayHasKey('message', $actual);
+ $this->assertStringContainsString('<div class="alert alert-danger" role="alert">', $actual['message']);
+ $this->assertStringContainsString(__('No databases selected.'), $actual['message']);
+ }
+}
diff --git a/test/classes/Controllers/Server/DatabasesControllerTest.php b/test/classes/Controllers/Server/DatabasesControllerTest.php
index 40815e6718..0e60029bd4 100644
--- a/test/classes/Controllers/Server/DatabasesControllerTest.php
+++ b/test/classes/Controllers/Server/DatabasesControllerTest.php
@@ -5,7 +5,6 @@ declare(strict_types=1);
namespace PhpMyAdmin\Tests\Controllers\Server;
use PhpMyAdmin\Controllers\Server\DatabasesController;
-use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Relation;
use PhpMyAdmin\RelationCleanup;
use PhpMyAdmin\Template;
@@ -15,7 +14,6 @@ use PhpMyAdmin\Transformations;
use stdClass;
use function __;
-use function sprintf;
/**
* @covers \PhpMyAdmin\Controllers\Server\DatabasesController
@@ -64,7 +62,7 @@ class DatabasesControllerTest extends AbstractTestCase
);
$this->dummyDbi->addSelectDb('mysql');
- $controller->index();
+ $controller();
$this->assertAllSelectsConsumed();
$actual = $response->getHTMLResult();
@@ -101,7 +99,7 @@ class DatabasesControllerTest extends AbstractTestCase
$_REQUEST['sort_order'] = 'desc';
$this->dummyDbi->addSelectDb('mysql');
- $controller->index();
+ $controller();
$this->assertAllSelectsConsumed();
$actual = $response->getHTMLResult();
@@ -117,84 +115,4 @@ class DatabasesControllerTest extends AbstractTestCase
$this->assertStringContainsString('MiB', $actual);
$this->assertStringContainsString('name="db_collation"', $actual);
}
-
- public function testCreateDatabaseAction(): void
- {
- $response = new ResponseRenderer();
- $response->setAjax(true);
-
- $template = new Template();
- $transformations = new Transformations();
- $controller = new DatabasesController(
- $response,
- $template,
- $transformations,
- new RelationCleanup($this->dbi, new Relation($this->dbi, $template)),
- $this->dbi
- );
-
- $_POST['new_db'] = 'test_db_error';
-
- $controller->create();
- $actual = $response->getJSONResult();
-
- $this->assertArrayHasKey('message', $actual);
- $this->assertStringContainsString('<div class="alert alert-danger" role="alert">', $actual['message']);
-
- $response = new ResponseRenderer();
- $response->setAjax(true);
-
- $controller = new DatabasesController(
- $response,
- $template,
- $transformations,
- new RelationCleanup($this->dbi, new Relation($this->dbi, $template)),
- $this->dbi
- );
-
- $_POST['new_db'] = 'test_db';
- $_POST['db_collation'] = 'utf8_general_ci';
-
- $controller->create();
- $actual = $response->getJSONResult();
-
- $this->assertArrayHasKey('message', $actual);
- $this->assertStringContainsString('<div class="alert alert-success" role="alert">', $actual['message']);
- $this->assertStringContainsString(
- sprintf(__('Database %1$s has been created.'), 'test_db'),
- $actual['message']
- );
- }
-
- public function testDropDatabasesAction(): void
- {
- global $cfg;
-
- $dbi = $this->getMockBuilder(DatabaseInterface::class)
- ->disableOriginalConstructor()
- ->getMock();
-
- $response = new ResponseRenderer();
- $response->setAjax(true);
-
- $cfg['AllowUserDropDatabase'] = true;
-
- $template = new Template();
- $controller = new DatabasesController(
- $response,
- $template,
- new Transformations(),
- new RelationCleanup($dbi, new Relation($dbi, $template)),
- $dbi
- );
-
- $_POST['drop_selected_dbs'] = '1';
-
- $controller->destroy();
- $actual = $response->getJSONResult();
-
- $this->assertArrayHasKey('message', $actual);
- $this->assertStringContainsString('<div class="alert alert-danger" role="alert">', $actual['message']);
- $this->assertStringContainsString(__('No databases selected.'), $actual['message']);
- }
}
diff --git a/test/classes/Stubs/DbiDummy.php b/test/classes/Stubs/DbiDummy.php
index eebc63d455..82632fa6cb 100644
--- a/test/classes/Stubs/DbiDummy.php
+++ b/test/classes/Stubs/DbiDummy.php
@@ -3026,6 +3026,119 @@ class DbiDummy implements DbiExtension
],
],
],
+ [
+ 'query' => 'SHOW TABLE STATUS FROM `world`',
+ 'columns' => [
+ 'Name',
+ 'Engine',
+ 'Version',
+ 'Row_format',
+ 'Rows',
+ 'Avg_row_length',
+ 'Data_length',
+ 'Max_data_length',
+ 'Index_length',
+ 'Data_free',
+ 'Auto_increment',
+ 'Create_time',
+ 'Update_time',
+ 'Check_time',
+ 'Collation',
+ 'Checksum',
+ 'Create_options',
+ 'Comment',
+ 'Max_index_length',
+ 'Temporary',
+ ],
+ 'result' => [
+ [
+ 'City',
+ 'InnoDB',
+ '10',
+ 'Dynamic',
+ '4046',
+ '101',
+ '409600',
+ '0',
+ '114688',
+ '0',
+ '4080',
+ '2020-07-03 17:24:47',
+ null,
+ null,
+ 'utf8mb4_general_ci',
+ null,
+ '',
+ '',
+ '0',
+ 'N',
+ ],
+ [
+ 'Country',
+ 'InnoDB',
+ '10',
+ 'Dynamic',
+ '239',
+ '479',
+ '114688',
+ '0',
+ '0',
+ '0',
+ null,
+ '2020-07-03 17:24:47',
+ null,
+ null,
+ 'utf8mb4_general_ci',
+ null,
+ '',
+ '',
+ '0',
+ 'N',
+ ],
+ [
+ 'CountryLanguage',
+ 'InnoDB',
+ '10',
+ 'Dynamic',
+ '984',
+ '99',
+ '98304',
+ '0',
+ '65536',
+ '0',
+ null,
+ '2020-07-03 17:24:47',
+ null,
+ null,
+ 'utf8mb4_general_ci',
+ null,
+ '',
+ '',
+ '0',
+ 'N',
+ ],
+ ],
+ ],
+ [
+ 'query' => 'SHOW TABLES FROM `world`;',
+ 'columns' => ['Tables_in_world'],
+ 'result' => [['City'], ['Country'], ['CountryLanguage']],
+ ],
+ [
+ 'query' => 'SELECT COUNT(*) AS `row_count` FROM `world`.`City`',
+ 'columns' => ['row_count'],
+ 'result' => [['4079']],
+ ],
+ [
+ 'query' => 'SELECT COUNT(*) AS `row_count` FROM `world`.`Country`',
+ 'columns' => ['row_count'],
+ 'result' => [['239']],
+ ],
+ [
+ 'query' => 'SELECT COUNT(*) AS `row_count` FROM `world`.`CountryLanguage`',
+ 'columns' => ['row_count'],
+ 'result' => [['984']],
+ ],
];
/* Some basic setup for dummy driver */