11
11
use Magento \Framework \Message \Manager ;
12
12
use Magento \Sales \Model \AdminOrder \EmailSender ;
13
13
use Magento \Sales \Model \Order ;
14
+ use Magento \Sales \Model \Order \Email \Sender \InvoiceSender ;
14
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 as InvoiceCollection ;
15
18
use PHPUnit \Framework \MockObject \MockObject ;
16
19
use PHPUnit \Framework \TestCase ;
17
20
use Psr \Log \LoggerInterface ;
18
21
22
+ /**
23
+ * Tests to sent order emails
24
+ */
19
25
class EmailSenderTest extends TestCase
20
26
{
21
27
/**
22
- * @var MockObject
28
+ * @var LoggerInterface| MockObject
23
29
*/
24
- protected $ orderMock ;
30
+ private $ loggerMock ;
25
31
26
32
/**
27
- * @var MockObject
33
+ * @var Manager| MockObject
28
34
*/
29
- protected $ loggerMock ;
35
+ private $ messageManagerMock ;
30
36
31
37
/**
32
- * @var MockObject
38
+ * @var OrderSender| MockObject
33
39
*/
34
- protected $ messageManagerMock ;
40
+ private $ orderSenderMock ;
35
41
36
42
/**
37
- * @var EmailSender
43
+ * @var InvoiceSender|MockObject
38
44
*/
39
- protected $ emailSender ;
45
+ private $ invoiceSenderMock ;
40
46
41
47
/**
42
- * @var OrderSender
48
+ * @var EmailSender
43
49
*/
44
- protected $ orderSenderMock ;
50
+ private $ emailSender ;
45
51
46
52
/**
47
- * Test setup
53
+ * @inheritdoc
48
54
*/
49
55
protected function setUp (): void
50
56
{
51
57
$ this ->messageManagerMock = $ this ->createMock (Manager::class);
52
58
$ this ->loggerMock = $ this ->getMockForAbstractClass (LoggerInterface::class);
53
- $ this ->orderMock = $ this ->createMock (Order::class);
54
59
$ this ->orderSenderMock = $ this ->createMock (OrderSender::class);
60
+ $ this ->invoiceSenderMock = $ this ->createMock (InvoiceSender::class);
55
61
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
+ );
57
68
}
58
69
59
70
/**
60
- * testSendSuccess
71
+ * Test to send order emails
61
72
*/
62
73
public function testSendSuccess ()
63
74
{
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
+
64
81
$ 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 ));
67
89
}
68
90
69
91
/**
70
92
* testSendFailure
71
93
*/
72
94
public function testSendFailure ()
73
95
{
96
+ $ orderMock = $ this ->createOrderMock ();
74
97
$ this ->orderSenderMock ->expects ($ this ->once ())
75
98
->method ('send ' )
76
99
->willThrowException (new MailException (__ ('test message ' )));
@@ -79,6 +102,22 @@ public function testSendFailure()
79
102
$ this ->loggerMock ->expects ($ this ->once ())
80
103
->method ('critical ' );
81
104
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 ;
83
122
}
84
123
}
0 commit comments