Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
QueueManagementTest.php
Go to the documentation of this file.
1 <?php
8 
12 class QueueManagementTest extends \PHPUnit\Framework\TestCase
13 {
17  private $messageResource;
18 
22  private $scopeConfig;
23 
27  private $dateTime;
28 
33  private $messageStatusCollectionFactory;
34 
38  private $queueManagement;
39 
45  protected function setUp()
46  {
47  $this->messageResource = $this->getMockBuilder(\Magento\MysqlMq\Model\ResourceModel\Queue::class)
48  ->disableOriginalConstructor()->getMock();
49  $this->scopeConfig = $this->getMockBuilder(\Magento\Framework\App\Config\ScopeConfigInterface::class)
50  ->disableOriginalConstructor()->getMock();
51  $this->dateTime = $this->getMockBuilder(\Magento\Framework\Stdlib\DateTime\DateTime::class)
52  ->disableOriginalConstructor()->getMock();
53  $this->messageStatusCollectionFactory = $this
54  ->getMockBuilder(\Magento\MysqlMq\Model\ResourceModel\MessageStatusCollectionFactory::class)
55  ->setMethods(['create'])
56  ->disableOriginalConstructor()
57  ->getMock();
58 
59  $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
60  $this->queueManagement = $objectManager->getObject(
61  \Magento\MysqlMq\Model\QueueManagement::class,
62  [
63  'messageResource' => $this->messageResource,
64  'scopeConfig' => $this->scopeConfig,
65  'dateTime' => $this->dateTime,
66  'messageStatusCollectionFactory' => $this->messageStatusCollectionFactory,
67  ]
68  );
69  }
70 
76  public function testAddMessageToQueues()
77  {
78  $topicName = 'topic.name';
79  $queueNames = ['queue0', 'queue1'];
80  $message = 'test_message';
81  $messageId = 1;
82  $this->messageResource->expects($this->once())
83  ->method('saveMessage')->with($topicName, $message)->willReturn($messageId);
84  $this->messageResource->expects($this->once())
85  ->method('linkQueues')->with($messageId, $queueNames)->willReturnSelf();
86  $this->assertEquals(
87  $this->queueManagement,
88  $this->queueManagement->addMessageToQueues($topicName, $message, $queueNames)
89  );
90  }
91 
97  public function testAddMessagesToQueues()
98  {
99  $topicName = 'topic.name';
100  $queueNames = ['queue0', 'queue1'];
101  $messages = ['test_message0', 'test_message1'];
102  $messageIds = [1, 2];
103  $this->messageResource->expects($this->once())
104  ->method('saveMessages')->with($topicName, $messages)->willReturn($messageIds);
105  $this->messageResource->expects($this->once())
106  ->method('linkMessagesWithQueues')->with($messageIds, $queueNames)->willReturnSelf();
107  $this->assertEquals(
108  $this->queueManagement,
109  $this->queueManagement->addMessagesToQueues($topicName, $messages, $queueNames)
110  );
111  }
112 
118  public function testMarkMessagesForDelete()
119  {
120  $messageId = 99;
121  $collection = $this->getMockBuilder(\Magento\MysqlMq\Model\ResourceModel\MessageStatusCollection::class)
122  ->disableOriginalConstructor()->getMock();
123  $this->messageStatusCollectionFactory->expects($this->once())->method('create')->willReturn($collection);
124  $this->scopeConfig->expects($this->exactly(8))->method('getValue')
125  ->withConsecutive(
126  [
127  \Magento\MysqlMq\Model\QueueManagement::XML_PATH_SUCCESSFUL_MESSAGES_LIFETIME,
128  \Magento\Store\Model\ScopeInterface::SCOPE_STORE,
129  ],
130  [
131  \Magento\MysqlMq\Model\QueueManagement::XML_PATH_FAILED_MESSAGES_LIFETIME,
132  \Magento\Store\Model\ScopeInterface::SCOPE_STORE,
133  ],
134  [
135  \Magento\MysqlMq\Model\QueueManagement::XML_PATH_NEW_MESSAGES_LIFETIME,
136  \Magento\Store\Model\ScopeInterface::SCOPE_STORE,
137  ],
138  [
139  \Magento\MysqlMq\Model\QueueManagement::XML_PATH_RETRY_IN_PROGRESS_AFTER,
140  \Magento\Store\Model\ScopeInterface::SCOPE_STORE,
141  ],
142  [
143  \Magento\MysqlMq\Model\QueueManagement::XML_PATH_SUCCESSFUL_MESSAGES_LIFETIME,
144  \Magento\Store\Model\ScopeInterface::SCOPE_STORE,
145  ],
146  [
147  \Magento\MysqlMq\Model\QueueManagement::XML_PATH_FAILED_MESSAGES_LIFETIME,
148  \Magento\Store\Model\ScopeInterface::SCOPE_STORE,
149  ],
150  [
151  \Magento\MysqlMq\Model\QueueManagement::XML_PATH_NEW_MESSAGES_LIFETIME,
152  \Magento\Store\Model\ScopeInterface::SCOPE_STORE,
153  ],
154  [
155  \Magento\MysqlMq\Model\QueueManagement::XML_PATH_RETRY_IN_PROGRESS_AFTER,
156  \Magento\Store\Model\ScopeInterface::SCOPE_STORE,
157  ]
158  )->willReturn(1);
159  $collection->expects($this->once())->method('addFieldToFilter')
160  ->with(
161  'status',
162  [
163  'in' => [
164  \Magento\MysqlMq\Model\QueueManagement::MESSAGE_STATUS_COMPLETE,
165  \Magento\MysqlMq\Model\QueueManagement::MESSAGE_STATUS_ERROR,
166  \Magento\MysqlMq\Model\QueueManagement::MESSAGE_STATUS_NEW,
167  \Magento\MysqlMq\Model\QueueManagement::MESSAGE_STATUS_IN_PROGRESS,
168  ]
169  ]
170  )->willReturnSelf();
171  $messageStatuses =
172  [
173  $this->getMessageStatusMock(),
174  $this->getMessageStatusMock(),
175  $this->getMessageStatusMock(),
176  $this->getMessageStatusMock(),
177  ];
178  $this->dateTime->expects($this->exactly(4))->method('gmtTimestamp')->willReturn(1486741063);
179  $messageStatuses[0]->expects($this->atLeastOnce())->method('getStatus')->willReturn(
180  \Magento\MysqlMq\Model\QueueManagement::MESSAGE_STATUS_COMPLETE
181  );
182  $messageStatuses[1]->expects($this->atLeastOnce())->method('getStatus')->willReturn(
183  \Magento\MysqlMq\Model\QueueManagement::MESSAGE_STATUS_ERROR
184  );
185  $messageStatuses[2]->expects($this->atLeastOnce())->method('getStatus')->willReturn(
186  \Magento\MysqlMq\Model\QueueManagement::MESSAGE_STATUS_NEW
187  );
188  $messageStatuses[3]->expects($this->atLeastOnce())->method('getStatus')->willReturn(
189  \Magento\MysqlMq\Model\QueueManagement::MESSAGE_STATUS_IN_PROGRESS
190  );
191  $messageStatuses[0]->expects($this->once())->method('setStatus')
192  ->with(\Magento\MysqlMq\Model\QueueManagement::MESSAGE_STATUS_TO_BE_DELETED)->willReturnSelf();
193  $messageStatuses[1]->expects($this->once())->method('setStatus')
194  ->with(\Magento\MysqlMq\Model\QueueManagement::MESSAGE_STATUS_TO_BE_DELETED)->willReturnSelf();
195  $messageStatuses[2]->expects($this->once())->method('setStatus')
196  ->with(\Magento\MysqlMq\Model\QueueManagement::MESSAGE_STATUS_TO_BE_DELETED)->willReturnSelf();
197  $messageStatuses[0]->expects($this->once())->method('save')->willReturnSelf();
198  $messageStatuses[1]->expects($this->once())->method('save')->willReturnSelf();
199  $messageStatuses[2]->expects($this->once())->method('save')->willReturnSelf();
200  $messageStatuses[3]->expects($this->once())->method('getId')->willReturn($messageId);
201  $collection->expects($this->once())->method('getIterator')->willReturn(new \ArrayIterator($messageStatuses));
202  $this->messageResource->expects($this->once())->method('pushBackForRetry')->with($messageId);
203  $this->messageResource->expects($this->once())->method('deleteMarkedMessages');
204  $this->queueManagement->markMessagesForDelete();
205  }
206 
212  private function getMessageStatusMock()
213  {
214  $messageStatus = $this->getMockBuilder(\Magento\MysqlMq\Model\MessageStatus::class)
215  ->setMethods(['getStatus', 'setStatus', 'save', 'getId', 'getUpdatedAt'])
216  ->disableOriginalConstructor()->getMock();
217  $messageStatus->expects($this->once())->method('getUpdatedAt')->willReturn('2010-01-01 00:00:00');
218  return $messageStatus;
219  }
220 
224  public function testChangeStatus()
225  {
226  $messageIds = [1, 2];
228  $this->messageResource->expects($this->once())->method('changeStatus')->with($messageIds, $status);
229  $this->queueManagement->changeStatus($messageIds, $status);
230  }
231 }
$objectManager
Definition: bootstrap.php:17
$message
$status
Definition: order_status.php:8