QuoteWithPaymentAndInvalidAddress.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. <?php
  2. /**
  3. * @author Mediotype Developement <diveinto@mediotype.com>
  4. * @copyright 2018 Mediotype. All rights reserved.
  5. */
  6. namespace Vertex\Tax\Test\Integration\Scenarios;
  7. use Magento\Checkout\Api\PaymentInformationManagementInterface;
  8. use Magento\Framework\Exception\CouldNotSaveException;
  9. use Magento\Framework\Exception\InputException;
  10. use Magento\Framework\Exception\LocalizedException;
  11. use Magento\Framework\Exception\NoSuchEntityException;
  12. use Magento\Framework\Exception\State\InputMismatchException;
  13. use Magento\Framework\Exception\StateException;
  14. use Magento\OfflinePayments\Model\Checkmo;
  15. use Magento\Quote\Api\CartRepositoryInterface;
  16. use Magento\Quote\Api\Data\AddressInterface;
  17. use Magento\Quote\Api\Data\AddressInterfaceFactory;
  18. use Magento\Quote\Api\Data\CartInterface;
  19. use Magento\Quote\Api\Data\PaymentInterfaceFactory;
  20. use Magento\Quote\Model\ShippingMethodManagementInterface;
  21. use Magento\Store\Model\Store;
  22. use Vertex\Tax\Test\Integration\Builder\CartBuilder;
  23. use Vertex\Tax\Test\Integration\Builder\CustomerBuilder;
  24. use Vertex\Tax\Test\Integration\Builder\ProductBuilder;
  25. /**
  26. * Create a quote with payment method and Invalid Address
  27. */
  28. class QuoteWithPaymentAndInvalidAddress
  29. {
  30. const INVALID_POSTAL_CODE = 'invalid Code';
  31. /** @var CustomerBuilder */
  32. private $customerBuilder;
  33. /** @var ProductBuilder */
  34. private $productBuilder;
  35. /** @var AddressInterfaceFactory */
  36. private $addressFactory;
  37. /** @var CartBuilder */
  38. private $cartBuilder;
  39. /** @var CartRepositoryInterface */
  40. private $cartRepository;
  41. /** @var ShippingMethodManagementInterface */
  42. private $shippingMethodManagement;
  43. /** @var PaymentInterfaceFactory */
  44. private $paymentFactory;
  45. /** @var PaymentInformationManagementInterface */
  46. private $paymentInformationManagement;
  47. /**
  48. * @param CustomerBuilder $customerBuilder
  49. * @param ProductBuilder $productBuilder
  50. * @param AddressInterfaceFactory $addressFactory
  51. * @param CartBuilder $cartBuilder
  52. * @param CartRepositoryInterface $cartRepository
  53. * @param ShippingMethodManagementInterface $shippingMethodManagement
  54. * @param PaymentInterfaceFactory $paymentFactory
  55. * @param PaymentInformationManagementInterface $paymentInformationManagement
  56. */
  57. public function __construct(
  58. CustomerBuilder $customerBuilder,
  59. ProductBuilder $productBuilder,
  60. AddressInterfaceFactory $addressFactory,
  61. CartBuilder $cartBuilder,
  62. CartRepositoryInterface $cartRepository,
  63. ShippingMethodManagementInterface $shippingMethodManagement,
  64. PaymentInterfaceFactory $paymentFactory,
  65. PaymentInformationManagementInterface $paymentInformationManagement
  66. ) {
  67. $this->customerBuilder = $customerBuilder;
  68. $this->productBuilder = $productBuilder;
  69. $this->addressFactory = $addressFactory;
  70. $this->cartBuilder = $cartBuilder;
  71. $this->cartRepository = $cartRepository;
  72. $this->shippingMethodManagement = $shippingMethodManagement;
  73. $this->paymentFactory = $paymentFactory;
  74. $this->paymentInformationManagement = $paymentInformationManagement;
  75. }
  76. /**
  77. * Create fake cart
  78. *
  79. * @param string|int $fakeReservedOrderId
  80. * @param int $storeId
  81. * @return CartInterface
  82. * @throws CouldNotSaveException
  83. * @throws InputException
  84. * @throws InputMismatchException
  85. * @throws LocalizedException
  86. * @throws NoSuchEntityException
  87. * @throws StateException
  88. */
  89. public function create($fakeReservedOrderId, $storeId = Store::DISTRO_STORE_ID)
  90. {
  91. $customer = $this->customerBuilder->createExampleCustomer();
  92. $product = $this->productBuilder->createExampleProduct();
  93. // create address
  94. /** @var AddressInterface $address */
  95. $address = $this->addressFactory->create();
  96. $address->setCity('West Chester');
  97. $address->setCountryId('US');
  98. $address->setFirstname('John');
  99. $address->setLastname('Doe');
  100. $address->setPostcode(static::INVALID_POSTAL_CODE);
  101. $address->setRegion('Colorado');
  102. $address->setRegionCode('CO');
  103. $address->setRegionId(13);
  104. $address->setStreet(['233 West Gay St']);
  105. $address->setTelephone('1234567890');
  106. // create cart
  107. $cart = $this->cartBuilder->setItems()
  108. ->addItem($product)
  109. ->create($customer->getId());
  110. $cart->setReservedOrderId($fakeReservedOrderId);
  111. $cart->setStoreId($storeId);
  112. $cart->setBillingAddress($address);
  113. $this->cartRepository->save($cart);
  114. $cart = $this->cartRepository->getForCustomer($customer->getId());
  115. //set shipping method
  116. $this->shippingMethodManagement->estimateByExtendedAddress($cart->getId(), $address);
  117. //set payment method
  118. $paymentMethod = $this->paymentFactory->create();
  119. $paymentMethod->setMethod(Checkmo::PAYMENT_METHOD_CHECKMO_CODE);
  120. $this->paymentInformationManagement->savePaymentInformation(
  121. $cart->getId(),
  122. $paymentMethod,
  123. $address
  124. );
  125. return $cart;
  126. }
  127. }