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>2022-08-20 23:23:15 +0300
committerMaurício Meneghini Fauth <mauricio@fauth.dev>2022-08-20 23:23:15 +0300
commitec03bac629dc410c61a7dfd87c1019ea13f592f5 (patch)
tree9e55ca075d693cd3f65cad46c406297ae0d8bc5f /test
parentd7e1dd7206a139869dbd4f3706fddb43053ffe0e (diff)
Add unit tests for Table\Structure\UniqueController class
Signed-off-by: Maurício Meneghini Fauth <mauricio@fauth.dev>
Diffstat (limited to 'test')
-rw-r--r--test/classes/Controllers/Table/Structure/UniqueControllerTest.php131
1 files changed, 131 insertions, 0 deletions
diff --git a/test/classes/Controllers/Table/Structure/UniqueControllerTest.php b/test/classes/Controllers/Table/Structure/UniqueControllerTest.php
new file mode 100644
index 0000000000..dfdf2fcef9
--- /dev/null
+++ b/test/classes/Controllers/Table/Structure/UniqueControllerTest.php
@@ -0,0 +1,131 @@
+<?php
+
+declare(strict_types=1);
+
+namespace PhpMyAdmin\Tests\Controllers\Table\Structure;
+
+use PhpMyAdmin\Controllers\Table\Structure\UniqueController;
+use PhpMyAdmin\Controllers\Table\StructureController;
+use PhpMyAdmin\Http\ServerRequest;
+use PhpMyAdmin\Message;
+use PhpMyAdmin\Template;
+use PhpMyAdmin\Tests\AbstractTestCase;
+use PhpMyAdmin\Tests\Stubs\ResponseRenderer;
+
+/**
+ * @covers \PhpMyAdmin\Controllers\Table\Structure\UniqueController
+ */
+class UniqueControllerTest extends AbstractTestCase
+{
+ public function testAddUniqueKeyToSingleField(): void
+ {
+ $GLOBALS['db'] = 'test_db';
+ $GLOBALS['table'] = 'test_table';
+ $GLOBALS['message'] = null;
+ $GLOBALS['sql_query'] = null;
+ $_POST['selected_fld'] = ['test_field'];
+
+ $dbiDummy = $this->createDbiDummy();
+ $dbiDummy->addSelectDb('test_db');
+ $dbiDummy->addResult('ALTER TABLE `test_table` ADD UNIQUE(`test_field`);', []);
+ $dbi = $this->createDatabaseInterface($dbiDummy);
+ $GLOBALS['dbi'] = $dbi;
+ $request = $this->createStub(ServerRequest::class);
+ $controllerStub = $this->createMock(StructureController::class);
+ $controllerStub->expects($this->once())->method('__invoke')->with($request);
+
+ $controller = new UniqueController(new ResponseRenderer(), new Template(), $dbi, $controllerStub);
+ $controller($request);
+
+ $this->assertEquals(Message::success(), $GLOBALS['message']);
+ /** @psalm-suppress TypeDoesNotContainType */
+ $this->assertSame('ALTER TABLE `test_table` ADD UNIQUE(`test_field`);', $GLOBALS['sql_query']);
+ $dbiDummy->assertAllSelectsConsumed();
+ $dbiDummy->assertAllQueriesConsumed();
+ }
+
+ public function testAddUniqueKeyToMultipleFields(): void
+ {
+ $GLOBALS['db'] = 'test_db';
+ $GLOBALS['table'] = 'test_table';
+ $GLOBALS['message'] = null;
+ $GLOBALS['sql_query'] = null;
+ $_POST['selected_fld'] = ['test_field1', 'test_field2'];
+
+ $dbiDummy = $this->createDbiDummy();
+ $dbiDummy->addSelectDb('test_db');
+ $dbiDummy->addResult('ALTER TABLE `test_table` ADD UNIQUE(`test_field1`, `test_field2`);', []);
+ $dbi = $this->createDatabaseInterface($dbiDummy);
+ $GLOBALS['dbi'] = $dbi;
+ $request = $this->createStub(ServerRequest::class);
+ $controllerStub = $this->createMock(StructureController::class);
+ $controllerStub->expects($this->once())->method('__invoke')->with($request);
+
+ $controller = new UniqueController(new ResponseRenderer(), new Template(), $dbi, $controllerStub);
+ $controller($request);
+
+ $this->assertEquals(Message::success(), $GLOBALS['message']);
+ /** @psalm-suppress TypeDoesNotContainType */
+ $this->assertSame('ALTER TABLE `test_table` ADD UNIQUE(`test_field1`, `test_field2`);', $GLOBALS['sql_query']);
+ $dbiDummy->assertAllSelectsConsumed();
+ $dbiDummy->assertAllQueriesConsumed();
+ }
+
+ public function testNoColumnsSelected(): void
+ {
+ $GLOBALS['db'] = 'test_db';
+ $GLOBALS['table'] = 'test_table';
+ $GLOBALS['message'] = null;
+ $GLOBALS['sql_query'] = null;
+ $_POST['selected_fld'] = null;
+
+ $dbi = $this->createDatabaseInterface();
+ $GLOBALS['dbi'] = $dbi;
+ $request = $this->createStub(ServerRequest::class);
+ $controllerStub = $this->createMock(StructureController::class);
+ $controllerStub->expects($this->never())->method('__invoke');
+ $response = new ResponseRenderer();
+
+ $controller = new UniqueController($response, new Template(), $dbi, $controllerStub);
+ $controller($request);
+
+ $this->assertFalse($response->hasSuccessState());
+ $this->assertSame(['message' => 'No column selected.'], $response->getJSONResult());
+ /** @psalm-suppress RedundantCondition */
+ $this->assertNull($GLOBALS['message']);
+ /** @psalm-suppress RedundantCondition */
+ $this->assertNull($GLOBALS['sql_query']);
+ }
+
+ public function testAddUniqueKeyWithError(): void
+ {
+ $GLOBALS['db'] = 'test_db';
+ $GLOBALS['table'] = 'test_table';
+ $GLOBALS['message'] = null;
+ $GLOBALS['sql_query'] = null;
+ $_POST['selected_fld'] = ['test_field'];
+
+ $dbiDummy = $this->createDbiDummy();
+ $dbiDummy->addSelectDb('test_db');
+ $dbiDummy->addResult('ALTER TABLE `test_table` ADD UNIQUE(`test_field`);', false);
+ $dbiDummy->addErrorCode('#1062 - Duplicate entry &#039;2&#039; for key &#039;test_field&#039;');
+ $dbi = $this->createDatabaseInterface($dbiDummy);
+ $GLOBALS['dbi'] = $dbi;
+ $request = $this->createStub(ServerRequest::class);
+ $controllerStub = $this->createMock(StructureController::class);
+ $controllerStub->expects($this->once())->method('__invoke')->with($request);
+
+ $controller = new UniqueController(new ResponseRenderer(), new Template(), $dbi, $controllerStub);
+ $controller($request);
+
+ $this->assertEquals(
+ Message::error('#1062 - Duplicate entry &#039;2&#039; for key &#039;test_field&#039;'),
+ $GLOBALS['message']
+ );
+ /** @psalm-suppress TypeDoesNotContainType */
+ $this->assertSame('ALTER TABLE `test_table` ADD UNIQUE(`test_field`);', $GLOBALS['sql_query']);
+ $dbiDummy->assertAllSelectsConsumed();
+ $dbiDummy->assertAllQueriesConsumed();
+ $dbiDummy->assertAllErrorCodesConsumed();
+ }
+}