1
0
Fork 0
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:
Erik Gaal 2022-09-24 20:15:47 +02:00
parent 8e3b74f9d1
commit 97e45ab9cc
No known key found for this signature in database
GPG key ID: 8733B288F439A599
15 changed files with 424 additions and 251 deletions

View 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);
});