44 private $creditmemoMock;
59 private $globalConfigMock;
64 private $eventManagerMock;
69 private $paymentInfoMock;
74 private $paymentHelperMock;
79 private $creditmemoResourceMock;
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->creditmemoMock = $this->getMockBuilder(\
Magento\Sales\Model\
Order\Creditmemo::class)
132 ->disableOriginalConstructor()
133 ->setMethods([
'setSendEmail',
'setEmailSent'])
136 $this->commentMock = $this->getMockBuilder(\
Magento\Sales\Api\
Data\CreditmemoCommentCreationInterface::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');
180 $this->creditmemoResourceMock = $this->getMockBuilder(
182 )->disableOriginalConstructor()
185 $this->addressRendererMock = $this->getMockBuilder(\
Magento\Sales\Model\
Order\
Address\Renderer::class)
186 ->disableOriginalConstructor()
189 $this->addressRendererMock->expects($this->any())
191 ->with($this->addressMock,
'html')
192 ->willReturn(
'Formatted address');
194 $this->templateContainerMock = $this->getMockBuilder(\
Magento\Sales\Model\
Order\Email\Container\Template::class)
195 ->disableOriginalConstructor()
198 $this->identityContainerMock = $this->getMockBuilder(
199 \
Magento\Sales\Model\
Order\Email\Container\CreditmemoIdentity::class
201 ->disableOriginalConstructor()
204 $this->identityContainerMock->expects($this->any())
206 ->willReturn($this->storeMock);
208 $this->senderBuilderFactoryMock = $this->getMockBuilder(
209 \
Magento\Sales\Model\
Order\Email\SenderBuilderFactory::class
211 ->disableOriginalConstructor()
212 ->setMethods([
'create'])
215 $this->subject = new \Magento\Sales\Model\Order\Creditmemo\Sender\EmailSender(
216 $this->templateContainerMock,
217 $this->identityContainerMock,
218 $this->senderBuilderFactoryMock,
220 $this->addressRendererMock,
221 $this->paymentHelperMock,
222 $this->creditmemoResourceMock,
223 $this->globalConfigMock,
224 $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->creditmemoMock->expects($this->once())
251 ->method(
'setSendEmail')
254 if (!$configValue || $forceSyncMode) {
256 'order' => $this->orderMock,
257 'creditmemo' => $this->creditmemoMock,
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_creditmemo_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->creditmemoMock->expects($this->once())
298 ->method(
'setEmailSent')
301 $this->creditmemoResourceMock->expects($this->once())
302 ->method(
'saveAttribute')
303 ->with($this->creditmemoMock, [
'send_email',
'email_sent']);
306 $this->subject->send(
308 $this->creditmemoMock,
314 $this->creditmemoResourceMock->expects($this->once())
315 ->method(
'saveAttribute')
316 ->with($this->creditmemoMock,
'send_email');
319 $this->subject->send(
321 $this->creditmemoMock,
328 $this->creditmemoMock->expects($this->once())
329 ->method(
'setEmailSent')
332 $this->creditmemoResourceMock->expects($this->at(0))
333 ->method(
'saveAttribute')
334 ->with($this->creditmemoMock,
'email_sent');
335 $this->creditmemoResourceMock->expects($this->at(1))
336 ->method(
'saveAttribute')
337 ->with($this->creditmemoMock,
'send_email');
340 $this->subject->send(
342 $this->creditmemoMock,
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)