CreateTest.php 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. declare(strict_types=1);
  7. namespace Magento\Sales\Model\Order;
  8. use Magento\Checkout\Model\Session as CheckoutSession;
  9. use Magento\Framework\Data\Form\FormKey;
  10. use Magento\Framework\ObjectManagerInterface;
  11. use Magento\Quote\Api\GuestCartManagementInterface;
  12. use Magento\Quote\Model\Quote;
  13. use Magento\Quote\Model\QuoteIdMask;
  14. use Magento\Quote\Model\QuoteIdMaskFactory;
  15. use Magento\Sales\Model\OrderRepository;
  16. use Magento\TestFramework\Helper\Bootstrap;
  17. use Magento\TestFramework\Mail\Template\TransportBuilderMock;
  18. use PHPUnit\Framework\Constraint\StringContains;
  19. /**
  20. * Class verifies order creation.
  21. *
  22. * @magentoDbIsolation enabled
  23. * @magentoAppArea frontend
  24. */
  25. class CreateTest extends \PHPUnit\Framework\TestCase
  26. {
  27. /**
  28. * @var ObjectManagerInterface
  29. */
  30. private $objectManager;
  31. /**
  32. * @var TransportBuilderMock
  33. */
  34. private $transportBuilder;
  35. /**
  36. * @var QuoteIdMaskFactory
  37. */
  38. private $quoteIdMaskFactory;
  39. /**
  40. * @var FormKey
  41. */
  42. private $formKey;
  43. /**
  44. * @inheritdoc
  45. */
  46. protected function setUp()
  47. {
  48. parent::setUp();
  49. $this->objectManager = Bootstrap::getObjectManager();
  50. $this->transportBuilder = $this->objectManager->get(TransportBuilderMock::class);
  51. $this->quoteIdMaskFactory = $this->objectManager->get(QuoteIdMaskFactory::class);
  52. $this->formKey = $this->objectManager->get(FormKey::class);
  53. }
  54. /**
  55. * @magentoDataFixture Magento/Sales/_files/guest_quote_with_addresses.php
  56. * @return void
  57. */
  58. public function testSendEmailOnOrderPlace(): void
  59. {
  60. /** @var Quote $quote */
  61. $quote = $this->objectManager->create(Quote::class);
  62. $quote->load('guest_quote', 'reserved_order_id');
  63. $checkoutSession = $this->objectManager->get(CheckoutSession::class);
  64. $checkoutSession->setQuoteId($quote->getId());
  65. /** @var QuoteIdMask $quoteIdMask */
  66. $quoteIdMask = $this->quoteIdMaskFactory->create();
  67. $quoteIdMask->load($quote->getId(), 'quote_id');
  68. $cartId = $quoteIdMask->getMaskedId();
  69. /** @var GuestCartManagementInterface $cartManagement */
  70. $cartManagement = $this->objectManager->get(GuestCartManagementInterface::class);
  71. $orderId = $cartManagement->placeOrder($cartId);
  72. $order = $this->objectManager->get(OrderRepository::class)->get($orderId);
  73. $message = $this->transportBuilder->getSentMessage();
  74. $subject = __('Your %1 order confirmation', $order->getStore()->getFrontendName())->render();
  75. $assert = $this->logicalAnd(
  76. new StringContains($order->getBillingAddress()->getName()),
  77. new StringContains(
  78. 'Thank you for your order from ' . $order->getStore()->getFrontendName()
  79. ),
  80. new StringContains(
  81. "Your Order <span class=\"no-link\">#{$order->getIncrementId()}</span>"
  82. )
  83. );
  84. $this->assertEquals($message->getSubject(), $subject);
  85. $this->assertThat($message->getRawMessage(), $assert);
  86. }
  87. }