Skip to content

Commit 4d0519e

Browse files
committed
Merge remote-tracking branch 'mpi/MC-19400' into Chaika-PR-2019-09-20
2 parents 550a645 + 896ae3b commit 4d0519e

File tree

2 files changed

+103
-37
lines changed

2 files changed

+103
-37
lines changed

app/code/Magento/Quote/Observer/SubmitObserver.php

Lines changed: 31 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,21 @@
55
*/
66
namespace Magento\Quote\Observer;
77

8-
use Magento\Sales\Model\Order\Email\Sender\OrderSender;
8+
use Magento\Framework\Event\Observer;
99
use Magento\Framework\Event\ObserverInterface;
10+
use Magento\Quote\Model\Quote;
11+
use Magento\Sales\Model\Order;
12+
use Magento\Sales\Model\Order\Email\Sender\InvoiceSender;
13+
use Magento\Sales\Model\Order\Email\Sender\OrderSender;
14+
use Psr\Log\LoggerInterface;
1015

16+
/**
17+
* Class SubmitObserver
18+
*/
1119
class SubmitObserver implements ObserverInterface
1220
{
1321
/**
14-
* @var \Psr\Log\LoggerInterface
22+
* @var LoggerInterface
1523
*/
1624
private $logger;
1725

@@ -21,27 +29,37 @@ class SubmitObserver implements ObserverInterface
2129
private $orderSender;
2230

2331
/**
24-
* @param \Psr\Log\LoggerInterface $logger
32+
* @var InvoiceSender
33+
*/
34+
private $invoiceSender;
35+
36+
/**
37+
* @param LoggerInterface $logger
2538
* @param OrderSender $orderSender
39+
* @param InvoiceSender $invoiceSender
2640
*/
2741
public function __construct(
28-
\Psr\Log\LoggerInterface $logger,
29-
OrderSender $orderSender
42+
LoggerInterface $logger,
43+
OrderSender $orderSender,
44+
InvoiceSender $invoiceSender
3045
) {
3146
$this->logger = $logger;
3247
$this->orderSender = $orderSender;
48+
$this->invoiceSender = $invoiceSender;
3349
}
3450

3551
/**
36-
* @param \Magento\Framework\Event\Observer $observer
52+
* Sends emails to customer.
53+
*
54+
* @param Observer $observer
3755
*
3856
* @return void
3957
*/
40-
public function execute(\Magento\Framework\Event\Observer $observer)
58+
public function execute(Observer $observer)
4159
{
42-
/** @var \Magento\Quote\Model\Quote $quote */
60+
/** @var Quote $quote */
4361
$quote = $observer->getEvent()->getQuote();
44-
/** @var \Magento\Sales\Model\Order $order */
62+
/** @var Order $order */
4563
$order = $observer->getEvent()->getOrder();
4664

4765
/**
@@ -51,6 +69,10 @@ public function execute(\Magento\Framework\Event\Observer $observer)
5169
if (!$redirectUrl && $order->getCanSendNewEmailFlag()) {
5270
try {
5371
$this->orderSender->send($order);
72+
$invoice = current($order->getInvoiceCollection()->getItems());
73+
if ($invoice) {
74+
$this->invoiceSender->send($invoice);
75+
}
5476
} catch (\Exception $e) {
5577
$this->logger->critical($e);
5678
}

app/code/Magento/Quote/Test/Unit/Observer/SubmitObserverTest.php

Lines changed: 72 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -5,75 +5,116 @@
55
*/
66
namespace Magento\Quote\Test\Unit\Observer;
77

8+
use Magento\Framework\Event;
9+
use Magento\Framework\Event\Observer;
10+
use Magento\Quote\Model\Quote;
11+
use Magento\Quote\Model\Quote\Payment;
12+
use Magento\Quote\Observer\SubmitObserver;
13+
use Magento\Sales\Model\Order;
14+
use Magento\Sales\Model\Order\Email\Sender\InvoiceSender;
15+
use Magento\Sales\Model\Order\Email\Sender\OrderSender;
16+
use Magento\Sales\Model\Order\Invoice;
17+
use Magento\Sales\Model\ResourceModel\Order\Invoice\Collection;
18+
use Psr\Log\LoggerInterface;
19+
20+
/**
21+
* Class SubmitObserverTest
22+
*/
823
class SubmitObserverTest extends \PHPUnit\Framework\TestCase
924
{
1025
/**
11-
* @var \Magento\Quote\Observer\SubmitObserver
26+
* @var SubmitObserver
1227
*/
13-
protected $model;
28+
private $model;
1429

1530
/**
16-
* @var \Psr\Log\LoggerInterface|\PHPUnit_Framework_MockObject_MockObject
31+
* @var LoggerInterface|\PHPUnit_Framework_MockObject_MockObject
1732
*/
18-
protected $loggerMock;
33+
private $loggerMock;
1934

2035
/**
21-
* @var \Magento\Sales\Model\Order\Email\Sender\OrderSender|\PHPUnit_Framework_MockObject_MockObject
36+
* @var OrderSender|\PHPUnit_Framework_MockObject_MockObject
2237
*/
23-
protected $orderSenderMock;
38+
private $orderSenderMock;
2439

2540
/**
26-
* @var \Magento\Framework\Event\Observer|\PHPUnit_Framework_MockObject_MockObject
41+
* @var InvoiceSender|\PHPUnit_Framework_MockObject_MockObject
2742
*/
28-
protected $observerMock;
43+
private $invoiceSender;
2944

3045
/**
31-
* @var \Magento\Quote\Model\Quote|\PHPUnit_Framework_MockObject_MockObject
46+
* @var Observer|\PHPUnit_Framework_MockObject_MockObject
3247
*/
33-
protected $quoteMock;
48+
private $observerMock;
3449

3550
/**
36-
* @var \Magento\Sales\Model\Order|\PHPUnit_Framework_MockObject_MockObject
51+
* @var Quote|\PHPUnit_Framework_MockObject_MockObject
3752
*/
38-
protected $orderMock;
53+
private $quoteMock;
3954

4055
/**
41-
* @var \Magento\Quote\Model\Quote\Payment|\PHPUnit_Framework_MockObject_MockObject
56+
* @var Order|\PHPUnit_Framework_MockObject_MockObject
4257
*/
43-
protected $paymentMock;
58+
private $orderMock;
59+
60+
/**
61+
* @var Payment|\PHPUnit_Framework_MockObject_MockObject
62+
*/
63+
private $paymentMock;
4464

4565
protected function setUp()
4666
{
47-
$this->loggerMock = $this->createMock(\Psr\Log\LoggerInterface::class);
48-
$this->quoteMock = $this->createMock(\Magento\Quote\Model\Quote::class);
49-
$this->orderMock = $this->createMock(\Magento\Sales\Model\Order::class);
50-
$this->paymentMock = $this->createMock(\Magento\Quote\Model\Quote\Payment::class);
51-
$this->orderSenderMock =
52-
$this->createMock(\Magento\Sales\Model\Order\Email\Sender\OrderSender::class);
53-
$eventMock = $this->getMockBuilder(\Magento\Framework\Event::class)
67+
$this->loggerMock = $this->createMock(LoggerInterface::class);
68+
$this->quoteMock = $this->createMock(Quote::class);
69+
$this->orderMock = $this->createMock(Order::class);
70+
$this->paymentMock = $this->createMock(Payment::class);
71+
$this->orderSenderMock = $this->createMock(OrderSender::class);
72+
$this->invoiceSender = $this->createMock(InvoiceSender::class);
73+
$eventMock = $this->getMockBuilder(Event::class)
5474
->disableOriginalConstructor()
5575
->setMethods(['getQuote', 'getOrder'])
5676
->getMock();
57-
$this->observerMock = $this->createPartialMock(\Magento\Framework\Event\Observer::class, ['getEvent']);
77+
$this->observerMock = $this->createPartialMock(Observer::class, ['getEvent']);
5878
$this->observerMock->expects($this->any())->method('getEvent')->willReturn($eventMock);
5979
$eventMock->expects($this->once())->method('getQuote')->willReturn($this->quoteMock);
6080
$eventMock->expects($this->once())->method('getOrder')->willReturn($this->orderMock);
6181
$this->quoteMock->expects($this->once())->method('getPayment')->willReturn($this->paymentMock);
62-
$this->model = new \Magento\Quote\Observer\SubmitObserver(
82+
$this->model = new SubmitObserver(
6383
$this->loggerMock,
64-
$this->orderSenderMock
84+
$this->orderSenderMock,
85+
$this->invoiceSender
6586
);
6687
}
6788

89+
/**
90+
* Tests successful email sending.
91+
*/
6892
public function testSendEmail()
6993
{
70-
$this->paymentMock->expects($this->once())->method('getOrderPlaceRedirectUrl')->willReturn('');
71-
$this->orderMock->expects($this->once())->method('getCanSendNewEmailFlag')->willReturn(true);
72-
$this->orderSenderMock->expects($this->once())->method('send')->willReturn(true);
73-
$this->loggerMock->expects($this->never())->method('critical');
94+
$this->paymentMock->method('getOrderPlaceRedirectUrl')->willReturn('');
95+
$invoice = $this->createMock(Invoice::class);
96+
$invoiceCollection = $this->createMock(Collection::class);
97+
$invoiceCollection->method('getItems')
98+
->willReturn([$invoice]);
99+
100+
$this->orderMock->method('getInvoiceCollection')
101+
->willReturn($invoiceCollection);
102+
$this->orderMock->method('getCanSendNewEmailFlag')->willReturn(true);
103+
$this->orderSenderMock->expects($this->once())
104+
->method('send')->willReturn(true);
105+
$this->invoiceSender->expects($this->once())
106+
->method('send')
107+
->with($invoice)
108+
->willReturn(true);
109+
$this->loggerMock->expects($this->never())
110+
->method('critical');
111+
74112
$this->model->execute($this->observerMock);
75113
}
76114

115+
/**
116+
* Tests failing email sending.
117+
*/
77118
public function testFailToSendEmail()
78119
{
79120
$this->paymentMock->expects($this->once())->method('getOrderPlaceRedirectUrl')->willReturn('');
@@ -85,6 +126,9 @@ public function testFailToSendEmail()
85126
$this->model->execute($this->observerMock);
86127
}
87128

129+
/**
130+
* Tests send email when redirect.
131+
*/
88132
public function testSendEmailWhenRedirectUrlExists()
89133
{
90134
$this->paymentMock->expects($this->once())->method('getOrderPlaceRedirectUrl')->willReturn(false);

0 commit comments

Comments
 (0)