mirror of
https://github.com/archtechx/tenancy.git
synced 2026-08-06 11:04:04 +00:00
migrate-fresh: show migration output when verbose (#1464)
Resubmission of #1369 (by @lordofthebrain), changes adapted to v4. Also added a test (passes with the MigrateFresh changes, fails without them). --------- Co-authored-by: lordofthebrain <f.mangelsdorf@gmail.com> Co-authored-by: Samuel Stancl <samuel@archte.ch>
This commit is contained in:
parent
aa9d1d7fcf
commit
df4be2e060
2 changed files with 35 additions and 2 deletions
|
|
@ -14,6 +14,7 @@ use Stancl\Tenancy\Concerns\ParallelCommand;
|
||||||
use Stancl\Tenancy\Database\Contracts\TenantWithDatabase;
|
use Stancl\Tenancy\Database\Contracts\TenantWithDatabase;
|
||||||
use Stancl\Tenancy\Database\Exceptions\TenantDatabaseDoesNotExistException;
|
use Stancl\Tenancy\Database\Exceptions\TenantDatabaseDoesNotExistException;
|
||||||
use Symfony\Component\Console\Input\InputOption;
|
use Symfony\Component\Console\Input\InputOption;
|
||||||
|
use Symfony\Component\Console\Output\NullOutput;
|
||||||
use Symfony\Component\Console\Output\OutputInterface as OI;
|
use Symfony\Component\Console\Output\OutputInterface as OI;
|
||||||
|
|
||||||
class MigrateFresh extends BaseCommand
|
class MigrateFresh extends BaseCommand
|
||||||
|
|
@ -72,11 +73,13 @@ class MigrateFresh extends BaseCommand
|
||||||
|
|
||||||
protected function migrateTenant(TenantWithDatabase $tenant): bool
|
protected function migrateTenant(TenantWithDatabase $tenant): bool
|
||||||
{
|
{
|
||||||
return $this->callSilently('tenants:migrate', [
|
$output = $this->getOutput()->isVerbose() ? $this->output : new NullOutput;
|
||||||
|
|
||||||
|
return $this->runCommand('tenants:migrate', [
|
||||||
'--tenants' => [$tenant->getTenantKey()],
|
'--tenants' => [$tenant->getTenantKey()],
|
||||||
'--step' => $this->option('step'),
|
'--step' => $this->option('step'),
|
||||||
'--force' => true,
|
'--force' => true,
|
||||||
]) === 0;
|
], $output) === 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function childHandle(mixed ...$args): bool
|
protected function childHandle(mixed ...$args): bool
|
||||||
|
|
|
||||||
|
|
@ -366,6 +366,36 @@ test('migrate fresh command works', function () {
|
||||||
expect(DB::table('users')->exists())->toBeFalse();
|
expect(DB::table('users')->exists())->toBeFalse();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('migrate fresh command only shows migration output when run with the verbose option', function () {
|
||||||
|
$tenant = Tenant::create();
|
||||||
|
$migratingOutput = 'Migrating tenant ' . $tenant->getTenantKey();
|
||||||
|
|
||||||
|
// CI runs pest with --verbose which makes Artisan::call() inherit the verbosity
|
||||||
|
// so we cannot easily test commands without -v. To work around that, we temporarily
|
||||||
|
// override $_ENV['SHELL_VERBOSITY'] immediately before executing the command. If this
|
||||||
|
// ever stops working, try also overriding the value in $_SERVER and putenv().
|
||||||
|
$emptySentinel = new \stdClass();
|
||||||
|
$originalVerbosity = $_ENV['SHELL_VERBOSITY'] ?? $emptySentinel;
|
||||||
|
try {
|
||||||
|
$_ENV['SHELL_VERBOSITY'] = 0;
|
||||||
|
Artisan::call('tenants:migrate-fresh');
|
||||||
|
$defaultOutput = Artisan::output();
|
||||||
|
} finally {
|
||||||
|
if ($originalVerbosity === $emptySentinel) {
|
||||||
|
unset($_ENV['SHELL_VERBOSITY']);
|
||||||
|
} else {
|
||||||
|
$_ENV['SHELL_VERBOSITY'] = $originalVerbosity;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Artisan::call('tenants:migrate-fresh -v');
|
||||||
|
$verboseOutput = Artisan::output();
|
||||||
|
|
||||||
|
// The output is silent by default and only shown with the verbose option
|
||||||
|
expect($defaultOutput)->not()->toContain($migratingOutput);
|
||||||
|
expect($verboseOutput)->toContain($migratingOutput);
|
||||||
|
});
|
||||||
|
|
||||||
test('migrate fresh command respects force option in production', function () {
|
test('migrate fresh command respects force option in production', function () {
|
||||||
// Set environment to production
|
// Set environment to production
|
||||||
app()->detectEnvironment(fn() => 'production');
|
app()->detectEnvironment(fn() => 'production');
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue