1
0
Fork 0
mirror of https://github.com/archtechx/tenancy.git synced 2025-12-12 18:04:03 +00:00

Add command tests

This commit is contained in:
Samuel Štancl 2019-02-09 11:53:48 +01:00
parent 33fcb8a936
commit e1def355f9
13 changed files with 98 additions and 15 deletions

View file

@ -7,7 +7,6 @@ use Stancl\Tenancy\DatabaseManager;
use Illuminate\Database\Migrations\Migrator; use Illuminate\Database\Migrations\Migrator;
use Stancl\Tenancy\Traits\HasATenantsOption; use Stancl\Tenancy\Traits\HasATenantsOption;
use Stancl\Tenancy\Traits\DealsWithMigrations; use Stancl\Tenancy\Traits\DealsWithMigrations;
use Symfony\Component\Console\Input\InputOption;
use Illuminate\Database\Console\Migrations\MigrateCommand; use Illuminate\Database\Console\Migrations\MigrateCommand;
class Migrate extends MigrateCommand class Migrate extends MigrateCommand
@ -57,5 +56,7 @@ class Migrate extends MigrateCommand
// Migrate // Migrate
parent::handle(); parent::handle();
}); });
$this->database->disconnect();
} }
} }

View file

@ -7,7 +7,6 @@ use Stancl\Tenancy\DatabaseManager;
use Illuminate\Database\Migrations\Migrator; use Illuminate\Database\Migrations\Migrator;
use Stancl\Tenancy\Traits\HasATenantsOption; use Stancl\Tenancy\Traits\HasATenantsOption;
use Stancl\Tenancy\Traits\DealsWithMigrations; use Stancl\Tenancy\Traits\DealsWithMigrations;
use Symfony\Component\Console\Input\InputOption;
use Illuminate\Database\Console\Migrations\RollbackCommand; use Illuminate\Database\Console\Migrations\RollbackCommand;
class Rollback extends RollbackCommand class Rollback extends RollbackCommand

View file

@ -6,7 +6,6 @@ use Illuminate\Console\Command;
use Stancl\Tenancy\DatabaseManager; use Stancl\Tenancy\DatabaseManager;
use Stancl\Tenancy\Traits\HasATenantsOption; use Stancl\Tenancy\Traits\HasATenantsOption;
use Illuminate\Database\Migrations\Migrator; use Illuminate\Database\Migrations\Migrator;
use Symfony\Component\Console\Input\InputOption;
use Illuminate\Database\Console\Seeds\SeedCommand; use Illuminate\Database\Console\Seeds\SeedCommand;
use Illuminate\Database\ConnectionResolverInterface; use Illuminate\Database\ConnectionResolverInterface;

View file

