CaiWuXiTong/tests/Feature/Installation/VerifySystemDatabaseTest.php

68 lines
2.5 KiB
PHP

<?php
namespace Tests\Feature\Installation;
use App\Console\Commands\VerifySystemDatabase;
use App\Utilities\SystemDatabaseConfiguration;
use Mockery;
use RuntimeException;
use Tests\TestCase;
class VerifySystemDatabaseTest extends TestCase
{
public function test_verify_command_reports_configuration_not_loaded(): void
{
$configuration = Mockery::mock(SystemDatabaseConfiguration::class);
$configuration->shouldReceive('current')->once()->andReturn([
'mode' => 'bootstrap',
]);
$this->app->instance(SystemDatabaseConfiguration::class, $configuration);
$this->artisan('system-database:verify')
->assertExitCode(VerifySystemDatabase::EXIT_CONFIG_NOT_LOADED);
}
public function test_verify_command_reports_database_connection_failure(): void
{
$this->enableSharedMode();
$configuration = Mockery::mock(SystemDatabaseConfiguration::class);
$configuration->shouldReceive('current')->once()->andReturn([
'mode' => 'shared',
'connection' => 'missing-connection',
]);
$this->app->instance(SystemDatabaseConfiguration::class, $configuration);
$this->artisan('system-database:verify')
->assertExitCode(VerifySystemDatabase::EXIT_DATABASE_CONNECTION_FAILED);
}
public function test_verify_command_reports_system_table_failure(): void
{
$this->enableSharedMode();
$connection = (string) config('database.default');
$settings = [
'mode' => 'shared',
'connection' => $connection,
];
$configuration = Mockery::mock(SystemDatabaseConfiguration::class);
$configuration->shouldReceive('current')->once()->andReturn($settings);
$configuration->shouldReceive('probe')->once()->with($settings)->andThrow(new RuntimeException('hidden'));
$this->app->instance(SystemDatabaseConfiguration::class, $configuration);
$this->artisan('system-database:verify')
->assertExitCode(VerifySystemDatabase::EXIT_SYSTEM_TABLE_VALIDATION_FAILED);
}
private function enableSharedMode(): void
{
config([
'upstreams.stored_configuration.enabled' => true,
// 生产刷新节点可能通过私有隧道覆盖上游端点;这不影响系统数据库
// 本身是否已切换并加载,验证命令不能把两件事绑定在一起。
'upstreams.local_configuration.enabled' => true,
]);
}
}