Passed
Pull Request — master (#17)
by Nicolas
03:26
created

theMessageInQueueContainsAndIsAJsonMessage()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 2
1
<?php
2
3
namespace Puzzle\AMQP\Contexts;
4
5
use Puzzle\AMQP\Messages\Message;
6
use Puzzle\AMQP\Messages\Bodies\Json;
7
8
class SendContext extends AbstractRabbitMQContext
9
{
10
    /**
11
     * @Given The queue :queue is empty
12
     */
13
    public function theQueueIsEmpty($queue)
14
    {
15
        $this->api->purgeQueue($this->vhost(), $queue);
16
        $this->assertMessagesInQueue($queue, 0);
17
    }
18
    
19
    /**
20
     * @When I send the text message :bodyContent
21
     */
22
    public function iSendTheTextMessageWithRoutingKey($bodyContent)
23
    {
24
        $message = new Message(self::TEXT_ROUTING_KEY);
25
        $message->setText($bodyContent);
26
     
27
        $this->iSendMessage($message);
28
    }
29
    
30
    /**
31
     * @When I send the json message :bodyContent
32
     */
33
    public function iSendTheJsonMessageWithRoutingKey($bodyContent)
34
    {
35
        $message = new Message(self::JSON_ROUTING_KEY);
36
        
37
        $body = new Json();
38
        $body->changeContentWithJson($bodyContent);
39
        $message->setBody($body);
40
     
41
        $this->iSendMessage($message);
42
    }
43
    
44
    private function iSendMessage(Message $message)
45
    {
46
        $result = $this->client->publish($this->exchange, $message);
47
        
48
        \PHPUnit_Framework_Assert::assertTrue($result);
49
    }
50
    
51
    /**
52
     * @Then The queue :queue must contain :nbMessages message
53
     */
54
    public function theQueueMustContainMessage($queue, $nbMessages)
55
    {
56
        $this->assertMessagesInQueue($queue, (int) $nbMessages);
57
    }
58
    
59
    /**
60
     * @Then The message in queue :queueName contains :content and is a text message
61
     */
62
    public function theMessageInQueueContainsAndIsATextMessage($content, $queueName)
63
    {
64
        $this->theMessageInQueueContains(self::TEXT_ROUTING_KEY, $content, $queueName, "text/plain");
65
    }
66
    
67
    /**
68
     * @Then The message in queue :queueName contains :content and is a json message
69
     */
70
    public function theMessageInQueueContainsAndIsAJsonMessage($content, $queueName)
71
    {
72
        $this->theMessageInQueueContains(self::JSON_ROUTING_KEY, $content, $queueName, "application/json");
73
    }
74
    
75
    private function theMessageInQueueContains($routingKey, $content, $queueName, $contentType)
76
    {
77
        $messages = $this->api->getMessagesFromQueue($this->vhost(), $queueName);
78
        $message = $messages->first();
79
        
80
        \PHPUnit_Framework_Assert::assertSame($routingKey, $message->routing_key);
81
        \PHPUnit_Framework_Assert::assertSame($content, $message->payload);
82
        \PHPUnit_Framework_Assert::assertSame($contentType, $message->properties['content_type']);
83
    }
84
    
85
    
86
    private function assertMessagesInQueue($queue, $expectedNbMessages, $waitingSeconds = 11)
87
    {
88
        $nbMessages = $this->nbMessagesInQueue($queue);
89
        $nbTries = 0;
90
        
91
        while($nbMessages !== $expectedNbMessages && $nbTries < $waitingSeconds)
92
        {
93
            sleep(1);
94
            $nbTries++;
95
            
96
            $nbMessages = $this->nbMessagesInQueue($queue);
97
        }
98
        
99
        \PHPUnit_Framework_Assert::assertSame($expectedNbMessages, $nbMessages);
100
    }
101
    
102
    private function nbMessagesInQueue($queueName)
103
    {
104
        $queue = $this->api->getQueue($this->vhost(), $queueName);
105
        
106
        return (int) $queue->messages;
107
    }
108
}
109