1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
|
<?php
declare(strict_types=1);
namespace PhpMyAdmin\Tests\Controllers\Table;
use PhpMyAdmin\Controllers\Table\IndexRenameController;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Index;
use PhpMyAdmin\Table\Indexes;
use PhpMyAdmin\Template;
use PhpMyAdmin\Tests\AbstractTestCase;
use PhpMyAdmin\Tests\Stubs\DbiDummy;
use PhpMyAdmin\Tests\Stubs\ResponseRenderer;
use ReflectionProperty;
/** @covers \PhpMyAdmin\Controllers\Table\IndexRenameController */
#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Controllers\Table\IndexRenameController::class)]
final class IndexRenameControllerTest extends AbstractTestCase
{
public function testPreviewSqlWithOldStatement(): void
{
$indexRegistry = new ReflectionProperty(Index::class, 'registry');
$indexRegistry->setAccessible(true);
$indexRegistry->setValue(null, []);
$GLOBALS['cfg']['Server'] = $GLOBALS['cfg']['Servers'][1];
$GLOBALS['cfg']['Server']['DisableIS'] = true;
$GLOBALS['db'] = 'test_db';
$GLOBALS['table'] = 'test_table';
$_POST['db'] = 'test_db';
$_POST['table'] = 'test_table';
$_POST['old_index'] = 'old_name';
$_POST['index'] = ['Key_name' => 'new_name'];
$_POST['do_save_data'] = '1';
$_POST['preview_sql'] = '1';
$dbiDummy = new DbiDummy();
$dbiDummy->addSelectDb('test_db');
$dbiDummy->addResult('SHOW TABLES LIKE \'test_table\';', [['test_table']]);
$dbiDummy->addResult(
'SHOW INDEXES FROM `test_db`.`test_table`',
[
['test_table', '0', 'PRIMARY', 'id', 'BTREE'],
['test_table', '1', 'old_name', 'name', 'BTREE'],
],
['Table', 'Non_unique', 'Key_name', 'Column_name', 'Index_type']
);
$dbi = DatabaseInterface::load($dbiDummy);
$dbi->setVersion(['@@version' => '5.5.0']);
$GLOBALS['dbi'] = $dbi;
$expected = <<<'HTML'
<div class="preview_sql">
<code class="sql" dir="ltr"><pre>
ALTER TABLE `test_db`.`test_table` DROP INDEX `old_name`, ADD INDEX `new_name` (`name`) USING BTREE;
</pre></code>
</div>
HTML;
$responseRenderer = new ResponseRenderer();
$template = new Template();
$controller = new IndexRenameController(
$responseRenderer,
$template,
'test_db',
'test_table',
$dbi,
new Indexes($responseRenderer, $template, $dbi)
);
$controller();
self::assertSame(['sql_data' => $expected], $responseRenderer->getJSONResult());
$this->assertAllSelectsConsumed();
$this->assertAllQueriesConsumed();
$indexRegistry->setValue(null, []);
}
}
|