19 private $configuration;
24 private $messageEncoder;
29 private $queueRepository;
34 private $mergerFactory;
39 private $consumerConfig;
44 private $messageController;
54 private $batchConsumer;
59 private $batchSize = 10;
64 private $messageProcessorLoader;
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()
90 $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
92 \
Magento\Framework\MessageQueue\BatchConsumer::class,
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
104 $this->consumerConfig = $this->getMockBuilder(\
Magento\Framework\MessageQueue\
Consumer\ConfigInterface::class)
105 ->disableOriginalConstructor()->getMock();
107 $this->batchConsumer,
109 $this->consumerConfig
111 $this->messageController = $this->getMockBuilder(\
Magento\Framework\MessageQueue\MessageController::class)
112 ->disableOriginalConstructor()->getMock();
114 $this->batchConsumer,
116 $this->messageController
127 $queueName =
'queue.name';
128 $consumerName =
'consumerName';
129 $connectionName =
'connection_name';
130 $topicName =
'topicName';
131 $messageBody =
'messageBody';
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
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')
167 $this->batchConsumer->process($numberOfMessages);
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
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([]);
208 $this->batchConsumer->process($numberOfMessages);
testProcessWithMessageLockException()