mirror of
https://github.com/archtechx/tenancy.git
synced 2025-12-12 11:14:04 +00:00
[4.x] Fix tenants:run argument parsing (#1287)
* Use StringInput instead of ArgvInput so that tenants:run accepts args properly * Test that tenants:run parses the arguments correctly * Fix code style (php-cs-fixer) * Fix PHPStan issue * remove unnecessary () --------- Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: Samuel Štancl <samuel.stancl@gmail.com>
This commit is contained in:
parent
f955b38e2b
commit
0e223e0484
4 changed files with 54 additions and 18 deletions
|
|
@ -7,7 +7,7 @@ namespace Stancl\Tenancy\Commands;
|
|||
use Illuminate\Console\Command;
|
||||
use Illuminate\Contracts\Console\Kernel;
|
||||
use Stancl\Tenancy\Concerns\HasTenantOptions;
|
||||
use Symfony\Component\Console\Input\ArgvInput;
|
||||
use Symfony\Component\Console\Input\StringInput;
|
||||
use Symfony\Component\Console\Output\ConsoleOutput;
|
||||
|
||||
class Run extends Command
|
||||
|
|
@ -21,30 +21,19 @@ class Run extends Command
|
|||
|
||||
public function handle(): int
|
||||
{
|
||||
$argvInput = $this->argvInput();
|
||||
/** @var string $commandName */
|
||||
$commandName = $this->argument('commandname');
|
||||
|
||||
tenancy()->runForMultiple($this->getTenants(), function ($tenant) use ($argvInput) {
|
||||
$stringInput = new StringInput($commandName);
|
||||
|
||||
tenancy()->runForMultiple($this->getTenants(), function ($tenant) use ($stringInput) {
|
||||
$this->components->info("Tenant: {$tenant->getTenantKey()}");
|
||||
|
||||
$this->getLaravel()
|
||||
->make(Kernel::class)
|
||||
->handle($argvInput, new ConsoleOutput);
|
||||
->handle($stringInput, new ConsoleOutput);
|
||||
});
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
protected function argvInput(): ArgvInput
|
||||
{
|
||||
/** @var string $commandName */
|
||||
$commandName = $this->argument('commandname');
|
||||
|
||||
// Convert string command to array
|
||||
$subCommand = explode(' ', $commandName);
|
||||
|
||||
// Add "artisan" as first parameter because ArgvInput expects "artisan" as first parameter and later removes it
|
||||
array_unshift($subCommand, 'artisan');
|
||||
|
||||
return new ArgvInput($subCommand);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -389,6 +389,21 @@ test('run command works when sub command asks questions and accepts arguments',
|
|||
expect($user->email)->toBe('email@localhost');
|
||||
});
|
||||
|
||||
test('run command accepts arguments and options correctly', function() {
|
||||
$tenant = Tenant::create();
|
||||
$id = $tenant->getTenantKey();
|
||||
|
||||
// Use unquoted single-word arguments and quoted arguments with spaces
|
||||
pest()->artisan("tenants:run \"bar username 'email@localhost' adsfg123 'some Arg' --option='some option'\" --tenants=$id")
|
||||
->expectsOutputToContain("Tenant: $id.")
|
||||
->expectsOutput("Name: username")
|
||||
->expectsOutput("Email: email@localhost")
|
||||
->expectsOutput("Password: adsfg123")
|
||||
->expectsOutput("Argument: some Arg")
|
||||
->expectsOutput("Option: some option")
|
||||
->assertExitCode(0);
|
||||
});
|
||||
|
||||
test('migrate fresh command only deletes tenant databases if drop_tenant_databases_on_migrate_fresh is true', function (bool $dropTenantDBsOnMigrateFresh) {
|
||||
Event::listen(DeletingTenant::class,
|
||||
JobPipeline::make([DeleteDomains::class])->send(function (DeletingTenant $event) {
|
||||
|
|
|
|||
31
tests/Etc/Console/AnotherExampleCommand.php
Normal file
31
tests/Etc/Console/AnotherExampleCommand.php
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Stancl\Tenancy\Tests\Etc\Console;
|
||||
|
||||
use Illuminate\Console\Command;
|
||||
|
||||
class AnotherExampleCommand extends Command
|
||||
{
|
||||
/**
|
||||
* The name and signature of the console command.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $signature = 'bar {name} {email} {password} {arg} {--option=}';
|
||||
|
||||
/**
|
||||
* Execute the console command.
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function handle()
|
||||
{
|
||||
$this->line('Name: ' . $this->argument('name'));
|
||||
$this->line('Email: ' . $this->argument('email'));
|
||||
$this->line('Password: ' . $this->argument('password'));
|
||||
$this->line('Argument: ' . $this->argument('arg'));
|
||||
$this->line('Option: ' . $this->option('option'));
|
||||
}
|
||||
}
|
||||
|
|
@ -10,6 +10,7 @@ class ConsoleKernel extends Kernel
|
|||
{
|
||||
protected $commands = [
|
||||
ExampleCommand::class,
|
||||
AnotherExampleCommand::class,
|
||||
ExampleQuestionCommand::class,
|
||||
AddUserCommand::class,
|
||||
];
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue