'Array']); $this->engine = Cache::pool('queryCache'); Cache::enable(); } /** * Teardown method */ public function tearDown(): void { parent::tearDown(); Cache::drop('queryCache'); } /** * Test fetching with a function to generate the key. */ public function testFetchFunctionKey(): void { $this->engine->set('my_key', 'A winner'); $query = new stdClass(); $cacher = new QueryCacher(function ($q) use ($query) { $this->assertSame($query, $q); return 'my_key'; }, 'queryCache'); $result = $cacher->fetch($query); $this->assertSame('A winner', $result); } /** * Test fetching with a function to generate the key but the function is poop. */ public function testFetchFunctionKeyNoString(): void { $this->expectException(CakeException::class); $this->expectExceptionMessage('Cache key functions must return a string. Got false.'); $this->engine->set('my_key', 'A winner'); $query = new stdClass(); $cacher = new QueryCacher(function ($q) { return false; }, 'queryCache'); $cacher->fetch($query); } /** * Test fetching with a cache instance. */ public function testFetchCacheHitStringEngine(): void { $this->engine->set('my_key', 'A winner'); $cacher = new QueryCacher('my_key', 'queryCache'); $query = new stdClass(); $result = $cacher->fetch($query); $this->assertSame('A winner', $result); } /** * Test fetching with a cache hit. */ public function testFetchCacheHit(): void { $this->engine->set('my_key', 'A winner'); $cacher = new QueryCacher('my_key', $this->engine); $query = new stdClass(); $result = $cacher->fetch($query); $this->assertSame('A winner', $result); } /** * Test fetching with a cache miss. */ public function testFetchCacheMiss(): void { $this->engine->set('my_key', false); $cacher = new QueryCacher('my_key', $this->engine); $query = new stdClass(); $result = $cacher->fetch($query); $this->assertNull($result, 'Cache miss should not have an isset() return.'); } }