phpmyadmin/tests/classes/Partitioning/PartitionTest.php
Maurício Meneghini Fauth 1d1c55e250
Move test directory to tests
- Related to #18512

Signed-off-by: Maurício Meneghini Fauth <mauricio@fauth.dev>
2023-11-30 10:47:42 -03:00

78 lines
2.7 KiB
PHP

<?php
declare(strict_types=1);
namespace PhpMyAdmin\Tests\Partitioning;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Partitioning\Partition;
use PhpMyAdmin\Tests\AbstractTestCase;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\DataProvider;
use PHPUnit\Framework\Attributes\PreserveGlobalState;
use PHPUnit\Framework\Attributes\RunInSeparateProcess;
#[CoversClass(Partition::class)]
class PartitionTest extends AbstractTestCase
{
protected function setUp(): void
{
parent::setUp();
DatabaseInterface::$instance = $this->createDatabaseInterface();
}
public function testGetPartitionMethodReturnsNull(): void
{
$GLOBALS['server'] = 1;
$actual = Partition::getPartitionMethod('database', 'no_partition_method');
$this->assertNull($actual);
}
public function testGetPartitionMethodWithRangeMethod(): void
{
$GLOBALS['server'] = 1;
$actual = Partition::getPartitionMethod('database', 'range_partition_method');
$this->assertEquals('RANGE', $actual);
}
/** @param array<int, array<string, string>> $pluginValue */
#[DataProvider('providerForTestHavePartitioning')]
#[PreserveGlobalState(false)]
#[RunInSeparateProcess]
public function testHavePartitioning(bool $expected, int $version, string|false $varValue, array $pluginValue): void
{
$mock = $this->createStub(DatabaseInterface::class);
$mock->method('getVersion')->willReturn($version);
$mock->method('fetchValue')->willReturn($varValue);
$mock->method('fetchResult')->willReturn($pluginValue);
DatabaseInterface::$instance = $mock;
$this->assertSame($expected, Partition::havePartitioning());
}
/**
* @return array<string, array<int, bool|int|string|array<int, array<string, string>>>>
* @psalm-return array<string, array{bool, positive-int, string|false, list<array{Name: string}>}>
*/
public static function providerForTestHavePartitioning(): array
{
return [
'5.5.0 with partitioning support' => [true, 50500, '1', []],
'5.5.0 without partitioning support' => [false, 50500, '0', []],
'5.6.0 with partitioning support' => [
true,
50600,
false,
[['Name' => 'mysql_native_password'], ['Name' => 'partition'], ['Name' => 'InnoDB']],
],
'5.6.0 without partitioning support' => [
false,
50600,
false,
[['Name' => 'mysql_native_password'], ['Name' => 'InnoDB']],
],
'8.0.0' => [true, 80000, false, []],
];
}
}