From d0b172925853fb64e934018148db0060e518a5cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20=C5=A0tancl?= Date: Mon, 30 Sep 2019 17:01:01 +0200 Subject: [PATCH] [2.x] Migrate fresh (#148) * Remove comment * migrate-fresh first draft * Final * DB name -> DB connection * Add array_filter for consistency with Laravel * Add test for migrate-fresh * Apply fixes from StyleCI --- src/Commands/MigrateFresh.php | 62 ++++++++++++++++++++++++++++++++++ src/TenancyServiceProvider.php | 1 + tests/CommandsTest.php | 18 ++++++++++ 3 files changed, 81 insertions(+) create mode 100644 src/Commands/MigrateFresh.php diff --git a/src/Commands/MigrateFresh.php b/src/Commands/MigrateFresh.php new file mode 100644 index 00000000..6a31e888 --- /dev/null +++ b/src/Commands/MigrateFresh.php @@ -0,0 +1,62 @@ +setName('tenants:migrate-fresh'); + } + + /** + * Execute the console command. + * + * @return mixed + */ + public function handle() + { + $originalTenant = tenancy()->getTenant(); + $this->info('Dropping tables.'); + + tenancy()->all($this->option('tenants'))->each(function ($tenant) { + $this->line("Tenant: {$tenant->id}"); + + tenancy()->initialize($tenant); + + $this->call('db:wipe', array_filter([ + '--database' => $tenant->getConnectionName(), + '--force' => true, + ])); + + $this->call('tenants:migrate', [ + '--tenants' => [$tenant->id], + ]); + + tenancy()->end(); + }); + + $this->info('Done.'); + + if ($originalTenant) { + tenancy()->initialize($originalTenant); + } + } +} diff --git a/src/TenancyServiceProvider.php b/src/TenancyServiceProvider.php index c70c5418..0e847c4b 100644 --- a/src/TenancyServiceProvider.php +++ b/src/TenancyServiceProvider.php @@ -65,6 +65,7 @@ class TenancyServiceProvider extends ServiceProvider Commands\Migrate::class, Commands\Rollback::class, Commands\TenantList::class, + Commands\MigrateFresh::class, ]); $this->publishes([ diff --git a/tests/CommandsTest.php b/tests/CommandsTest.php index d7ffb3cd..1fdf9801 100644 --- a/tests/CommandsTest.php +++ b/tests/CommandsTest.php @@ -138,4 +138,22 @@ class CommandsTest extends TestCase $this->assertDirectoryExists(database_path('migrations/tenant')); $this->assertSame(file_get_contents(__DIR__ . '/Etc/modifiedHttpKernel.stub'), file_get_contents(app_path('Http/Kernel.php'))); } + + /** @test */ + public function migrate_fresh_command_works() + { + $this->assertFalse(Schema::hasTable('users')); + Artisan::call('tenants:migrate-fresh'); + $this->assertFalse(Schema::hasTable('users')); + tenancy()->init('test.localhost'); + $this->assertTrue(Schema::hasTable('users')); + + $this->assertFalse(DB::table('users')->exists()); + DB::table('users')->insert(['name' => 'xxx', 'password' => bcrypt('password'), 'email' => 'foo@bar.xxx']); + $this->assertTrue(DB::table('users')->exists()); + + // test that db is wiped + Artisan::call('tenants:migrate-fresh'); + $this->assertFalse(DB::table('users')->exists()); + } }