/
HandleTraitTest.php
97 lines (78 loc) · 3.52 KB
/
HandleTraitTest.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
<?php
namespace Symfony\Component\Messenger\Tests;
use PHPUnit\Framework\TestCase;
use Symfony\Component\Messenger\Envelope;
use Symfony\Component\Messenger\HandleTrait;
use Symfony\Component\Messenger\MessageBus;
use Symfony\Component\Messenger\MessageBusInterface;
use Symfony\Component\Messenger\Stamp\HandledStamp;
use Symfony\Component\Messenger\Tests\Fixtures\DummyMessage;
class HandleTraitTest extends TestCase
{
/**
* @expectedException \Symfony\Component\Messenger\Exception\LogicException
* @expectedExceptionMessage You must provide a "Symfony\Component\Messenger\MessageBusInterface" instance in the "Symfony\Component\Messenger\Tests\TestQueryBus::$messageBus" property, "NULL" given.
*/
public function testItThrowsOnNoMessageBusInstance()
{
$queryBus = new TestQueryBus(null);
$query = new DummyMessage('Hello');
$queryBus->query($query);
}
public function testHandleReturnsHandledStampResult()
{
$bus = $this->createMock(MessageBus::class);
$queryBus = new TestQueryBus($bus);
$query = new DummyMessage('Hello');
$bus->expects($this->once())->method('dispatch')->willReturn(
new Envelope($query, new HandledStamp('result', 'DummyHandler::__invoke'))
);
$this->assertSame('result', $queryBus->query($query));
}
public function testHandleAcceptsEnvelopes()
{
$bus = $this->createMock(MessageBus::class);
$queryBus = new TestQueryBus($bus);
$envelope = new Envelope(new DummyMessage('Hello'), new HandledStamp('result', 'DummyHandler::__invoke'));
$bus->expects($this->once())->method('dispatch')->willReturn($envelope);
$this->assertSame('result', $queryBus->query($envelope));
}
/**
* @expectedException \Symfony\Component\Messenger\Exception\LogicException
* @expectedExceptionMessage Message of type "Symfony\Component\Messenger\Tests\Fixtures\DummyMessage" was handled zero times. Exactly one handler is expected when using "Symfony\Component\Messenger\Tests\TestQueryBus::handle()".
*/
public function testHandleThrowsOnNoHandledStamp()
{
$bus = $this->createMock(MessageBus::class);
$queryBus = new TestQueryBus($bus);
$query = new DummyMessage('Hello');
$bus->expects($this->once())->method('dispatch')->willReturn(new Envelope($query));
$queryBus->query($query);
}
/**
* @expectedException \Symfony\Component\Messenger\Exception\LogicException
* @expectedExceptionMessage Message of type "Symfony\Component\Messenger\Tests\Fixtures\DummyMessage" was handled multiple times. Only one handler is expected when using "Symfony\Component\Messenger\Tests\TestQueryBus::handle()", got 2: "FirstDummyHandler::__invoke", "dummy_2".
*/
public function testHandleThrowsOnMultipleHandledStamps()
{
$bus = $this->createMock(MessageBus::class);
$queryBus = new TestQueryBus($bus);
$query = new DummyMessage('Hello');
$bus->expects($this->once())->method('dispatch')->willReturn(
new Envelope($query, new HandledStamp('first_result', 'FirstDummyHandler::__invoke'), new HandledStamp('second_result', 'SecondDummyHandler::__invoke', 'dummy_2'))
);
$queryBus->query($query);
}
}
class TestQueryBus
{
use HandleTrait;
public function __construct(?MessageBusInterface $messageBus)
{
$this->messageBus = $messageBus;
}
public function query($query): string
{
return $this->handle($query);
}
}