phpmyadmin/tests/unit/Replication/ReplicationGuiTest.php
Kamil Tekiela f708e074c9
Clean up config again (#20264)
* MaxTableList/MaxDbList/QueryHistoryMax
* UserprefsDisallow
* NaturalOrder
* Update TableTest.php
* MaxExactCountViews
* Update ReplicationGuiTest.php
* Update RoutinesTest.php
* Update StructureControllerTest.php
* Update ExportControllerTest.php
* Update StructureControllerTest.php
* Update BookmarkTest.php
* MaxCharactersInDisplayedSQL
* ActionLinksMode/ShowSQL/MysqlSslWarningSafeHosts
* Update TwoFactorTest.php
* ForeignKeyMaxLimit/ForeignKeyDropdownOrder
* QueryHistoryDB
* ZeroConf
* UseDbSearch
* MaxRoutineList
* NumFavoriteTables
* EnableAutocompleteForTablesAndColumns
* MaxExactCount/ShowStats
* InitialSlidersState
* Remove isset in Results
* Remove isset and fix tests
* PmaNoRelation_DisableWarning
* ShowCreateDb
* Update phpstan-baseline.neon
* Navigation
* Upgrading vimeo/psalm (6.15.0 => 6.16.1)

---------

Signed-off-by: Kamil Tekiela <tekiela246@gmail.com>
2026-04-10 16:33:08 -03:00

116 lines
4.7 KiB
PHP

<?php
declare(strict_types=1);
namespace PhpMyAdmin\Tests\Replication;
use PhpMyAdmin\Config;
use PhpMyAdmin\Dbal\DatabaseInterface;
use PhpMyAdmin\Replication\Replication;
use PhpMyAdmin\Replication\ReplicationGui;
use PhpMyAdmin\Replication\ReplicationInfo;
use PhpMyAdmin\Template;
use PhpMyAdmin\Tests\AbstractTestCase;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\Medium;
#[CoversClass(ReplicationGui::class)]
#[Medium]
class ReplicationGuiTest extends AbstractTestCase
{
/**
* ReplicationGui instance
*/
private ReplicationGui $replicationGui;
/**
* Prepares environment for the test.
*/
protected function setUp(): void
{
parent::setUp();
DatabaseInterface::$instance = $this->createDatabaseInterface();
$this->replicationGui = new ReplicationGui(
new Replication(DatabaseInterface::getInstance()),
new Template(Config::getInstance()),
);
}
public function testGetHtmlForPrimaryReplication(): void
{
$html = $this->replicationGui->getHtmlForPrimaryReplication(null, false, 'primary_add_user', null, null);
//validate 1: Primary replication
self::assertStringContainsString('<div class="card-header">Primary replication</div>', $html);
self::assertStringContainsString('This server is configured as primary in a replication process.', $html);
//validate 2: getHtmlForReplicationStatusTable
self::assertStringContainsString('<div id="replication_primary_section"', $html);
self::assertStringContainsString('Binlog_Do_DB', $html);
self::assertStringContainsString('Binlog_Ignore_DB', $html);
self::assertStringContainsString('primary-bin.000030', $html);
//validate 3: getHtmlForReplicationReplicasTable
self::assertStringContainsString('replication_replicas_section', $html);
self::assertStringContainsString('<th>Server ID</th>', $html);
self::assertStringContainsString('<th>Host</th>', $html);
//replica host
self::assertStringContainsString('<td class="text-end font-monospace">Server_id1</td>', $html);
self::assertStringContainsString('<td class="text-end font-monospace">Server_id2</td>', $html);
self::assertStringContainsString('<td class="text-end font-monospace">Host1</td>', $html);
self::assertStringContainsString('<td class="text-end font-monospace">Host2</td>', $html);
//Notice
self::assertStringContainsString('Only replicas started with the', $html);
//validate 4: navigation URL
self::assertStringContainsString('<a href="index.php?route=/server/replication', $html);
self::assertStringContainsString('Add replica replication user', $html);
//validate 5: 'Add replication replica user' form
self::assertStringContainsString('<div id="primary_addreplicauser_gui">', $html);
}
public function testGetHtmlForReplicaConfiguration(): void
{
$replicationInfo = new ReplicationInfo(DatabaseInterface::getInstance());
$replicationInfo->load();
//Call the test function
$html = $this->replicationGui->getHtmlForReplicaConfiguration(
null,
true,
$replicationInfo->getReplicaStatus(),
isset($_POST['replica_configure']),
);
//legend
self::assertStringContainsString('<div class="card-header">Replica replication</div>', $html);
self::assertStringContainsString('<div id="replica_configuration_gui">', $html);
//notice
self::assertStringContainsString('Server is configured as replica in a replication process.', $html);
//replica session
self::assertStringContainsString('<div id="replication_replica_section"', $html);
//variable
self::assertStringContainsString('Master_SSL_CA_Path', $html);
self::assertStringContainsString('Master_SSL_Cert', $html);
self::assertStringContainsString('Master_SSL_Cipher', $html);
self::assertStringContainsString('Seconds_Behind_Master', $html);
}
public function testGetHtmlForReplicationChangePrimary(): void
{
//Call the test function
$html = $this->replicationGui->getHtmlForReplicationChangePrimary('replica_changeprimary');
self::assertStringContainsString('<form method="post" action="index.php?route=/server/replication', $html);
self::assertStringContainsString('Replica configuration', $html);
self::assertStringContainsString('Change or reconfigure primary server', $html);
$notice = 'Make sure you have a unique server-id in your configuration file (my.cnf)';
self::assertStringContainsString($notice, $html);
}
}