Skip to content

Commit cf64482

Browse files
authored
Merge pull request #276 from boesing/bugfix/serializer-serializes-token
`Serializer` plugin has to serialize `token` to enable `StorageInterface#checkAndSetItem` comparing the correct values
2 parents 9e63f45 + 74887fb commit cf64482

File tree

3 files changed

+41
-0
lines changed

3 files changed

+41
-0
lines changed

src/Storage/Plugin/Serializer.php

+4
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,10 @@ public function onWriteItemPre(Event $event)
9393
$serializer = $this->getOptions()->getSerializer();
9494
$params = $event->getParams();
9595
$params['value'] = $serializer->serialize($params['value']);
96+
/** Passed by {@see AbstractAdapter::checkAndSetItem()}. Used to compare with the already cached value. */
97+
if (isset($params['token'])) {
98+
$params['token'] = $serializer->serialize($params['token']);
99+
}
96100
}
97101

98102
/**

test/Storage/Adapter/AbstractAdapterTest.php

+22
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
use Laminas\Cache\Storage\Capabilities;
1515
use Laminas\Cache\Storage\Event;
1616
use Laminas\Cache\Storage\Plugin\PluginOptions;
17+
use Laminas\Cache\Storage\Plugin\Serializer;
1718
use Laminas\Cache\Storage\PostEvent;
1819
use Laminas\EventManager\ResponseCollection;
1920
use LaminasTest\Cache\Storage\TestAsset\MockPlugin;
@@ -30,6 +31,7 @@
3031
use function call_user_func_array;
3132
use function count;
3233
use function current;
34+
use function serialize;
3335
use function ucfirst;
3436

3537
final class AbstractAdapterTest extends TestCase
@@ -962,4 +964,24 @@ protected function getMockForAbstractAdapter(array $methods = []): MockObject&Ab
962964

963965
return $adapter;
964966
}
967+
968+
public function testCanCompareOldValueWithTokenWhenUsedWithSerializerPlugin(): void
969+
{
970+
$storage = $this->getMockForAbstractAdapter();
971+
$storage
972+
->addPlugin(new Serializer());
973+
$storage
974+
->expects(self::once())
975+
->method('internalSetItem')
976+
->with('foo', serialize('baz'))
977+
->willReturn(true);
978+
979+
$storage
980+
->expects(self::once())
981+
->method('internalGetItem')
982+
->with('foo')
983+
->willReturn(serialize('bar'));
984+
985+
self::assertTrue($storage->checkAndSetItem('bar', 'foo', 'baz'));
986+
}
965987
}

test/Storage/Plugin/SerializerTest.php

+15
Original file line numberDiff line numberDiff line change
@@ -220,4 +220,19 @@ public function testOnIncrementItemWillAssumeZeroForNonExistingCacheItem(): void
220220

221221
self::assertEquals(10, $plugin->onIncrementItemPre($event));
222222
}
223+
224+
public function testonWriteItemPreSerializesTokenOncePassed(): void
225+
{
226+
$plugin = new Serializer();
227+
$parameters = new ArrayObject([
228+
'key' => 'foo',
229+
'value' => 10,
230+
'token' => 10,
231+
]);
232+
$event = new Event('foo', $this->createMock(StorageInterface::class), $parameters);
233+
234+
$plugin->onWriteItemPre($event);
235+
236+
self::assertSame($parameters['value'], $parameters['token']);
237+
}
223238
}

0 commit comments

Comments
 (0)