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(); } }