CaiWuXiTong/tests/Feature/Installation/UpdateLocalBootstrapDatabaseTest.php

78 lines
2.8 KiB
PHP

<?php
namespace Tests\Feature\Installation;
use App\Utilities\LocalBootstrapMigrator;
use App\Utilities\SystemDatabaseConfiguration;
use Mockery;
use Tests\TestCase;
class UpdateLocalBootstrapDatabaseTest extends TestCase
{
public function test_shared_system_database_is_never_migrated_by_local_update_command(): void
{
config(['app.installed' => true]);
$configuration = Mockery::mock(SystemDatabaseConfiguration::class);
$configuration->shouldReceive('current')->once()->andReturn([
'connection' => 'mysql',
'driver' => 'mysql',
'host' => 'shared-db.test',
'mode' => 'shared',
]);
$this->app->instance(SystemDatabaseConfiguration::class, $configuration);
$this->artisan('local-bootstrap:update')
->expectsOutputToContain('本机不会执行数据库迁移')
->assertSuccessful();
}
public function test_uninstalled_environment_does_not_run_migrations(): void
{
config(['app.installed' => false]);
$configuration = Mockery::mock(SystemDatabaseConfiguration::class);
$configuration->shouldNotReceive('current');
$this->app->instance(SystemDatabaseConfiguration::class, $configuration);
$this->artisan('local-bootstrap:update')->assertSuccessful();
}
public function test_nonstandard_bootstrap_connection_is_rejected(): void
{
config(['app.installed' => true]);
$configuration = Mockery::mock(SystemDatabaseConfiguration::class);
$configuration->shouldReceive('current')->once()->andReturn([
'connection' => 'mysql',
'driver' => 'mysql',
'host' => 'unexpected-host',
'mode' => 'bootstrap',
]);
$this->app->instance(SystemDatabaseConfiguration::class, $configuration);
$this->artisan('local-bootstrap:update')->assertFailed();
}
public function test_standard_local_bootstrap_database_is_updated_automatically(): void
{
config(['app.installed' => true]);
$configuration = Mockery::mock(SystemDatabaseConfiguration::class);
$configuration->shouldReceive('current')->once()->andReturn([
'connection' => 'mysql',
'driver' => 'mysql',
'host' => 'mysql',
'mode' => 'bootstrap',
]);
$this->app->instance(SystemDatabaseConfiguration::class, $configuration);
$migrator = Mockery::mock(LocalBootstrapMigrator::class);
$migrator->shouldReceive('run')->once()->andReturn(0);
$this->app->instance(LocalBootstrapMigrator::class, $migrator);
$this->artisan('local-bootstrap:update')
->expectsOutputToContain('本机临时引导库已自动更新')
->assertSuccessful();
}
}