mirror of
https://github.com/archtechx/tenancy.git
synced 2026-02-06 05:04:03 +00:00
Refactor cached tenant resolvers with decorator pattern
This commit is contained in:
parent
8e3b74f9d1
commit
97e45ab9cc
15 changed files with 424 additions and 251 deletions
50
tests/Resolvers/CachedTenantResolverTest.php
Normal file
50
tests/Resolvers/CachedTenantResolverTest.php
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
use Illuminate\Cache\Repository;
|
||||
use Illuminate\Contracts\Cache\Store;
|
||||
use Stancl\Tenancy\Contracts\TenantResolver;
|
||||
use Stancl\Tenancy\Resolvers\CachedTenantResolver;
|
||||
use Stancl\Tenancy\Tests\Etc\Tenant;
|
||||
|
||||
it('uses the underlying resolver if cache is stale', function () {
|
||||
$underlying = Mockery::mock(TenantResolver::class);
|
||||
$cache = new Repository($store = Mockery::mock(Store::class));
|
||||
|
||||
$args = [
|
||||
'id' => 1,
|
||||
];
|
||||
|
||||
$resolver = new CachedTenantResolver(
|
||||
tenantResolver: $underlying,
|
||||
cache: $cache,
|
||||
prefix: '_tenant_resolver',
|
||||
);
|
||||
|
||||
$store->expects('get')->withAnyArgs()->andReturnNull();
|
||||
$underlying->expects('resolve')->andReturn($tenant = new Tenant());
|
||||
$store->expects('put')->withSomeOfArgs($tenant);
|
||||
|
||||
expect($resolver->resolve($args))->toBe($tenant);
|
||||
});
|
||||
|
||||
it('skips the underlying resolver if cache is valid', function () {
|
||||
$underlying = Mockery::mock(TenantResolver::class);
|
||||
$cache = new Repository($store = Mockery::mock(Store::class));
|
||||
|
||||
$args = [
|
||||
'id' => 1,
|
||||
];
|
||||
|
||||
$resolver = new CachedTenantResolver(
|
||||
tenantResolver: $underlying,
|
||||
cache: $cache,
|
||||
prefix: '_tenant_resolver',
|
||||
);
|
||||
|
||||
$cache->expects('get')->withAnyArgs()->andReturn($tenant = new Tenant());
|
||||
$underlying->expects('resolve')->never();
|
||||
|
||||
expect($resolver->resolve($args))->toBe($tenant);
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue