44 private $shipmentMock;
59 private $globalConfigMock;
64 private $eventManagerMock;
69 private $paymentInfoMock;
74 private $paymentHelperMock;
79 private $shipmentResourceMock;
84 private $addressRendererMock;
89 private $templateContainerMock;
94 private $identityContainerMock;
99 private $senderBuilderFactoryMock;
106 $this->orderMock = $this->getMockBuilder(\
Magento\Sales\Model\Order::class)
107 ->disableOriginalConstructor()
110 $this->storeMock = $this->getMockBuilder(\
Magento\Store\Model\Store::class)
111 ->setMethods([
'getStoreId'])
112 ->disableOriginalConstructor()
115 $this->storeMock->expects($this->any())
116 ->method(
'getStoreId')
118 $this->orderMock->expects($this->any())
120 ->willReturn($this->storeMock);
122 $this->senderMock = $this->getMockBuilder(\
Magento\Sales\Model\
Order\Email\Sender::class)
123 ->disableOriginalConstructor()
124 ->setMethods([
'send',
'sendCopyTo'])
127 $this->loggerMock = $this->getMockBuilder(\Psr\Log\LoggerInterface::class)
128 ->disableOriginalConstructor()
129 ->getMockForAbstractClass();
131 $this->shipmentMock = $this->getMockBuilder(\
Magento\Sales\Model\
Order\Shipment::class)
132 ->disableOriginalConstructor()
133 ->setMethods([
'setSendEmail',
'setEmailSent'])
136 $this->commentMock = $this->getMockBuilder(\
Magento\Sales\Api\
Data\ShipmentCommentCreationInterface::class)
137 ->disableOriginalConstructor()
138 ->getMockForAbstractClass();
140 $this->commentMock->expects($this->any())
141 ->method(
'getComment')
142 ->willReturn(
'Comment text');
144 $this->addressMock = $this->getMockBuilder(\
Magento\Sales\Model\
Order\Address::class)
145 ->disableOriginalConstructor()
148 $this->orderMock->expects($this->any())
149 ->method(
'getBillingAddress')
150 ->willReturn($this->addressMock);
151 $this->orderMock->expects($this->any())
152 ->method(
'getShippingAddress')
153 ->willReturn($this->addressMock);
155 $this->globalConfigMock = $this->getMockBuilder(\
Magento\Framework\
App\
Config\ScopeConfigInterface::class)
156 ->disableOriginalConstructor()
157 ->getMockForAbstractClass();
159 $this->eventManagerMock = $this->getMockBuilder(\
Magento\Framework\Event\ManagerInterface::class)
160 ->disableOriginalConstructor()
161 ->getMockForAbstractClass();
163 $this->paymentInfoMock = $this->getMockBuilder(\
Magento\
Payment\Model\Info::class)
164 ->disableOriginalConstructor()
167 $this->orderMock->expects($this->any())
168 ->method(
'getPayment')
169 ->willReturn($this->paymentInfoMock);
171 $this->paymentHelperMock = $this->getMockBuilder(\
Magento\
Payment\Helper\Data::class)
172 ->disableOriginalConstructor()
175 $this->paymentHelperMock->expects($this->any())
176 ->method(
'getInfoBlockHtml')
177 ->with($this->paymentInfoMock, 1)
178 ->willReturn(
'Payment Info Block');
181 ->disableOriginalConstructor()
184 $this->addressRendererMock = $this->getMockBuilder(\
Magento\Sales\Model\
Order\
Address\Renderer::class)
185 ->disableOriginalConstructor()
188 $this->addressRendererMock->expects($this->any())
190 ->with($this->addressMock,
'html')
191 ->willReturn(
'Formatted address');
193 $this->templateContainerMock = $this->getMockBuilder(\
Magento\Sales\Model\
Order\Email\Container\Template::class)
194 ->disableOriginalConstructor()
197 $this->identityContainerMock = $this->getMockBuilder(
198 \
Magento\Sales\Model\
Order\Email\Container\ShipmentIdentity::class
200 ->disableOriginalConstructor()
203 $this->identityContainerMock->expects($this->any())
205 ->willReturn($this->storeMock);
207 $this->senderBuilderFactoryMock = $this->getMockBuilder(
208 \
Magento\Sales\Model\
Order\Email\SenderBuilderFactory::class
210 ->disableOriginalConstructor()
211 ->setMethods([
'create'])
214 $this->subject = new \Magento\Sales\Model\Order\Shipment\Sender\EmailSender(
215 $this->templateContainerMock,
216 $this->identityContainerMock,
217 $this->senderBuilderFactoryMock,
219 $this->addressRendererMock,
220 $this->paymentHelperMock,
221 $this->shipmentResourceMock,
222 $this->globalConfigMock,
223 $this->eventManagerMock
239 public function testSend($configValue, $forceSyncMode, $isComment, $emailSendingResult)
241 $this->globalConfigMock->expects($this->once())
243 ->with(
'sales_email/general/async_sending')
244 ->willReturn($configValue);
247 $this->commentMock =
null;
250 $this->shipmentMock->expects($this->once())
251 ->method(
'setSendEmail')
254 if (!$configValue || $forceSyncMode) {
256 'order' => $this->orderMock,
257 'shipment' => $this->shipmentMock,
258 'comment' => $isComment ?
'Comment text' :
'',
259 'billing' => $this->addressMock,
260 'payment_html' =>
'Payment Info Block',
261 'store' => $this->storeMock,
262 'formattedShippingAddress' =>
'Formatted address',
263 'formattedBillingAddress' =>
'Formatted address',
265 $transport = new \Magento\Framework\DataObject($transport);
267 $this->eventManagerMock->expects($this->once())
270 'email_shipment_set_template_vars_before',
272 'sender' => $this->subject,
273 'transport' => $transport->getData(),
274 'transportObject' => $transport,
278 $this->templateContainerMock->expects($this->once())
279 ->method(
'setTemplateVars')
280 ->with($transport->getData());
282 $this->identityContainerMock->expects($this->once())
283 ->method(
'isEnabled')
284 ->willReturn($emailSendingResult);
286 if ($emailSendingResult) {
287 $this->senderBuilderFactoryMock->expects($this->once())
289 ->willReturn($this->senderMock);
291 $this->senderMock->expects($this->once())
294 $this->senderMock->expects($this->once())
295 ->method(
'sendCopyTo');
297 $this->shipmentMock->expects($this->once())
298 ->method(
'setEmailSent')
301 $this->shipmentResourceMock->expects($this->once())
302 ->method(
'saveAttribute')
303 ->with($this->shipmentMock, [
'send_email',
'email_sent']);
306 $this->subject->send(
314 $this->shipmentResourceMock->expects($this->once())
315 ->method(
'saveAttribute')
316 ->with($this->shipmentMock,
'send_email');
319 $this->subject->send(
328 $this->shipmentMock->expects($this->once())
329 ->method(
'setEmailSent')
332 $this->shipmentResourceMock->expects($this->at(0))
333 ->method(
'saveAttribute')
334 ->with($this->shipmentMock,
'email_sent');
335 $this->shipmentResourceMock->expects($this->at(1))
336 ->method(
'saveAttribute')
337 ->with($this->shipmentMock,
'send_email');
340 $this->subject->send(
356 'Successful sync sending with comment' => [0,
false,
true,
true],
357 'Successful sync sending without comment' => [0,
false,
false,
true],
358 'Failed sync sending with comment' => [0,
false,
true,
false],
359 'Successful forced sync sending with comment' => [1,
true,
true,
true],
360 'Async sending' => [1,
false,
false,
false],
testSend($configValue, $forceSyncMode, $isComment, $emailSendingResult)