44 lines
1.8 KiB
PHP
44 lines
1.8 KiB
PHP
<?php
|
|
|
|
namespace Tests\Unit\Console;
|
|
|
|
use App\Console\Commands\BusinessDataPlan;
|
|
use Illuminate\Database\ConnectionInterface;
|
|
use Illuminate\Database\Query\Builder;
|
|
use Illuminate\Support\Collection;
|
|
use Mockery;
|
|
use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration;
|
|
use Modules\EcommerceFinance\Services\BusinessDataPlacement;
|
|
use PHPUnit\Framework\TestCase;
|
|
use ReflectionMethod;
|
|
|
|
class BusinessDataPlanTest extends TestCase
|
|
{
|
|
use MockeryPHPUnitIntegration;
|
|
|
|
public function test_mysql_table_statistics_are_keyed_by_their_flat_row_shape(): void
|
|
{
|
|
$connection = Mockery::mock(ConnectionInterface::class);
|
|
$query = Mockery::mock(Builder::class);
|
|
$placements = Mockery::mock(BusinessDataPlacement::class);
|
|
|
|
$placements->shouldReceive('connection')->once()->andReturn($connection);
|
|
$connection->shouldReceive('getDriverName')->once()->andReturn('mysql');
|
|
$connection->shouldReceive('getDatabaseName')->once()->andReturn('caiwu_business_mirror');
|
|
$connection->shouldReceive('table')->once()->with('information_schema.TABLES')->andReturn($query);
|
|
$query->shouldReceive('where')->once()->with('TABLE_SCHEMA', 'caiwu_business_mirror')->andReturnSelf();
|
|
$query->shouldReceive('get')->once()->with(['TABLE_NAME', 'TABLE_ROWS', 'DATA_LENGTH', 'INDEX_LENGTH'])
|
|
->andReturn(new Collection([(object) [
|
|
'TABLE_NAME' => 'fact_rows',
|
|
'TABLE_ROWS' => 123,
|
|
'DATA_LENGTH' => 4096,
|
|
'INDEX_LENGTH' => 1024,
|
|
]]));
|
|
|
|
$method = new ReflectionMethod(BusinessDataPlan::class, 'tableSizes');
|
|
$sizes = $method->invoke(new BusinessDataPlan(), $placements);
|
|
|
|
$this->assertSame(['rows' => 123, 'bytes' => 5120], $sizes['fact_rows']);
|
|
}
|
|
}
|