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:
parent
33fcb8a936
commit
e1def355f9
13 changed files with 98 additions and 15 deletions
|
|
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,6 @@ trait DealsWithMigrations
|
||||||
{
|
{
|
||||||
protected function getMigrationPaths()
|
protected function getMigrationPaths()
|
||||||
{
|
{
|
||||||
return [database_path('migrations/tenant')];
|
return [config('tenancy.migrations_directory')];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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()
|
||||||
|
|
|
||||||
|
|
@ -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'),
|
||||||
];
|
];
|
||||||
|
|
|
||||||
|
|
@ -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 */
|
||||||
|
|
|
||||||
20
tests/DatabaseManagerTest.php
Normal file
20
tests/DatabaseManagerTest.php
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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;
|
||||||
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue