Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 18 additions & 11 deletions src/Commands/Seed.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,21 +18,28 @@ class Seed extends SeedCommand

public function __construct(ConnectionResolverInterface $resolver)
{
// See https://github.com/archtechx/tenancy/issues/1474
if (version_compare(app()->version(), '13.24.0', '>=')) {
$this->signature = 'tenants:seed
{class? : The class name of the root seeder}
{--class=Database\\Seeders\\DatabaseSeeder : The class name of the root seeder}
{--database= : The database connection to seed}
{--force : Force the operation to run when in production}';
parent::__construct($resolver);
parent::__construct($resolver);

// Our --tenants/--skip-tenants/--with-pending options only get added automatically
// when the parent command isn't signature-based. Since Laravel 13.24, SeedCommand is,
// so we add them ourselves here -- checking first so we don't add them twice on older
// Laravel versions, where they're already there by this point.
if (! $this->getDefinition()->hasOption('tenants')) {
$this->specifyParameters();
} else {
$this->name = 'tenants:seed';
parent::__construct($resolver);
}
}

protected function configure(): void
{
parent::configure();

// We inherit SeedCommand's name ('db:seed') since we don't redeclare $name/$signature,
// so without this we'd overwrite Laravel's own db:seed command (see #1474). configure()
// always runs after the name is set, regardless of Laravel version, so setting it here
// is safe no matter which of $name/$signature the installed Laravel version uses.
$this->setName('tenants:seed');
}

public function handle(): int
{
foreach (config('tenancy.seeder_parameters') as $parameter => $value) {
Expand Down
12 changes: 12 additions & 0 deletions tests/CommandsTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,9 @@
use Illuminate\Database\DatabaseManager;
use Stancl\Tenancy\Events\TenantCreated;
use Stancl\Tenancy\Events\TenantDeleted;
use Stancl\Tenancy\Commands\Seed;
use Stancl\Tenancy\Tests\Etc\TestSeeder;
use Illuminate\Database\Console\Seeds\SeedCommand;
use Stancl\Tenancy\Events\DeletingTenant;
use Stancl\Tenancy\Events\DatabaseMigrated;
use Stancl\Tenancy\Tests\Etc\ExampleSeeder;
Expand Down Expand Up @@ -288,6 +290,16 @@
});
});

test('tenants:seed does not overwrite db:seed', function () {
$commands = Artisan::all();

expect($commands)->toHaveKey('db:seed')
->and($commands)->toHaveKey('tenants:seed')
->and($commands['db:seed'])->toBeInstanceOf(SeedCommand::class)
->and($commands['db:seed'])->not()->toBeInstanceOf(Seed::class)
->and($commands['tenants:seed'])->toBeInstanceOf(Seed::class);
});

test('database connection is switched to default after running commands', function (bool $initializeTenancy) {
$tenant = Tenant::create();

Expand Down
Loading