Skip to content

Commit 1eacfa2

Browse files
committed
add tests for php serializer.
1 parent c38b943 commit 1eacfa2

File tree

2 files changed

+101
-8
lines changed

2 files changed

+101
-8
lines changed

pkg/enqueue-bundle/Events/PhpSerializerEventTransformer.php

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,7 @@ class PhpSerializerEventTransformer implements EventTransformer
1414
*/
1515
public function toMessage($eventName, Event $event = null)
1616
{
17-
if (version_compare(Kernel::VERSION, '3.0', '<')) {
18-
throw new \LogicException(
19-
'This transformer does not work on Symfony prior 3.0. '.
20-
'The event contains eventDispatcher and therefor could not be serialized. '.
21-
'You have to register a transformer for every async event. '.
22-
'Read the doc: https://github.com/php-enqueue/enqueue-dev/blob/master/docs/bundle/async_events.md#event-transformer'
23-
);
24-
}
17+
$this->assertSymfony30OrHigher();
2518

2619
$message = new Message();
2720
$message->setBody(serialize($event));
@@ -34,6 +27,20 @@ public function toMessage($eventName, Event $event = null)
3427
*/
3528
public function toEvent($eventName, PsrMessage $message)
3629
{
30+
$this->assertSymfony30OrHigher();
31+
3732
return unserialize($message->getBody());
3833
}
34+
35+
private function assertSymfony30OrHigher()
36+
{
37+
if (version_compare(Kernel::VERSION, '3.0', '<')) {
38+
throw new \LogicException(
39+
'This transformer does not work on Symfony prior 3.0. '.
40+
'The event contains eventDispatcher and therefor could not be serialized. '.
41+
'You have to register a transformer for every async event. '.
42+
'Read the doc: https://github.com/php-enqueue/enqueue-dev/blob/master/docs/bundle/async_events.md#event-transformer'
43+
);
44+
}
45+
}
3946
}
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
<?php
2+
3+
namespace Enqueue\Bundle\Tests\Unit\Events;
4+
5+
use Enqueue\Bundle\Events\EventTransformer;
6+
use Enqueue\Bundle\Events\PhpSerializerEventTransformer;
7+
use Enqueue\Client\Message;
8+
use Enqueue\Null\NullMessage;
9+
use Enqueue\Test\ClassExtensionTrait;
10+
use PHPUnit\Framework\TestCase;
11+
use Symfony\Component\EventDispatcher\GenericEvent;
12+
use Symfony\Component\HttpKernel\Kernel;
13+
14+
class PhpSerializerEventTransformerTest extends TestCase
15+
{
16+
use ClassExtensionTrait;
17+
18+
public function testShouldImplementEventTransformerInterface()
19+
{
20+
$this->assertClassImplements(EventTransformer::class, PhpSerializerEventTransformer::class);
21+
}
22+
23+
public function testCouldBeConstructedWithoutAnyArguments()
24+
{
25+
new PhpSerializerEventTransformer();
26+
}
27+
28+
public function testShouldReturnMessageWithPhpSerializedEventAsBodyOnToMessage()
29+
{
30+
if (version_compare(Kernel::VERSION, '3.0', '<')) {
31+
$this->markTestSkipped('This functionality only works on Symfony 3.0 or higher');
32+
}
33+
34+
$transformer = new PhpSerializerEventTransformer();
35+
36+
$message = $transformer->toMessage(new GenericEvent('theSubject'));
37+
38+
$this->assertInstanceOf(Message::class, $message);
39+
$this->assertEquals(serialize(new GenericEvent('theSubject')), $message->getBody());
40+
}
41+
42+
public function testShouldReturnEventUnserializedFromMessageBodyOnToEvent()
43+
{
44+
if (version_compare(Kernel::VERSION, '3.0', '<')) {
45+
$this->markTestSkipped('This functionality only works on Symfony 3.0 or higher');
46+
}
47+
48+
$message = new NullMessage();
49+
$message->setBody(serialize(new GenericEvent('theSubject')));
50+
51+
$transformer = new PhpSerializerEventTransformer();
52+
53+
$event = $transformer->toEvent('anEventName', $message);
54+
55+
$this->assertInstanceOf(GenericEvent::class, $event);
56+
$this->assertEquals('tehSubject', $event->getSubject());
57+
}
58+
59+
public function testThrowNotSupportedExceptionOnSymfonyPrior30OnToMessage()
60+
{
61+
if (version_compare(Kernel::VERSION, '3.0', '>=')) {
62+
$this->markTestSkipped('This functionality only works on Symfony 3.0 or higher');
63+
}
64+
65+
$this->expectException(\LogicException::class);
66+
$this->expectExceptionMessage('This transformer does not work on Symfony prior 3.0.');
67+
68+
$transformer = new PhpSerializerEventTransformer();
69+
70+
$transformer->toMessage(new GenericEvent());
71+
}
72+
73+
public function testThrowNotSupportedExceptionOnSymfonyPrior30OnToEvent()
74+
{
75+
if (version_compare(Kernel::VERSION, '3.0', '>=')) {
76+
$this->markTestSkipped('This functionality only works on Symfony 3.0 or higher');
77+
}
78+
79+
$this->expectException(\LogicException::class);
80+
$this->expectExceptionMessage('This transformer does not work on Symfony prior 3.0.');
81+
82+
$transformer = new PhpSerializerEventTransformer();
83+
84+
$transformer->toEvent('anEvent', new NullMessage());
85+
}
86+
}

0 commit comments

Comments
 (0)