CheckoutTest.php 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Paypal\Test\Unit\Model\Express;
  7. use Magento\Quote\Model\Quote;
  8. use Magento\Quote\Model\Shipping;
  9. use Magento\Quote\Model\ShippingAssignment;
  10. use Magento\Quote\Api\Data\CartExtensionInterface;
  11. /**
  12. * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  13. */
  14. class CheckoutTest extends \PHPUnit\Framework\TestCase
  15. {
  16. const SHIPPING_METHOD = 'new_shipping_method';
  17. /**
  18. * @var \Magento\Paypal\Model\Express\Checkout | \Magento\Paypal\Model\Express\Checkout
  19. */
  20. protected $checkoutModel;
  21. /**
  22. * @var \Magento\Framework\TestFramework\Unit\Helper\ObjectManager
  23. */
  24. protected $objectManager;
  25. /**
  26. * @var \PHPUnit_Framework_MockObject_MockObject | \'Magento\Quote\Model\Quote
  27. */
  28. protected $quoteMock;
  29. /**
  30. * @var \PHPUnit_Framework_MockObject_MockObject | \Magento\Customer\Api\AccountManagementInterface
  31. */
  32. protected $customerAccountManagementMock;
  33. /**
  34. * @var \PHPUnit_Framework_MockObject_MockObject | \Magento\Framework\DataObject\Copy
  35. */
  36. protected $objectCopyServiceMock;
  37. /**
  38. * @var \PHPUnit_Framework_MockObject_MockObject | \Magento\Customer\Model\Session
  39. */
  40. protected $customerSessionMock;
  41. /**
  42. * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Customer\Model\Customer
  43. */
  44. protected $customerMock;
  45. protected function setUp()
  46. {
  47. $this->objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
  48. $this->customerMock = $this->createMock(\Magento\Customer\Model\Customer::class);
  49. $this->quoteMock = $this->createPartialMock(\Magento\Quote\Model\Quote::class, [
  50. 'getId', 'assignCustomer', 'assignCustomerWithAddressChange', 'getBillingAddress',
  51. 'getShippingAddress', 'isVirtual', 'addCustomerAddress', 'collectTotals', '__wakeup',
  52. 'save', 'getCustomerData', 'getIsVirtual', 'getExtensionAttributes'
  53. ]);
  54. $this->customerAccountManagementMock = $this->createMock(\Magento\Customer\Model\AccountManagement::class);
  55. $this->objectCopyServiceMock = $this->getMockBuilder(\Magento\Framework\DataObject\Copy::class)
  56. ->disableOriginalConstructor()
  57. ->getMock();
  58. $this->customerSessionMock = $this->getMockBuilder(\Magento\Customer\Model\Session::class)
  59. ->disableOriginalConstructor()
  60. ->getMock();
  61. $paypalConfigMock = $this->createMock(\Magento\Paypal\Model\Config::class);
  62. $this->checkoutModel = $this->objectManager->getObject(
  63. \Magento\Paypal\Model\Express\Checkout::class,
  64. [
  65. 'params' => [
  66. 'quote' => $this->quoteMock,
  67. 'config' => $paypalConfigMock,
  68. 'session' => $this->customerSessionMock,
  69. ],
  70. 'accountManagement' => $this->customerAccountManagementMock,
  71. 'objectCopyService' => $this->objectCopyServiceMock
  72. ]
  73. );
  74. parent::setUp();
  75. }
  76. public function testSetCustomerData()
  77. {
  78. $customerDataMock = $this->createMock(\Magento\Customer\Api\Data\CustomerInterface::class);
  79. $this->quoteMock->expects($this->once())->method('assignCustomer')->with($customerDataMock);
  80. $customerDataMock->expects($this->once())
  81. ->method('getId');
  82. $this->checkoutModel->setCustomerData($customerDataMock);
  83. }
  84. public function testSetCustomerWithAddressChange()
  85. {
  86. /** @var \Magento\Customer\Api\Data\CustomerInterface $customerDataMock */
  87. $customerDataMock = $this->createMock(\Magento\Customer\Api\Data\CustomerInterface::class);
  88. /** @var \Magento\Quote\Model\Quote\Address $customerDataMock */
  89. $quoteAddressMock = $this->createMock(\Magento\Quote\Model\Quote\Address::class);
  90. $this->quoteMock
  91. ->expects($this->once())
  92. ->method('assignCustomerWithAddressChange')
  93. ->with($customerDataMock, $quoteAddressMock, $quoteAddressMock);
  94. $customerDataMock->expects($this->once())->method('getId');
  95. $this->checkoutModel->setCustomerWithAddressChange($customerDataMock, $quoteAddressMock, $quoteAddressMock);
  96. }
  97. public function testUpdateShippingMethod()
  98. {
  99. $shippingAddressMock = $this->getMockBuilder(Quote\Address::class)
  100. ->setMethods(['setCollectShippingRates', 'getShippingMethod', 'setShippingMethod'])
  101. ->disableOriginalConstructor()
  102. ->getMock();
  103. $billingAddressMock = $this->getMockBuilder(Quote\Address::class)
  104. ->disableOriginalConstructor()
  105. ->getMock();
  106. $shippingAddressMock->expects(static::once())
  107. ->method('getShippingMethod')
  108. ->willReturn('old_method');
  109. $shippingAddressMock->expects(static::once())
  110. ->method('setShippingMethod')
  111. ->with(self::SHIPPING_METHOD)
  112. ->willReturnSelf();
  113. $shippingMock = $this->getMockBuilder(Shipping::class)
  114. ->disableOriginalConstructor()
  115. ->getMock();
  116. $shippingMock->expects(static::once())
  117. ->method('setMethod')
  118. ->with(self::SHIPPING_METHOD);
  119. $shippingAssignmentMock = $this->getMockBuilder(ShippingAssignment::class)
  120. ->disableOriginalConstructor()
  121. ->getMock();
  122. $shippingAssignmentMock->expects(static::once())
  123. ->method('getShipping')
  124. ->willReturn($shippingMock);
  125. $cartExtensionMock = $this->getMockBuilder(CartExtensionInterface::class)
  126. ->setMethods(['getShippingAssignments'])
  127. ->getMockForAbstractClass();
  128. $cartExtensionMock->expects(static::exactly(2))
  129. ->method('getShippingAssignments')
  130. ->willReturn([$shippingAssignmentMock]);
  131. $this->quoteMock->expects(static::exactly(2))
  132. ->method('getShippingAddress')
  133. ->willReturn($shippingAddressMock);
  134. $this->quoteMock->expects(static::exactly(2))
  135. ->method('getIsVirtual')
  136. ->willReturn(false);
  137. $this->quoteMock->expects(static::any())
  138. ->method('getBillingAddress')
  139. ->willReturn($billingAddressMock);
  140. $this->quoteMock->expects(static::once())
  141. ->method('getExtensionAttributes')
  142. ->willReturn($cartExtensionMock);
  143. $this->checkoutModel->updateShippingMethod(self::SHIPPING_METHOD);
  144. }
  145. }