diff options
author | Maurício Meneghini Fauth <mauricio@fauth.dev> | 2022-08-20 23:23:15 +0300 |
---|---|---|
committer | Maurício Meneghini Fauth <mauricio@fauth.dev> | 2022-08-20 23:23:15 +0300 |
commit | ec03bac629dc410c61a7dfd87c1019ea13f592f5 (patch) | |
tree | 9e55ca075d693cd3f65cad46c406297ae0d8bc5f /test | |
parent | d7e1dd7206a139869dbd4f3706fddb43053ffe0e (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.php | 131 |
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 '2' for key '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::error('#1062 - Duplicate entry '2' for key 'test_field''), + $GLOBALS['message'] + ); + /** @psalm-suppress TypeDoesNotContainType */ + $this->assertSame('ALTER TABLE `test_table` ADD UNIQUE(`test_field`);', $GLOBALS['sql_query']); + $dbiDummy->assertAllSelectsConsumed(); + $dbiDummy->assertAllQueriesConsumed(); + $dbiDummy->assertAllErrorCodesConsumed(); + } +} |