From 506e1c615af6f1389179b3677d7f75ed65c3a4ef Mon Sep 17 00:00:00 2001 From: Bilge Date: Wed, 15 Mar 2017 22:35:35 +0000 Subject: [PATCH] Added test for reserved characters in cache keys. --- src/Connector/CachingConnector.php | 2 +- .../Porter/Connector/CachingConnectorTest.php | 21 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/Connector/CachingConnector.php b/src/Connector/CachingConnector.php index 97c5545..dc2edb8 100644 --- a/src/Connector/CachingConnector.php +++ b/src/Connector/CachingConnector.php @@ -76,6 +76,6 @@ public function isCacheEnabled() private function hash(array $structure) { - return str_replace(str_split('{}()/\@:'), '.', json_encode($structure)); + return str_replace(str_split('{}()/\@:'), '.', json_encode($structure, JSON_UNESCAPED_SLASHES)); } } diff --git a/test/Integration/Porter/Connector/CachingConnectorTest.php b/test/Integration/Porter/Connector/CachingConnectorTest.php index 7f3a45c..f69cff1 100644 --- a/test/Integration/Porter/Connector/CachingConnectorTest.php +++ b/test/Integration/Porter/Connector/CachingConnectorTest.php @@ -3,6 +3,7 @@ use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; use Mockery\MockInterface; +use Psr\Cache\CacheItemInterface; use Psr\Cache\CacheItemPoolInterface; use ScriptFUSION\Porter\Cache\MemoryCache; use ScriptFUSION\Porter\Connector\CachingConnector; @@ -88,4 +89,24 @@ public function testEnableCache() $this->connector->enableCache(); self::assertTrue($this->connector->isCacheEnabled()); } + + public function testCacheKeyExcludesReservedCharacters() + { + $reservedCharacters = '{}()/\@:'; + + $this->connector->setCache($cache = \Mockery::spy(CacheItemPoolInterface::class)); + + $cache->shouldReceive('hasItem') + ->andReturnUsing( + function ($key) use ($reservedCharacters) { + foreach (str_split($reservedCharacters) as $reservedCharacter) { + self::assertNotContains($reservedCharacter, $key); + } + } + )->once() + ->shouldReceive('getItem')->andReturnSelf() + ->shouldReceive('set')->andReturn(\Mockery::mock(CacheItemInterface::class)); + + $this->connector->fetch($reservedCharacters, (new TestOptions)->setFoo($reservedCharacters)); + } }