'mysql']); Event::listen(TenantCreated::class, JobPipeline::make([CreateDatabase::class])->send(function (TenantCreated $event) { return $event->tenant; })->toListener()); $tenant = Tenant::create(); $manager = app(MySQLDatabaseManager::class); $manager->setConnection('mysql'); $this->assertTrue($manager->databaseExists($tenant->database()->getName())); }); test('database can be migrated after tenant creation', function () { Event::listen(TenantCreated::class, JobPipeline::make([ CreateDatabase::class, MigrateDatabase::class, ])->send(function (TenantCreated $event) { return $event->tenant; })->toListener()); $tenant = Tenant::create(); $tenant->run(function () { $this->assertTrue(Schema::hasTable('users')); }); }); test('database can be seeded after tenant creation', function () { config(['tenancy.seeder_parameters' => [ '--class' => TestSeeder::class, ]]); Event::listen(TenantCreated::class, JobPipeline::make([ CreateDatabase::class, MigrateDatabase::class, SeedDatabase::class, ])->send(function (TenantCreated $event) { return $event->tenant; })->toListener()); $tenant = Tenant::create(); $tenant->run(function () { $this->assertSame('Seeded User', User::first()->name); }); }); test('custom job can be added to the pipeline', function () { config(['tenancy.seeder_parameters' => [ '--class' => TestSeeder::class, ]]); Event::listen(TenantCreated::class, JobPipeline::make([ CreateDatabase::class, MigrateDatabase::class, SeedDatabase::class, CreateSuperuser::class, ])->send(function (TenantCreated $event) { return $event->tenant; })->toListener()); $tenant = Tenant::create(); $tenant->run(function () { $this->assertSame('Foo', User::all()[1]->name); }); }); // Helpers /** * Run the database seeds. * * @return void */ function run() { DB::table('users')->insert([ 'name' => 'Seeded User', 'email' => 'seeded@user', 'password' => bcrypt('password'), ]); } function __construct(Tenant $tenant) { test()->tenant = $tenant; } function handle() { test()->tenant->run(function () { User::create(['name' => 'Foo', 'email' => 'foo@bar.com', 'password' => 'secret']); }); }