99
1010use Magento \Checkout \Model \Session as CheckoutSession ;
1111use Magento \Customer \Model \Session ;
12+ use Magento \Framework \Exception \LocalizedException ;
1213use Magento \Framework \Exception \NoSuchEntityException ;
1314use Magento \Framework \Message \MessageInterface ;
1415use Magento \Framework \Stdlib \CookieManagerInterface ;
1516use Magento \Quote \Api \CartRepositoryInterface ;
1617use Magento \Sales \Api \Data \OrderInterfaceFactory ;
1718use 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 ;
1823use Magento \TestFramework \Request ;
1924use Magento \TestFramework \TestCase \AbstractController ;
2025
2126/**
2227 * Test for guest reorder controller.
2328 *
2429 * @see \Magento\Sales\Controller\Guest\Reorder
30+ * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
2531 * @magentoAppArea frontend
2632 * @magentoDbIsolation enabled
2733 */
@@ -42,6 +48,16 @@ class ReorderTest extends AbstractController
4248 /** @var CartRepositoryInterface */
4349 private $ quoteRepository ;
4450
51+ /**
52+ * @var TransportBuilderMock
53+ */
54+ private $ transportBuilder ;
55+
56+ /**
57+ * @var CreditmemoSender
58+ */
59+ protected $ creditmemoSender ;
60+
4561 /**
4662 * @inheritdoc
4763 */
@@ -54,6 +70,8 @@ protected function setUp(): void
5470 $ this ->cookieManager = $ this ->_objectManager ->get (CookieManagerInterface::class);
5571 $ this ->customerSession = $ this ->_objectManager ->get (Session::class);
5672 $ this ->quoteRepository = $ this ->_objectManager ->get (CartRepositoryInterface::class);
73+ $ this ->transportBuilder = $ this ->_objectManager ->get (TransportBuilderMock::class);
74+ $ this ->creditmemoSender = $ this ->_objectManager ->get (CreditmemoSender::class);
5775 }
5876
5977 /**
@@ -136,4 +154,67 @@ private function dispatchReorderRequest(): void
136154 $ this ->getRequest ()->setMethod (Request::METHOD_POST );
137155 $ this ->dispatch ('sales/guest/reorder/ ' );
138156 }
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+ }
139220}
0 commit comments