Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
BatchConsumerTest.php
Go to the documentation of this file.
1 <?php
8 
14 class BatchConsumerTest extends \PHPUnit\Framework\TestCase
15 {
19  private $configuration;
20 
24  private $messageEncoder;
25 
29  private $queueRepository;
30 
34  private $mergerFactory;
35 
39  private $consumerConfig;
40 
44  private $messageController;
45 
49  private $resource;
50 
54  private $batchConsumer;
55 
59  private $batchSize = 10;
60 
64  private $messageProcessorLoader;
65 
71  protected function setUp()
72  {
73  $this->configuration = $this
74  ->getMockBuilder(\Magento\Framework\MessageQueue\ConsumerConfigurationInterface::class)
75  ->disableOriginalConstructor()->getMock();
76  $this->messageEncoder = $this->getMockBuilder(\Magento\Framework\MessageQueue\MessageEncoder::class)
77  ->disableOriginalConstructor()->getMock();
78  $this->queueRepository = $this->getMockBuilder(\Magento\Framework\MessageQueue\QueueRepository::class)
79  ->disableOriginalConstructor()->getMock();
80  $this->mergerFactory = $this->getMockBuilder(\Magento\Framework\MessageQueue\MergerFactory::class)
81  ->setMethods(['create'])
82  ->disableOriginalConstructor()->getMock();
83  $this->resource = $this->getMockBuilder(\Magento\Framework\App\ResourceConnection::class)
84  ->disableOriginalConstructor()->getMock();
85  $this->messageProcessorLoader = $this
86  ->getMockBuilder(\Magento\Framework\MessageQueue\MessageProcessorLoader::class)
87  ->disableOriginalConstructor()
88  ->getMock();
89 
90  $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
91  $this->batchConsumer = $objectManager->getObject(
92  \Magento\Framework\MessageQueue\BatchConsumer::class,
93  [
94  'configuration' => $this->configuration,
95  'messageEncoder' => $this->messageEncoder,
96  'queueRepository' => $this->queueRepository,
97  'mergerFactory' => $this->mergerFactory,
98  'resource' => $this->resource,
99  'batchSize' => $this->batchSize,
100  'messageProcessorLoader' => $this->messageProcessorLoader
101  ]
102  );
103 
104  $this->consumerConfig = $this->getMockBuilder(\Magento\Framework\MessageQueue\Consumer\ConfigInterface::class)
105  ->disableOriginalConstructor()->getMock();
106  $objectManager->setBackwardCompatibleProperty(
107  $this->batchConsumer,
108  'consumerConfig',
109  $this->consumerConfig
110  );
111  $this->messageController = $this->getMockBuilder(\Magento\Framework\MessageQueue\MessageController::class)
112  ->disableOriginalConstructor()->getMock();
113  $objectManager->setBackwardCompatibleProperty(
114  $this->batchConsumer,
115  'messageController',
116  $this->messageController
117  );
118  }
119 
125  public function testProcess()
126  {
127  $queueName = 'queue.name';
128  $consumerName = 'consumerName';
129  $connectionName = 'connection_name';
130  $topicName = 'topicName';
131  $messageBody = 'messageBody';
132  $message = ['message_data'];
133  $numberOfMessages = 2;
134  $this->configuration->expects($this->once())->method('getQueueName')->willReturn($queueName);
135  $this->configuration->expects($this->atLeastOnce())->method('getConsumerName')->willReturn($consumerName);
136  $consumerConfigItem = $this
137  ->getMockBuilder(\Magento\Framework\MessageQueue\Consumer\Config\ConsumerConfigItemInterface::class)
138  ->disableOriginalConstructor()->getMock();
139  $this->consumerConfig->expects($this->once())
140  ->method('getConsumer')->with($consumerName)->willReturn($consumerConfigItem);
141  $consumerConfigItem->expects($this->once())->method('getConnection')->willReturn($connectionName);
142  $queue = $this->getMockBuilder(\Magento\Framework\MessageQueue\QueueInterface::class)
143  ->disableOriginalConstructor()->getMock();
144  $this->queueRepository->expects($this->once())
145  ->method('get')->with($connectionName, $queueName)->willReturn($queue);
146  $merger = $this->getMockBuilder(\Magento\Framework\MessageQueue\MergerInterface::class)
147  ->disableOriginalConstructor()->getMock();
148  $this->mergerFactory->expects($this->once())->method('create')->with($consumerName)->willReturn($merger);
149  $envelope = $this->getMockBuilder(\Magento\Framework\MessageQueue\EnvelopeInterface::class)
150  ->disableOriginalConstructor()->getMock();
151  $queue->expects($this->exactly($numberOfMessages))->method('dequeue')->willReturn($envelope);
152  $this->messageController->expects($this->exactly($numberOfMessages))
153  ->method('lock')->with($envelope, $consumerName);
154  $envelope->expects($this->exactly($numberOfMessages))
155  ->method('getProperties')->willReturn(['topic_name' => $topicName]);
156  $envelope->expects($this->exactly($numberOfMessages))
157  ->method('getBody')->willReturn($messageBody);
158  $this->messageEncoder->expects($this->exactly($numberOfMessages))
159  ->method('decode')->with($topicName, $messageBody)->willReturn($message);
160  $messageProcessor = $this->getMockBuilder(\Magento\Framework\MessageQueue\MessageProcessorInterface::class)
161  ->disableOriginalConstructor()
162  ->getMockForAbstractClass();
163  $this->messageProcessorLoader->expects($this->atLeastOnce())->method('load')->willReturn($messageProcessor);
164  $merger->expects($this->once())->method('merge')
165  ->with([$topicName => [$message, $message]])->willReturnArgument(0);
166 
167  $this->batchConsumer->process($numberOfMessages);
168  }
169 
176  {
177  $queueName = 'queue.name';
178  $consumerName = 'consumerName';
179  $connectionName = 'connection_name';
180  $numberOfMessages = 2;
181  $this->configuration->expects($this->once())->method('getQueueName')->willReturn($queueName);
182  $this->configuration->expects($this->atLeastOnce())->method('getConsumerName')->willReturn($consumerName);
183  $consumerConfigItem = $this
184  ->getMockBuilder(\Magento\Framework\MessageQueue\Consumer\Config\ConsumerConfigItemInterface::class)
185  ->disableOriginalConstructor()->getMock();
186  $this->consumerConfig->expects($this->once())
187  ->method('getConsumer')->with($consumerName)->willReturn($consumerConfigItem);
188  $consumerConfigItem->expects($this->once())->method('getConnection')->willReturn($connectionName);
189  $queue = $this->getMockBuilder(\Magento\Framework\MessageQueue\QueueInterface::class)
190  ->disableOriginalConstructor()->getMock();
191  $this->queueRepository->expects($this->once())
192  ->method('get')->with($connectionName, $queueName)->willReturn($queue);
193  $merger = $this->getMockBuilder(\Magento\Framework\MessageQueue\MergerInterface::class)
194  ->disableOriginalConstructor()->getMock();
195  $this->mergerFactory->expects($this->once())->method('create')->with($consumerName)->willReturn($merger);
196  $envelope = $this->getMockBuilder(\Magento\Framework\MessageQueue\EnvelopeInterface::class)
197  ->disableOriginalConstructor()->getMock();
198  $queue->expects($this->exactly($numberOfMessages))->method('dequeue')->willReturn($envelope);
199  $exception = new \Magento\Framework\MessageQueue\MessageLockException(__('Exception Message'));
200  $this->messageController->expects($this->atLeastOnce())
201  ->method('lock')->with($envelope, $consumerName)->willThrowException($exception);
202  $messageProcessor = $this->getMockBuilder(\Magento\Framework\MessageQueue\MessageProcessorInterface::class)
203  ->disableOriginalConstructor()
204  ->getMockForAbstractClass();
205  $this->messageProcessorLoader->expects($this->atLeastOnce())->method('load')->willReturn($messageProcessor);
206  $merger->expects($this->once())->method('merge')->willReturn([]);
207 
208  $this->batchConsumer->process($numberOfMessages);
209  }
210 }
$queue
Definition: queue.php:21
$objectManager
Definition: bootstrap.php:17
__()
Definition: __.php:13
$message