Skip to content
This repository was archived by the owner on Jan 29, 2020. It is now read-only.
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Less refs in serializer plugin
  • Loading branch information
marc-mabe committed Apr 19, 2016
commit fe39e3965fd3539710fbb16c15ab279a8413ba38
9 changes: 2 additions & 7 deletions src/Storage/Plugin/Serializer.php
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,7 @@ public function onReadItemPost(PostEvent $event)
$result = $event->getResult();
if ($result !== null) {
$serializer = $this->getOptions()->getSerializer();
$result = $serializer->unserialize($result);
$event->setResult($result);
$event->setResult($serializer->unserialize($result));
}
}

Expand All @@ -84,11 +83,7 @@ public function onReadItemPost(PostEvent $event)
public function onReadItemsPost(PostEvent $event)
{
$serializer = $this->getOptions()->getSerializer();
$result = $event->getResult();
foreach ($result as &$value) {
$value = $serializer->unserialize($value);
}
$event->setResult($result);
$event->setResult(array_map([$serializer, 'unserialize'], $event->getResult()));
}

/**
Expand Down
76 changes: 62 additions & 14 deletions test/Storage/Plugin/SerializerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,9 @@
namespace ZendTest\Cache\Storage\Plugin;

use ArrayObject;
use stdClass;
use Zend\Cache;
use Zend\Cache\Storage\Capabilities;
use Zend\Cache\Storage\Event;
use Zend\Cache\Storage\PostEvent;
use Zend\EventManager\Test\EventListenerIntrospectionTrait;
Expand Down Expand Up @@ -95,38 +97,53 @@ public function testRemovePlugin()
$this->assertEquals(0, count($this->getEventsFromEventManager($this->_adapter->getEventManager())));
}

public function testUnserializeOnReadItem()
public function testSerializeOnWriteItemPre()
{
$args = new ArrayObject([
'key' => 'test',
'success' => true,
'casToken' => null,
]);
$value = serialize(123);
$event = new PostEvent('getItem.post', $this->_adapter, $args, $value);
$key = 'testKey';
$value = 123;
$valueSer = serialize($value);

$args = new ArrayObject(['key' => $key, 'value' => $value]);
$event = new Event('setItem.pre', $this->_adapter, $args);
$this->_plugin->onWriteItemPre($event);

$this->assertFalse($event->propagationIsStopped(), 'Event propagation has been stopped');
$this->assertSame($valueSer, $event->getParam('value'), 'Value was not serialized');
$this->assertSame($key, $event->getParam('key'), 'Missing or changed key');
}

public function testUnserializeOnReadItemPost()
{
$key = 'testKey';
$value = 123;
$valueSer = serialize($value);

$args = new ArrayObject(['key' => $key, 'success' => true, 'casToken' => null]);
$event = new PostEvent('getItem.post', $this->_adapter, $args, $valueSer);
$this->_plugin->onReadItemPost($event);

$this->assertFalse($event->propagationIsStopped(), 'Event propagation has been stopped');
$this->assertSame(123, $event->getResult(), 'Result was not unserialized');
$this->assertSame($value, $event->getResult(), 'Result was not unserialized');
}

public function testDontUnserializeOnReadMissingItem()
public function testDontUnserializeOnReadMissingItemPost()
{
$args = new ArrayObject(['key' => 'test']);
$value = null;
$key = 'testKey';
$value = null;

$args = new ArrayObject(['key' => $key]);
$event = new PostEvent('getItem.post', $this->_adapter, $args, $value);
$this->_plugin->onReadItemPost($event);

$this->assertFalse($event->propagationIsStopped(), 'Event propagation has been stopped');
$this->assertSame($value, $event->getResult(), 'Missing item was unserialized');
}

public function testUnserializeOnReadItems()
public function testUnserializeOnReadItemsPost()
{
$values = ['key1' => serialize(123), 'key2' => serialize(456)];
$args = new ArrayObject(['keys' => array_keys($values) + ['missing']]);
$event = new PostEvent('getItems.post', $this->_adapter, $args, $values);

$this->_plugin->onReadItemsPost($event);

$this->assertFalse($event->propagationIsStopped(), 'Event propagation has been stopped');
Expand All @@ -136,4 +153,35 @@ public function testUnserializeOnReadItems()
$this->assertSame(456, $values['key2'], "Item 'key2' was not unserialized");
$this->assertArrayNotHasKey('missing', $values, 'Missing item should not be present in the result');
}

public function testOnGetCapabilitiesPostOverwritesSupportedDatatypes()
{
$baseCapabilities = new Capabilities($this->_adapter, new stdClass, [
'supportedDatatypes' => [
'NULL' => false,
'boolean' => false,
'integer' => false,
'double' => false,
'string' => true,
'array' => false,
'object' => false,
'resource' => true,
]
]);

$event = new PostEvent('getCapabilities.post', $this->_adapter, new ArrayObject(), $baseCapabilities);
$this->_plugin->onGetCapabilitiesPost($event);

$this->assertFalse($event->propagationIsStopped(), 'Event propagation has been stopped');
$this->assertSame([
'NULL' => true,
'boolean' => true,
'integer' => true,
'double' => true,
'string' => true,
'array' => true,
'object' => 'object',
'resource' => false,
], $event->getResult()->getSupportedDatatypes(), 'Unexpected supported datatypes');
}
}