Completed
Pull Request — master (#17)
by Nicolas
05:50
created

SendContext   A

Complexity

Total Complexity 12

Size/Duplication

Total Lines 101
Duplicated Lines 0 %

Coupling/Cohesion

Components 2
Dependencies 8

Importance

Changes 0
Metric Value
wmc 12
lcom 2
cbo 8
dl 0
loc 101
rs 10
c 0
b 0
f 0

10 Methods

Rating   Name   Duplication   Size   Complexity  
A theQueueIsEmpty() 0 5 1
A iSendTheTextMessageWithRoutingKey() 0 7 1
A iSendTheJsonMessageWithRoutingKey() 0 10 1
A iSendMessage() 0 6 1
A theQueueMustContainMessage() 0 4 1
A theMessageInQueueContainsAndIsATextMessage() 0 4 1
A theMessageInQueueContainsAndIsAJsonMessage() 0 4 1
A theMessageInQueueContains() 0 9 1
A assertMessagesInQueue() 0 15 3
A nbMessagesInQueue() 0 6 1
1
<?php
2
3
use Puzzle\AMQP\Messages\Message;
4
use Puzzle\AMQP\Messages\Bodies\Json;
5
6
class SendContext extends AbstractRabbitMQContext
0 ignored issues
show
Coding Style Compatibility introduced by
PSR1 recommends that each class must be in a namespace of at least one level to avoid collisions.

You can fix this by adding a namespace to your class:

namespace YourVendor;

class YourClass { }

When choosing a vendor namespace, try to pick something that is not too generic to avoid conflicts with other libraries.

Loading history...
7
{
8
    /**
9
     * @Given The queue :queue is empty
10
     */
11
    public function theQueueIsEmpty($queue)
12
    {
13
        $this->api->purgeQueue($this->vhost(), $queue);
14
        $this->assertMessagesInQueue($queue, 0);
15
    }
16
    
17
    /**
18
     * @When I send the text message :bodyContent
19
     */
20
    public function iSendTheTextMessageWithRoutingKey($bodyContent)
21
    {
22
        $message = new Message(self::TEXT_ROUTING_KEY);
23
        $message->setText($bodyContent);
24
     
25
        $this->iSendMessage($message);
26
    }
27
    
28
    /**
29
     * @When I send the json message :bodyContent
30
     */
31
    public function iSendTheJsonMessageWithRoutingKey($bodyContent)
32
    {
33
        $message = new Message(self::JSON_ROUTING_KEY);
34
        
35
        $body = new Json();
36
        $body->changeContentWithJson($bodyContent);
37
        $message->setBody($body);
38
     
39
        $this->iSendMessage($message);
40
    }
41
    
42
    private function iSendMessage(Message $message)
43
    {
44
        $result = $this->client->publish($this->exchange, $message);
45
        
46
        \PHPUnit_Framework_Assert::assertTrue($result);
47
    }
48
    
49
    /**
50
     * @Then The queue :queue must contain :nbMessages message
51
     */
52
    public function theQueueMustContainMessage($queue, $nbMessages)
53
    {
54
        $this->assertMessagesInQueue($queue, (int) $nbMessages);
55
    }
56
    
57
    /**
58
     * @Then The message in queue :queueName contains :content and is a text message
59
     */
60
    public function theMessageInQueueContainsAndIsATextMessage($content, $queueName)
61
    {
62
        $this->theMessageInQueueContains(self::TEXT_ROUTING_KEY, $content, $queueName, "text/plain");
63
    }
64
    
65
    /**
66
     * @Then The message in queue :queueName contains :content and is a json message
67
     */
68
    public function theMessageInQueueContainsAndIsAJsonMessage($content, $queueName)
69
    {
70
        $this->theMessageInQueueContains(self::JSON_ROUTING_KEY, $content, $queueName, "application/json");
71
    }
72
    
73
    private function theMessageInQueueContains($routingKey, $content, $queueName, $contentType)
74
    {
75
        $messages = $this->api->getMessagesFromQueue($this->vhost(), $queueName);
76
        $message = $messages->first();
1 ignored issue
show
Coding Style introduced by
Equals sign not aligned with surrounding assignments; expected 2 spaces but found 1 space

This check looks for multiple assignments in successive lines of code. It will report an issue if the operators are not in a straight line.

To visualize

$a = "a";
$ab = "ab";
$abc = "abc";

will produce issues in the first and second line, while this second example

$a   = "a";
$ab  = "ab";
$abc = "abc";

will produce no issues.

Loading history...
77
        
78
        \PHPUnit_Framework_Assert::assertSame($routingKey, $message->routing_key);
79
        \PHPUnit_Framework_Assert::assertSame($content, $message->payload);
80
        \PHPUnit_Framework_Assert::assertSame($contentType, $message->properties['content_type']);
81
    }
82
    
83
    
84
    private function assertMessagesInQueue($queue, $expectedNbMessages, $waitingSeconds = 11)
85
    {
86
        $nbMessages = $this->nbMessagesInQueue($queue);
87
        $nbTries = 0;
1 ignored issue
show
Coding Style introduced by
Equals sign not aligned with surrounding assignments; expected 4 spaces but found 1 space

This check looks for multiple assignments in successive lines of code. It will report an issue if the operators are not in a straight line.

To visualize

$a = "a";
$ab = "ab";
$abc = "abc";

will produce issues in the first and second line, while this second example

$a   = "a";
$ab  = "ab";
$abc = "abc";

will produce no issues.

Loading history...
88
        
89
        while($nbMessages !== $expectedNbMessages && $nbTries < $waitingSeconds)
90
        {
91
            sleep(1);
92
            $nbTries++;
93
            
94
            $nbMessages = $this->nbMessagesInQueue($queue);
95
        }
96
        
97
        \PHPUnit_Framework_Assert::assertSame($expectedNbMessages, $nbMessages);
98
    }
99
    
100
    private function nbMessagesInQueue($queueName)
101
    {
102
        $queue = $this->api->getQueue($this->vhost(), $queueName);
103
        
104
        return (int) $queue->messages;
105
    }
106
}
107