Merge pull request #19552 from kamil-tekiela/Fix-default-values
[phpmyadmin.git] / tests / unit / Table / IndexesTest.php
blob35362c5f296cc9b070547823c77fbc954add9205
1 <?php
3 declare(strict_types=1);
5 namespace PhpMyAdmin\Tests\Table;
7 use PhpMyAdmin\Current;
8 use PhpMyAdmin\Dbal\DatabaseInterface;
9 use PhpMyAdmin\Index;
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
24 parent::setUp();
26 Current::$database = 'db';
27 Current::$table = 'table';
29 $this->dbi = $this->getMockBuilder(DatabaseInterface::class)
30 ->disableOriginalConstructor()
31 ->getMock();
34 public function testGetSqlQueryForRename(): void
36 $sqlQuery = 'ALTER TABLE `db`.`table` RENAME INDEX `0` TO `ABC`;';
38 $this->dbi->expects(self::any())->method('getVersion')
39 ->willReturn(50700);
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);
48 // Error message
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()
64 ->getMock();
65 $this->dbi->expects(self::any())->method('getTable')
66 ->willReturn($table);
67 $indexes = new Indexes($this->dbi);
69 $db = 'pma_db';
70 $table = 'pma_table';
71 $index = new Index([
72 'Key_name' => 'PRIMARY',
73 'columns' => [['Column_name' => 'id']],
74 ]);
76 $sqlQueryExpected = 'ALTER TABLE `pma_db`.`pma_table` DROP PRIMARY KEY, ADD PRIMARY KEY (`id`);';
78 $_POST['old_index'] = 'PRIMARY';
79 self::assertSame(
80 $sqlQueryExpected,
81 $indexes->getSqlQueryForIndexCreateOrEdit('PRIMARY', $index, $db, $table),
84 // Error message
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());