Completed
Pull Request — 3.x (#375)
by
unknown
02:08
created

testShouldImplementMessageIteratorInterface()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 6
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 0
1
<?php
2
3
declare(strict_types=1);
4
5
/*
6
 * This file is part of the Sonata Project package.
7
 *
8
 * (c) Thomas Rabaix <[email protected]>
9
 *
10
 * For the full copyright and license information, please view the LICENSE
11
 * file that was distributed with this source code.
12
 */
13
14
namespace Sonata\NotificationBundle\Tests\Iterator;
15
16
use Interop\Amqp\AmqpConsumer;
17
use Interop\Amqp\Impl\AmqpMessage;
18
use PHPUnit\Framework\TestCase;
19
use Sonata\NotificationBundle\Iterator\AMQPMessageIterator;
20
use Sonata\NotificationBundle\Iterator\MessageIteratorInterface;
21
use Sonata\NotificationBundle\Model\Message;
22
23
/**
24
 * @covers \Sonata\NotificationBundle\Iterator\AMQPMessageIterator
25
 */
26
class AMQPMessageIteratorTest extends TestCase
27
{
28
    public function testShouldImplementMessageIteratorInterface(): void
29
    {
30
        $rc = new \ReflectionClass(AMQPMessageIterator::class);
31
32
        $this->assertTrue($rc->implementsInterface(MessageIteratorInterface::class));
33
    }
34
35
    public function testCouldBeConstructedWithContextAsFirstArgument(): void
36
    {
37
        new AMQPMessageIterator($this->createMock(AmqpConsumer::class));
38
    }
39
40
    public function testShouldIterateOverThreeMessagesAndExit(): void
41
    {
42
        $firstMessage = new AmqpMessage('{"body": {"value": "theFirstMessageBody"}, "type": "aType", "state": "aState"}');
43
        $secondMessage = new AmqpMessage('{"body": {"value": "theSecondMessageBody"}, "type": "aType", "state": "aState"}');
44
        $thirdMessage = new AmqpMessage('{"body": {"value": "theThirdMessageBody"}, "type": "aType", "state": "aState"}');
45
46
        $consumerMock = $this->createMock(AmqpConsumer::class);
47
        $consumerMock
48
            ->expects($this->exactly(4))
49
            ->method('receive')
50
            ->willReturnOnConsecutiveCalls($firstMessage, $secondMessage, $thirdMessage, null);
51
52
        $iterator = new AMQPMessageIterator($consumerMock);
53
54
        $values = [];
55
        foreach ($iterator as $message) {
56
            /* @var Message $message */
57
58
            $this->assertInstanceOf(Message::class, $message);
59
            $this->assertInstanceOf(\Interop\Amqp\AmqpMessage::class, $message->getValue('interopMessage'));
60
61
            $values[] = $message->getValue('value');
62
        }
63
64
        $this->assertSame(['theFirstMessageBody', 'theSecondMessageBody', 'theThirdMessageBody'], $values);
65
    }
66
}
67