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