mockFetcher = $this ->getMockBuilder('Google\Auth\FetchAuthTokenInterface') ->getMock(); $this->mockCacheItem = $this ->getMockBuilder('Psr\Cache\CacheItemInterface') ->getMock(); $this->mockCache = $this ->getMockBuilder('Psr\Cache\CacheItemPoolInterface') ->getMock(); } public function testSuccessfullyPullsFromCache() { $expectedValue = '1234'; $this->mockCacheItem ->expects($this->once()) ->method('isHit') ->will($this->returnValue(true)); $this->mockCacheItem ->expects($this->once()) ->method('get') ->will($this->returnValue($expectedValue)); $this->mockCache ->expects($this->once()) ->method('getItem') ->will($this->returnValue($this->mockCacheItem)); $implementation = new CacheTraitImplementation([ 'cache' => $this->mockCache, ]); $cachedValue = $implementation->gCachedValue(); $this->assertEquals($expectedValue, $cachedValue); } public function testSuccessfullyPullsFromCacheWithInvalidKey() { $key = 'this-key-has-@-illegal-characters'; $expectedKey = 'thiskeyhasillegalcharacters'; $expectedValue = '1234'; $this->mockCacheItem ->expects($this->once()) ->method('isHit') ->will($this->returnValue(true)); $this->mockCacheItem ->expects($this->once()) ->method('get') ->will($this->returnValue($expectedValue)); $this->mockCache ->expects($this->once()) ->method('getItem') ->with($expectedKey) ->will($this->returnValue($this->mockCacheItem)); $implementation = new CacheTraitImplementation([ 'cache' => $this->mockCache, 'key' => $key, ]); $cachedValue = $implementation->gCachedValue(); $this->assertEquals($expectedValue, $cachedValue); } public function testSuccessfullyPullsFromCacheWithLongKey() { $key = 'this-key-is-over-64-characters-and-it-will-still-work' . '-but-it-will-be-hashed-and-shortened'; $expectedKey = str_replace('-', '', $key); $expectedKey = substr(hash('sha256', $expectedKey), 0, 64); $expectedValue = '1234'; $this->mockCacheItem ->expects($this->once()) ->method('isHit') ->will($this->returnValue(true)); $this->mockCacheItem ->expects($this->once()) ->method('get') ->will($this->returnValue($expectedValue)); $this->mockCache ->expects($this->once()) ->method('getItem') ->with($expectedKey) ->will($this->returnValue($this->mockCacheItem)); $implementation = new CacheTraitImplementation([ 'cache' => $this->mockCache, 'key' => $key ]); $cachedValue = $implementation->gCachedValue(); $this->assertEquals($expectedValue, $cachedValue); } public function testFailsPullFromCacheWithNoCache() { $implementation = new CacheTraitImplementation(); $cachedValue = $implementation->gCachedValue(); $this->assertEquals(null, $cachedValue); } public function testFailsPullFromCacheWithoutKey() { $implementation = new CacheTraitImplementation([ 'cache' => $this->mockCache, 'key' => null, ]); $cachedValue = $implementation->gCachedValue(); } public function testSuccessfullySetsToCache() { $value = '1234'; $this->mockCacheItem ->expects($this->once()) ->method('set') ->with($value); $this->mockCache ->expects($this->once()) ->method('getItem') ->with($this->equalTo('key')) ->will($this->returnValue($this->mockCacheItem)); $implementation = new CacheTraitImplementation([ 'cache' => $this->mockCache, ]); $implementation->sCachedValue($value); } public function testFailsSetToCacheWithNoCache() { $implementation = new CacheTraitImplementation(); $implementation->sCachedValue('1234'); $cachedValue = $implementation->sCachedValue('1234'); $this->assertNull($cachedValue); } public function testFailsSetToCacheWithoutKey() { $implementation = new CacheTraitImplementation([ 'cache' => $this->mockCache, 'key' => null, ]); $cachedValue = $implementation->sCachedValue('1234'); $this->assertNull($cachedValue); } } class CacheTraitImplementation { use CacheTrait; private $cache; private $cacheConfig; public function __construct(array $config = []) { $this->key = array_key_exists('key', $config) ? $config['key'] : 'key'; $this->cache = isset($config['cache']) ? $config['cache'] : null; $this->cacheConfig = [ 'prefix' => '', 'lifetime' => 1000, ]; } // allows us to keep trait methods private public function gCachedValue() { return $this->getCachedValue($this->key); } public function sCachedValue($v) { $this->setCachedValue($this->key, $v); } }