9
9
10
10
use Magento \Checkout \Model \Session as CheckoutSession ;
11
11
use Magento \Customer \Model \Session ;
12
+ use Magento \Framework \Exception \LocalizedException ;
12
13
use Magento \Framework \Exception \NoSuchEntityException ;
13
14
use Magento \Framework \Message \MessageInterface ;
14
15
use Magento \Framework \Stdlib \CookieManagerInterface ;
15
16
use Magento \Quote \Api \CartRepositoryInterface ;
16
17
use Magento \Sales \Api \Data \OrderInterfaceFactory ;
17
18
use Magento \Sales \Helper \Guest ;
19
+ use Magento \Sales \Model \Order \Email \Sender \CreditmemoSender ;
20
+ use Magento \Sales \Model \Order \Creditmemo ;
21
+ use Magento \Sales \Model \Order \Creditmemo \Item ;
22
+ use Magento \TestFramework \Mail \Template \TransportBuilderMock ;
18
23
use Magento \TestFramework \Request ;
19
24
use Magento \TestFramework \TestCase \AbstractController ;
20
25
21
26
/**
22
27
* Test for guest reorder controller.
23
28
*
24
29
* @see \Magento\Sales\Controller\Guest\Reorder
30
+ * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
25
31
* @magentoAppArea frontend
26
32
* @magentoDbIsolation enabled
27
33
*/
@@ -42,6 +48,16 @@ class ReorderTest extends AbstractController
42
48
/** @var CartRepositoryInterface */
43
49
private $ quoteRepository ;
44
50
51
+ /**
52
+ * @var TransportBuilderMock
53
+ */
54
+ private $ transportBuilder ;
55
+
56
+ /**
57
+ * @var CreditmemoSender
58
+ */
59
+ protected $ creditmemoSender ;
60
+
45
61
/**
46
62
* @inheritdoc
47
63
*/
@@ -54,6 +70,8 @@ protected function setUp(): void
54
70
$ this ->cookieManager = $ this ->_objectManager ->get (CookieManagerInterface::class);
55
71
$ this ->customerSession = $ this ->_objectManager ->get (Session::class);
56
72
$ this ->quoteRepository = $ this ->_objectManager ->get (CartRepositoryInterface::class);
73
+ $ this ->transportBuilder = $ this ->_objectManager ->get (TransportBuilderMock::class);
74
+ $ this ->creditmemoSender = $ this ->_objectManager ->get (CreditmemoSender::class);
57
75
}
58
76
59
77
/**
@@ -136,4 +154,67 @@ private function dispatchReorderRequest(): void
136
154
$ this ->getRequest ()->setMethod (Request::METHOD_POST );
137
155
$ this ->dispatch ('sales/guest/reorder/ ' );
138
156
}
157
+
158
+ /**
159
+ * @magentoDbIsolation disabled
160
+ *
161
+ * @magentoDataFixture Magento/Sales/_files/order_by_guest_with_simple_product.php
162
+ *
163
+ * @return void
164
+ * @throws LocalizedException
165
+ * @throws \Exception
166
+ */
167
+ public function testOrderNumberIsPresentInCreditMemoEmail (): void
168
+ {
169
+ $ orderIncrementId = 'test_order_1 ' ;
170
+ $ order = $ this ->orderFactory ->create ()->loadByIncrementId ($ orderIncrementId );
171
+
172
+ // Create an Invoice for the Order
173
+ $ invoice = $ order ->prepareInvoice ()->register ();
174
+ $ invoice ->pay ();
175
+
176
+ // Submit the Invoice
177
+ $ invoice ->getOrder ()->setIsInProcess (true );
178
+ $ this ->_objectManager ->create (\Magento \Framework \DB \Transaction::class)
179
+ ->addObject ($ invoice )
180
+ ->addObject ($ invoice ->getOrder ())
181
+ ->save ();
182
+
183
+ // Create a Credit Memo
184
+ $ creditmemo = $ this ->_objectManager ->create (Creditmemo::class)
185
+ ->setOrder ($ order )
186
+ ->setInvoice ($ invoice );
187
+
188
+ foreach ($ order ->getAllItems () as $ orderItem ) {
189
+ $ creditmemoItem = $ this ->_objectManager ->create (Item::class)
190
+ ->setOrderItem ($ orderItem )
191
+ ->setQty ($ orderItem ->getQtyOrdered ())
192
+ ->setBackToStock (true );
193
+ $ creditmemo ->addItem ($ creditmemoItem );
194
+ }
195
+
196
+ $ this ->_objectManager ->create (\Magento \Framework \DB \Transaction::class)
197
+ ->addObject ($ invoice )
198
+ ->addObject ($ invoice ->getOrder ())
199
+ ->save ();
200
+
201
+ // Send the Credit Memo email
202
+ $ creditmemo ->setEmailSent (true );
203
+ $ invoice ->setEmailSent (true );
204
+ $ this ->creditmemoSender ->send ($ creditmemo );
205
+
206
+ $ this ->_objectManager ->create (\Magento \Framework \DB \Transaction::class)
207
+ ->addObject ($ invoice )
208
+ ->save ();
209
+
210
+ // Verify email in the mailbox
211
+ $ message = $ this ->transportBuilder ->getSentMessage ();
212
+ $ this ->assertNotNull ($ message );
213
+ $ this ->assertEquals ('Credit memo for your Main Website Store order ' , $ message ->getSubject ());
214
+
215
+ $ this ->assertStringContainsString (
216
+ 'Your Credit Memo # for Order # ' . $ orderIncrementId ,
217
+ $ message ->getBody ()->getParts ()[0 ]->getRawContent ()
218
+ );
219
+ }
139
220
}
0 commit comments