3 declare(strict_types
=1);
5 namespace PhpMyAdmin\Tests\Table
;
7 use PhpMyAdmin\Current
;
8 use PhpMyAdmin\Dbal\DatabaseInterface
;
10 use PhpMyAdmin\Message
;
11 use PhpMyAdmin\Table\Indexes
;
12 use PhpMyAdmin\Table\Table
;
13 use PhpMyAdmin\Tests\AbstractTestCase
;
14 use PHPUnit\Framework\Attributes\CoversClass
;
15 use PHPUnit\Framework\MockObject\MockObject
;
17 #[CoversClass(Indexes::class)]
18 class IndexesTest
extends AbstractTestCase
20 private DatabaseInterface
&MockObject
$dbi;
22 protected function setUp(): void
26 Current
::$database = 'db';
27 Current
::$table = 'table';
29 $this->dbi
= $this->getMockBuilder(DatabaseInterface
::class)
30 ->disableOriginalConstructor()
34 public function testGetSqlQueryForRename(): void
36 $sqlQuery = 'ALTER TABLE `db`.`table` RENAME INDEX `0` TO `ABC`;';
38 $this->dbi
->expects(self
::any())->method('getVersion')
41 $index = new Index(['Key_name' => 'ABC']);
43 $indexes = new Indexes($this->dbi
);
45 $sqlResult = $indexes->getSqlQueryForRename('0', $index, Current
::$database, Current
::$table);
46 self
::assertStringContainsString($sqlQuery, $sqlResult);
49 $index->setName('NOT PRIMARY'); // Cannot rename primary so the operation should fail
50 $indexes->getSqlQueryForRename('PRIMARY', $index, Current
::$database, Current
::$table);
51 $error = $indexes->getError();
52 self
::assertInstanceOf(Message
::class, $error);
54 $index->setName('PRIMARY'); // The new name cannot be PRIMARY so the operation should fail
55 $indexes->getSqlQueryForRename('NOT PRIMARY', $index, Current
::$database, Current
::$table);
56 $error = $indexes->getError();
57 self
::assertInstanceOf(Message
::class, $error);
60 public function testGetSqlQueryForIndexCreateOrEdit(): void
62 $table = $this->getMockBuilder(Table
::class)
63 ->disableOriginalConstructor()
65 $this->dbi
->expects(self
::any())->method('getTable')
67 $indexes = new Indexes($this->dbi
);
72 'Key_name' => 'PRIMARY',
73 'columns' => [['Column_name' => 'id']],
76 $sqlQueryExpected = 'ALTER TABLE `pma_db`.`pma_table` DROP PRIMARY KEY, ADD PRIMARY KEY (`id`);';
78 $_POST['old_index'] = 'PRIMARY';
81 $indexes->getSqlQueryForIndexCreateOrEdit('PRIMARY', $index, $db, $table),
85 $index->setName('NOT PRIMARY'); // Cannot rename primary so the operation should fail
86 $indexes->getSqlQueryForIndexCreateOrEdit('PRIMARY', $index, $db, $table);
87 self
::assertInstanceOf(Message
::class, $indexes->getError());