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

Fix some tests

This commit is contained in:
Samuel Štancl 2019-09-18 19:48:15 +02:00
parent 1f88a1ff94
commit 12c05c0af6
6 changed files with 53 additions and 95 deletions

View file

@ -56,6 +56,8 @@ return [
'pgsql' => 'Stancl\Tenancy\TenantDatabaseManagers\PostgreSQLDatabaseManager',
],
'bootstrappers' => [
// Tenancy bootstrappers are executed when tenancy is initialized.
// Their responsibility is making Laravel features tenant-aware.
'database' => 'Stancl\Tenancy\TenancyBootstrappers\DatabaseTenancyBootstrapper',
'cache' => 'Stancl\Tenancy\TenancyBootstrappers\CacheTenancyBootstrapper',
'filesystem' => 'Stancl\Tenancy\TenancyBootstrappers\FilesystemTenancyBootstrapper',

View file

@ -42,7 +42,14 @@ class DatabaseStorageDriver implements StorageDriver
public function findById(string $id): Tenant
{
return Tenant::fromStorage(Tenants::find($id)->decoded())
->withDomains(Domains::where('tenant_id', $id)->get()->only('domain')->toArray());
->withDomains($this->getTenantDomains($id));
}
protected function getTenantDomains($id)
{
return Domains::where('tenant_id', $id)->get()->map(function ($model) {
return $model->domain;
})->toArray();
}
public function ensureTenantCanBeCreated(Tenant $tenant): void
@ -107,8 +114,8 @@ class DatabaseStorageDriver implements StorageDriver
*/
public function all(array $ids = []): array
{
return Tenants::getAllTenants($ids)->map(function ($array) {
return Tenant::fromStorage($array)->withDomains([]); // todo domains
return Tenants::getAllTenants($ids)->map(function ($data) {
return Tenant::fromStorage($data)->withDomains($this->getTenantDomains($data['id']));
})->toArray();
}
@ -117,34 +124,34 @@ class DatabaseStorageDriver implements StorageDriver
*
* @return Tenant
*/
protected function tenant()
protected function currentTenant()
{
return $this->tenant ?? $this->app[Tenant::class];
}
public function get(string $key, Tenant $tenant = null)
{
$tenant = $tenant ?? $this->tenant();
$tenant = $tenant ?? $this->currentTenant();
return Tenants::find($tenant->id)->get($key);
}
public function getMany(array $keys, Tenant $tenant = null): array
{
$tenant = $tenant ?? $this->tenant();
$tenant = $tenant ?? $this->currentTenant();
return Tenants::find($tenant->id)->getMany($keys);
}
public function put(string $key, $value, Tenant $tenant = null): void
{
$tenant = $tenant ?? $this->tenant();
$tenant = $tenant ?? $this->currentTenant();
Tenants::find($tenant->id)->put($key, $value);
}
public function putMany(array $kvPairs, Tenant $tenant = null): void
{
$tenant = $tenant ?? $this->tenant();
$tenant = $tenant ?? $this->currentTenant();
Tenants::find($tenant->id)->putMany($kvPairs);
}
}

View file

@ -81,8 +81,8 @@ class TenantModel extends Model
public function getMany(array $keys): array
{
return array_reduce($keys, function ($result, $key) {
$result[$key] = $this->get[$key];
return array_reduce($keys, function ($result, $key) { // todo2 performance
$result[$key] = $this->get($key);
return $result;
}, []);
@ -105,7 +105,7 @@ class TenantModel extends Model
public function putMany(array $kvPairs)
{
$customColumns = [];
$jsonObj = json_decode($this->{$this->customColumns()});
$jsonObj = json_decode($this->{$this->dataColumn()});
foreach ($kvPairs as $key => $value) {
if (in_array($key, $this->customColumns())) {

View file

@ -85,7 +85,7 @@ class Tenant implements ArrayAccess
protected function persisted($persisted = null)
{
if (gettype($persisted) === 'bool') {
if (gettype($persisted) === 'boolean') {
$this->persisted = $persisted;
return $this;
@ -94,6 +94,11 @@ class Tenant implements ArrayAccess
return $this;
}
public function isPersisted(): bool
{
return $this->persisted;
}
/**
* Assign domains to the tenant.
*

View file

@ -16,20 +16,11 @@ class TenantManagerTest extends TestCase
/** @test */
public function current_tenant_can_be_retrieved_using_getTenant()
{
$tenant = Tenant::new()->withDomains(['localhost'])->save();
$tenant = Tenant::new()->withDomains(['test2.localhost'])->save();
tenancy()->init('test.localhost');
tenancy()->init('test2.localhost');
$this->assertSame($tenant, tenancy()->getTenant());
}
/** @test */
public function invoke_works()
{
Tenant::new()->withDomains(['foo.localhost'])->save();
tenancy()->init('foo.localhost');
$this->assertSame(tenant('id'), tenant()('id'));
$this->assertEquals($tenant, tenancy()->getTenant());
}
/** @test */
@ -37,11 +28,11 @@ class TenantManagerTest extends TestCase
{
$tenant = Tenant::new()->withDomains(['foo.localhost'])->save();
$this->assertNotSame($tenant, tenancy()->getTenant());
$this->assertNotEquals($tenant, tenancy()->getTenant());
tenancy()->initById($tenant['id']);
$this->assertSame($tenant, tenancy()->getTenant());
$this->assertEquals($tenant, tenancy()->getTenant());
}
/** @test */
@ -49,14 +40,7 @@ class TenantManagerTest extends TestCase
{
$tenant = Tenant::new()->withDomains(['foo.localhost'])->save();
$this->assertSame($tenant, tenancy()->findByDomain('foo.localhost'));
}
/** @test */
public function getIdByDomain_works()
{
$tenant = Tenant::new()->withDomains(['foo.localhost'])->save();
$this->assertSame(tenant()->getTenantIdByDomain('foo.localhost'), tenancy()->getIdByDomain('foo.localhost'));
$this->assertEquals($tenant, tenancy()->findByDomain('foo.localhost'));
}
/** @test */
@ -65,7 +49,7 @@ class TenantManagerTest extends TestCase
Tenant::new()->withDomains(['dev.localhost'])->save();
tenancy()->init('dev.localhost');
$this->assertSame(tenant(), tenancy()->find(tenant('id')));
$this->assertEquals(tenant(), tenancy()->find(tenant('id')));
}
/** @test */
@ -161,11 +145,9 @@ class TenantManagerTest extends TestCase
public function tenant_can_be_deleted()
{
$tenant = Tenant::new()->withDomains(['foo.localhost'])->save();
tenant()->delete($tenant['id']);
$this->assertSame([], tenancy()->all()->toArray());
$tenant = Tenant::new()->withDomains(['foo.localhost'])->save();
$this->assertSame([$tenant], tenancy()->all()->toArray());
$this->assertEquals([$tenant], tenancy()->all()->toArray());
$tenant->delete();
$this->assertEquals([], tenancy()->all()->toArray());
}
/** @test */
@ -173,7 +155,7 @@ class TenantManagerTest extends TestCase
{
$tenant1 = Tenant::new()->withDomains(['foo.localhost'])->save();
$tenant2 = Tenant::new()->withDomains(['bar.localhost'])->save();
$this->assertEqualsCanonicalizing([$tenant1, $tenant2], tenancy()->all()->toArray());
$this->assertEquals([$tenant1, $tenant2], tenancy()->all()->toArray());
}
/** @test */

View file

@ -5,7 +5,7 @@ declare(strict_types=1);
namespace Stancl\Tenancy\Tests;
use Stancl\Tenancy\StorageDrivers\Database\TenantModel;
use Stancl\Tenancy\StorageDrivers\DatabaseStorageDriver;
use Stancl\Tenancy\StorageDrivers\Database\DatabaseStorageDriver;
use Stancl\Tenancy\StorageDrivers\RedisStorageDriver;
use Stancl\Tenancy\Tenant;
@ -15,12 +15,17 @@ class TenantStorageTest extends TestCase
public function deleting_a_tenant_works()
{
$abc = Tenant::new()->withDomains(['abc.localhost'])->save();
$exists = function () use ($abc) {
return tenancy()->all()->reduce(function ($result, $tenant) use ($abc) {
return $result ?: $tenant->id === $abc->id;
}, false);
};
$this->assertTrue(tenancy()->all()->contains($abc));
$this->assertTrue($exists());
$abc->delete();
$this->assertFalse(tenancy()->all()->contains($abc));
$this->assertFalse($exists());
}
/** @test */
@ -44,11 +49,11 @@ class TenantStorageTest extends TestCase
{
$keys = ['foo', 'abc'];
$vals = ['bar', 'xyz'];
$data = \array_combine($keys, $vals);
$data = array_combine($keys, $vals);
tenant()->put($data);
$this->assertSame($vals, tenant()->get($keys));
$this->assertSame($data, tenant()->get($keys));
}
/** @test */
@ -59,35 +64,6 @@ class TenantStorageTest extends TestCase
$this->assertSame('bar', tenancy()->getTenant('foo'));
}
/** @test */
public function put_works_on_a_tenant_different_than_the_current_one_when_two_args_are_used()
{
$tenant = Tenant::new()->withDomains(['second.localhost'])->save();
$id = $tenant['id'];
tenant()->put('foo', 'bar', $id);
$this->assertSame('bar', tenant()->get('foo', $id));
$this->assertNotSame('bar', tenant('foo'));
}
/** @test */
public function put_works_on_a_tenant_different_than_the_current_one_when_a_single_arg_is_used()
{
$tenant = Tenant::new()->withDomains(['second.localhost'])->save();
$id = $tenant['id'];
$keys = ['foo', 'abc'];
$vals = ['bar', 'xyz'];
$data = \array_combine($keys, $vals);
tenant()->put($data, null, $id);
$this->assertSame($vals, tenant()->get($keys, $id));
$this->assertNotSame($vals, tenant()->get($keys));
$this->assertFalse(\array_intersect($data, tenant()->tenant) == $data); // assert array not subset
}
/** @test */
public function arrays_can_be_stored()
{
@ -105,20 +81,6 @@ class TenantStorageTest extends TestCase
$this->assertSame($data, tenant()->get('foo'));
}
/** @test */
public function put_returns_the_value_when_two_arguments_are_used()
{
$this->assertSame('bar', tenant()->put('foo', 'bar'));
}
/** @test */
public function put_returns_the_key_value_pairs_when_a_single_argument_is_used()
{
$value = ['foo' => 'bar', 'abc' => 'xyz'];
$this->assertSame($value, tenant()->put($value));
}
/** @test */
public function correct_storage_driver_is_used()
{
@ -134,19 +96,19 @@ class TenantStorageTest extends TestCase
{
tenant()->put('someBool', false);
$this->assertSame('boolean', \gettype(tenant()->get('someBool')));
$this->assertSame('boolean', \gettype(tenant()->get(['someBool'])[0]));
$this->assertSame('boolean', \gettype(tenant()->get(['someBool'])['someBool']));
tenant()->put('someInt', 5);
$this->assertSame('integer', \gettype(tenant()->get('someInt')));
$this->assertSame('integer', \gettype(tenant()->get(['someInt'])[0]));
$this->assertSame('integer', \gettype(tenant()->get(['someInt'])['someInt']));
tenant()->put('someDouble', 11.40);
$this->assertSame('double', \gettype(tenant()->get('someDouble')));
$this->assertSame('double', \gettype(tenant()->get(['someDouble'])[0]));
$this->assertSame('double', \gettype(tenant()->get(['someDouble'])['someDouble']));
tenant()->put('string', 'foo');
$this->assertSame('string', \gettype(tenant()->get('string')));
$this->assertSame('string', \gettype(tenant()->get(['string'])[0]));
$this->assertSame('string', \gettype(tenant()->get(['string'])['string']));
}
/** @test */
@ -164,12 +126,12 @@ class TenantStorageTest extends TestCase
tenant()->put('foo', 'bar');
$this->assertSame('bar', tenant()->get('foo'));
$this->assertSame(['bar'], tenant()->get(['foo']));
$this->assertSame(['foo' => 'bar'], tenant()->get(['foo']));
tenancy()->endTenancy();
tenancy()->init('foo.localhost');
$this->assertSame('bar', tenant()->get('foo'));
$this->assertSame(['bar'], tenant()->get(['foo']));
$this->assertSame(['foo' => 'bar'], tenant()->get(['foo']));
}
/** @test */