1
0
Fork 0
mirror of https://github.com/archtechx/tenancy.git synced 2025-12-12 21:54: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', 'pgsql' => 'Stancl\Tenancy\TenantDatabaseManagers\PostgreSQLDatabaseManager',
], ],
'bootstrappers' => [ 'bootstrappers' => [
// Tenancy bootstrappers are executed when tenancy is initialized.
// Their responsibility is making Laravel features tenant-aware.
'database' => 'Stancl\Tenancy\TenancyBootstrappers\DatabaseTenancyBootstrapper', 'database' => 'Stancl\Tenancy\TenancyBootstrappers\DatabaseTenancyBootstrapper',
'cache' => 'Stancl\Tenancy\TenancyBootstrappers\CacheTenancyBootstrapper', 'cache' => 'Stancl\Tenancy\TenancyBootstrappers\CacheTenancyBootstrapper',
'filesystem' => 'Stancl\Tenancy\TenancyBootstrappers\FilesystemTenancyBootstrapper', 'filesystem' => 'Stancl\Tenancy\TenancyBootstrappers\FilesystemTenancyBootstrapper',

View file

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

View file

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

View file

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

View file

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

View file

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