1111use Magento \Framework \Message \Manager ;
1212use Magento \Sales \Model \AdminOrder \EmailSender ;
1313use Magento \Sales \Model \Order ;
14+ use Magento \Sales \Model \Order \Email \Sender \InvoiceSender ;
1415use Magento \Sales \Model \Order \Email \Sender \OrderSender ;
16+ use Magento \Sales \Model \Order \Invoice ;
17+ use Magento \Sales \Model \ResourceModel \Order \Invoice \Collection as InvoiceCollection ;
1518use PHPUnit \Framework \MockObject \MockObject ;
1619use PHPUnit \Framework \TestCase ;
1720use Psr \Log \LoggerInterface ;
1821
22+ /**
23+ * Tests to sent order emails
24+ */
1925class EmailSenderTest extends TestCase
2026{
2127 /**
22- * @var MockObject
28+ * @var LoggerInterface| MockObject
2329 */
24- protected $ orderMock ;
30+ private $ loggerMock ;
2531
2632 /**
27- * @var MockObject
33+ * @var Manager| MockObject
2834 */
29- protected $ loggerMock ;
35+ private $ messageManagerMock ;
3036
3137 /**
32- * @var MockObject
38+ * @var OrderSender| MockObject
3339 */
34- protected $ messageManagerMock ;
40+ private $ orderSenderMock ;
3541
3642 /**
37- * @var EmailSender
43+ * @var InvoiceSender|MockObject
3844 */
39- protected $ emailSender ;
45+ private $ invoiceSenderMock ;
4046
4147 /**
42- * @var OrderSender
48+ * @var EmailSender
4349 */
44- protected $ orderSenderMock ;
50+ private $ emailSender ;
4551
4652 /**
47- * Test setup
53+ * @inheritdoc
4854 */
4955 protected function setUp (): void
5056 {
5157 $ this ->messageManagerMock = $ this ->createMock (Manager::class);
5258 $ this ->loggerMock = $ this ->getMockForAbstractClass (LoggerInterface::class);
53- $ this ->orderMock = $ this ->createMock (Order::class);
5459 $ this ->orderSenderMock = $ this ->createMock (OrderSender::class);
60+ $ this ->invoiceSenderMock = $ this ->createMock (InvoiceSender::class);
5561
56- $ this ->emailSender = new EmailSender ($ this ->messageManagerMock , $ this ->loggerMock , $ this ->orderSenderMock );
62+ $ this ->emailSender = new EmailSender (
63+ $ this ->messageManagerMock ,
64+ $ this ->loggerMock ,
65+ $ this ->orderSenderMock ,
66+ $ this ->invoiceSenderMock
67+ );
5768 }
5869
5970 /**
60- * testSendSuccess
71+ * Test to send order emails
6172 */
6273 public function testSendSuccess ()
6374 {
75+ $ invoicePaid = $ this ->createMock (Invoice::class);
76+ $ invoicePaid ->method ('getState ' )->willReturn (Invoice::STATE_PAID );
77+ $ invoiceOpen = $ this ->createMock (Invoice::class);
78+ $ invoiceOpen ->method ('getState ' )->willReturn (Invoice::STATE_OPEN );
79+ $ order = $ this ->createOrderMock ([$ invoiceOpen , $ invoicePaid ]);
80+
6481 $ this ->orderSenderMock ->expects ($ this ->once ())
65- ->method ('send ' );
66- $ this ->assertTrue ($ this ->emailSender ->send ($ this ->orderMock ));
82+ ->method ('send ' )
83+ ->with ($ order );
84+ $ this ->invoiceSenderMock ->expects ($ this ->once ())
85+ ->method ('send ' )
86+ ->with ($ invoicePaid );
87+
88+ $ this ->assertTrue ($ this ->emailSender ->send ($ order ));
6789 }
6890
6991 /**
7092 * testSendFailure
7193 */
7294 public function testSendFailure ()
7395 {
96+ $ orderMock = $ this ->createOrderMock ();
7497 $ this ->orderSenderMock ->expects ($ this ->once ())
7598 ->method ('send ' )
7699 ->willThrowException (new MailException (__ ('test message ' )));
@@ -79,6 +102,22 @@ public function testSendFailure()
79102 $ this ->loggerMock ->expects ($ this ->once ())
80103 ->method ('critical ' );
81104
82- $ this ->assertFalse ($ this ->emailSender ->send ($ this ->orderMock ));
105+ $ this ->assertFalse ($ this ->emailSender ->send ($ orderMock ));
106+ }
107+
108+ /**
109+ * Create order mock
110+ *
111+ * @param array $invoiceCollection
112+ * @return MockObject|Order
113+ */
114+ private function createOrderMock (array $ invoiceCollection = []): MockObject
115+ {
116+ $ collection = $ this ->createMock (InvoiceCollection::class);
117+ $ collection ->method ('getItems ' )->willReturn ($ invoiceCollection );
118+ $ order = $ this ->createMock (Order::class);
119+ $ order ->method ('getInvoiceCollection ' )->willReturn ($ collection );
120+
121+ return $ order ;
83122 }
84123}
0 commit comments