@ -9,8 +9,11 @@ use Illuminate\Database\DatabaseManager as BaseDatabaseManager;
class DatabaseManager class DatabaseManager
{ {
public $originalDefaultConnection;
public function __construct(BaseDatabaseManager $database) public function __construct(BaseDatabaseManager $database)
{ {
$this->originalDefaultConnection = config('database.default');
$this->database = $database; $this->database = $database;
} }
@ -28,8 +31,9 @@ class DatabaseManager
public function disconnect() public function disconnect()
{ {
$this->database->reconnect('default'); $default_connection = $this->originalDefaultConnection;
$this->database->setDefaultConnection('default'); $this->database->reconnect($default_connection);
$this->database->setDefaultConnection($default_connection);
} }
public function create(string $name, string $driver = null) public function create(string $name, string $driver = null)

View file

@ -170,6 +170,16 @@ class TenantManager
return $tenant; return $tenant;
} }
/**
* Reconnects to the default database.
*
* @return void
*/
public function disconnectDatabase()
{
$this->database->disconnect();
}
/** /**
* Get all tenants. * Get all tenants.
* *

View file

@ -8,7 +8,7 @@ use Illuminate\Support\Facades\Storage;
trait BootstrapsTenancy trait BootstrapsTenancy
{ {
public $oldStoragePaths = []; public $originalSettings = [];
public function bootstrap() public function bootstrap()
{ {
@ -41,7 +41,7 @@ trait BootstrapsTenancy
public function suffixFilesystemRootPaths() public function suffixFilesystemRootPaths()
{ {
$old = $this->oldStoragePaths ?: [ $old = $this->originalSettings ?: [
"storage_disks" => [], "storage_disks" => [],
"storage_path" => $this->app->storagePath(), "storage_path" => $this->app->storagePath(),
]; ];
@ -64,6 +64,6 @@ trait BootstrapsTenancy
$old['storage_disks'][$disk] = $root; $old['storage_disks'][$disk] = $root;
} }
$this->oldStoragePaths = $old; $this->originalSettings = $old;
} }
} }

View file

@ -6,6 +6,6 @@ trait DealsWithMigrations
{ {
protected function getMigrationPaths() protected function getMigrationPaths()
{ {
return [database_path('migrations/tenant')]; return [config('tenancy.migrations_directory')];
} }
} }

View file

@ -2,6 +2,8 @@
namespace Stancl\Tenancy\Traits; namespace Stancl\Tenancy\Traits;
use Symfony\Component\Console\Input\InputOption;
trait HasATenantsOption trait HasATenantsOption
{ {
protected function getOptions() protected function getOptions()

View file

@ -41,4 +41,5 @@ return [
], ],
'queue_database_creation' => false, 'queue_database_creation' => false,
'queue_database_deletion' => false, 'queue_database_deletion' => false,
'migrations_directory' => database_path('migrations/tenant'),
]; ];

View file

@ -2,18 +2,65 @@
namespace Stancl\Tenancy\Tests; namespace Stancl\Tenancy\Tests;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\Schema;
class CommandsTest extends TestCase class CommandsTest extends TestCase
{ {
/** @test */ public $autoInitTenancy = false;
public function migrate_command_works()
public function setUp()
{ {
$this->markTestIncomplete(); parent::setUp();
config(['tenancy.migrations_directory' => database_path('../migrations')]);
}
/** @test */
public function migrate_command_doesnt_change_the_db_connection()
{
$old_connection_name = app(\Illuminate\Database\DatabaseManager::class)->connection()->getName();
Artisan::call('tenants:migrate');
$new_connection_name = app(\Illuminate\Database\DatabaseManager::class)->connection()->getName();
$this->assertEquals($old_connection_name, $new_connection_name);
$this->assertNotEquals('tenant', $new_connection_name);
}
/** @test */
public function migrate_command_works_without_options()
{
Artisan::call('tenants:migrate');
$this->assertFalse(Schema::hasTable('users'));
tenancy()->init();
$this->assertTrue(Schema::hasTable('users'));
}
/** @test */
public function migrate_command_works_with_tenants_option()
{
$tenant = tenant()->create('test.localhost');
Artisan::call('tenants:migrate', [
'--tenants' => [$tenant['uuid']]
]);
$this->assertFalse(Schema::hasTable('users'));
tenancy()->init();
$this->assertFalse(Schema::hasTable('users'));
tenancy()->init('test.localhost');
$this->assertTrue(Schema::hasTable('users'));
} }
/** @test */ /** @test */
public function rollback_command_works() public function rollback_command_works()
{ {
$this->markTestIncomplete(); Artisan::call('tenants:migrate');
$this->assertFalse(Schema::hasTable('users'));
tenancy()->init();
$this->assertTrue(Schema::hasTable('users'));
Artisan::call('tenants:rollback');
$this->assertFalse(Schema::hasTable('users'));
} }
/** @test */ /** @test */

View file

@ -0,0 +1,20 @@
<?php
namespace Stancl\Tenancy\Tests;
class DatabaseManagerTest extends TestCase
{
public $autoInitTenancy = false;
/** @test */
public function disconnect_method_works()
{
$old_connection_name = app(\Illuminate\Database\DatabaseManager::class)->connection()->getName();
tenancy()->init();
tenancy()->disconnectDatabase();
$new_connection_name = app(\Illuminate\Database\DatabaseManager::class)->connection()->getName();
$this->assertSame($old_connection_name, $new_connection_name);
$this->assertNotEquals('tenant', $new_connection_name);
}
}

View file

@ -1,6 +1,6 @@
<?php <?php
namespace Stancl\Tenancy\Tests; namespace Stancl\Tenancy\Tests\Etc;
use Illuminate\Foundation\Http\Kernel; use Illuminate\Foundation\Http\Kernel;

View file

@ -88,7 +88,7 @@ abstract class TestCase extends \Orchestra\Testbench\TestCase
*/ */
protected function resolveApplicationHttpKernel($app) protected function resolveApplicationHttpKernel($app)
{ {
$app->singleton('Illuminate\Contracts\Http\Kernel', HttpKernel::class); $app->singleton('Illuminate\Contracts\Http\Kernel', Etc\HttpKernel::class);
} }
public function randomString(int $length = 10) public function randomString(int $length = 10)