123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Checkout\Test\Unit\Model;
- /**
- * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
- */
- class PaymentInformationManagementTest extends \PHPUnit\Framework\TestCase
- {
- /**
- * @var \PHPUnit_Framework_MockObject_MockObject
- */
- protected $billingAddressManagementMock;
- /**
- * @var \PHPUnit_Framework_MockObject_MockObject
- */
- protected $paymentMethodManagementMock;
- /**
- * @var \PHPUnit_Framework_MockObject_MockObject
- */
- protected $cartManagementMock;
- /**
- * @var \Magento\Checkout\Model\PaymentInformationManagement
- */
- protected $model;
- /**
- * @var \PHPUnit_Framework_MockObject_MockObject
- */
- private $loggerMock;
- /**
- * @var \PHPUnit_Framework_MockObject_MockObject
- */
- private $cartRepositoryMock;
- protected function setUp()
- {
- $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
- $this->billingAddressManagementMock = $this->createMock(
- \Magento\Quote\Api\BillingAddressManagementInterface::class
- );
- $this->paymentMethodManagementMock = $this->createMock(
- \Magento\Quote\Api\PaymentMethodManagementInterface::class
- );
- $this->cartManagementMock = $this->createMock(\Magento\Quote\Api\CartManagementInterface::class);
- $this->loggerMock = $this->createMock(\Psr\Log\LoggerInterface::class);
- $this->cartRepositoryMock = $this->getMockBuilder(\Magento\Quote\Api\CartRepositoryInterface::class)->getMock();
- $this->model = $objectManager->getObject(
- \Magento\Checkout\Model\PaymentInformationManagement::class,
- [
- 'billingAddressManagement' => $this->billingAddressManagementMock,
- 'paymentMethodManagement' => $this->paymentMethodManagementMock,
- 'cartManagement' => $this->cartManagementMock
- ]
- );
- $objectManager->setBackwardCompatibleProperty($this->model, 'logger', $this->loggerMock);
- $objectManager->setBackwardCompatibleProperty($this->model, 'cartRepository', $this->cartRepositoryMock);
- }
- public function testSavePaymentInformationAndPlaceOrder()
- {
- $cartId = 100;
- $orderId = 200;
- $paymentMock = $this->createMock(\Magento\Quote\Api\Data\PaymentInterface::class);
- $billingAddressMock = $this->createMock(\Magento\Quote\Api\Data\AddressInterface::class);
- $this->getMockForAssignBillingAddress($cartId, $billingAddressMock);
- $this->paymentMethodManagementMock->expects($this->once())->method('set')->with($cartId, $paymentMock);
- $this->cartManagementMock->expects($this->once())->method('placeOrder')->with($cartId)->willReturn($orderId);
- $this->assertEquals(
- $orderId,
- $this->model->savePaymentInformationAndPlaceOrder($cartId, $paymentMock, $billingAddressMock)
- );
- }
- /**
- * @expectedException \Magento\Framework\Exception\CouldNotSaveException
- */
- public function testSavePaymentInformationAndPlaceOrderException()
- {
- $cartId = 100;
- $paymentMock = $this->createMock(\Magento\Quote\Api\Data\PaymentInterface::class);
- $billingAddressMock = $this->createMock(\Magento\Quote\Api\Data\AddressInterface::class);
- $this->getMockForAssignBillingAddress($cartId, $billingAddressMock);
- $this->paymentMethodManagementMock->expects($this->once())->method('set')->with($cartId, $paymentMock);
- $exception = new \Exception(__('DB exception'));
- $this->loggerMock->expects($this->once())->method('critical');
- $this->cartManagementMock->expects($this->once())->method('placeOrder')->willThrowException($exception);
- $this->model->savePaymentInformationAndPlaceOrder($cartId, $paymentMock, $billingAddressMock);
- $this->expectExceptionMessage(
- 'A server error stopped your order from being placed. Please try to place your order again.'
- );
- }
- public function testSavePaymentInformationAndPlaceOrderIfBillingAddressNotExist()
- {
- $cartId = 100;
- $orderId = 200;
- $paymentMock = $this->createMock(\Magento\Quote\Api\Data\PaymentInterface::class);
- $this->paymentMethodManagementMock->expects($this->once())->method('set')->with($cartId, $paymentMock);
- $this->cartManagementMock->expects($this->once())->method('placeOrder')->with($cartId)->willReturn($orderId);
- $this->assertEquals(
- $orderId,
- $this->model->savePaymentInformationAndPlaceOrder($cartId, $paymentMock)
- );
- }
- public function testSavePaymentInformation()
- {
- $cartId = 100;
- $paymentMock = $this->createMock(\Magento\Quote\Api\Data\PaymentInterface::class);
- $billingAddressMock = $this->createMock(\Magento\Quote\Api\Data\AddressInterface::class);
- $this->getMockForAssignBillingAddress($cartId, $billingAddressMock);
- $this->paymentMethodManagementMock->expects($this->once())->method('set')->with($cartId, $paymentMock);
- $this->assertTrue($this->model->savePaymentInformation($cartId, $paymentMock, $billingAddressMock));
- }
- public function testSavePaymentInformationWithoutBillingAddress()
- {
- $cartId = 100;
- $paymentMock = $this->createMock(\Magento\Quote\Api\Data\PaymentInterface::class);
- $this->paymentMethodManagementMock->expects($this->once())->method('set')->with($cartId, $paymentMock);
- $this->assertTrue($this->model->savePaymentInformation($cartId, $paymentMock));
- }
- /**
- * @expectedExceptionMessage DB exception
- * @expectedException \Magento\Framework\Exception\CouldNotSaveException
- */
- public function testSavePaymentInformationAndPlaceOrderWithLocolizedException()
- {
- $cartId = 100;
- $paymentMock = $this->createMock(\Magento\Quote\Api\Data\PaymentInterface::class);
- $billingAddressMock = $this->createMock(\Magento\Quote\Api\Data\AddressInterface::class);
- $this->getMockForAssignBillingAddress($cartId, $billingAddressMock);
- $this->paymentMethodManagementMock->expects($this->once())->method('set')->with($cartId, $paymentMock);
- $phrase = new \Magento\Framework\Phrase(__('DB exception'));
- $exception = new \Magento\Framework\Exception\LocalizedException($phrase);
- $this->loggerMock->expects($this->never())->method('critical');
- $this->cartManagementMock->expects($this->once())->method('placeOrder')->willThrowException($exception);
- $this->model->savePaymentInformationAndPlaceOrder($cartId, $paymentMock, $billingAddressMock);
- }
- /**
- * @param int $cartId
- * @param \PHPUnit_Framework_MockObject_MockObject $billingAddressMock
- */
- private function getMockForAssignBillingAddress($cartId, $billingAddressMock)
- {
- $billingAddressId = 1;
- $quoteMock = $this->createMock(\Magento\Quote\Model\Quote::class);
- $quoteBillingAddress = $this->createMock(\Magento\Quote\Model\Quote\Address::class);
- $shippingRate = $this->createPartialMock(\Magento\Quote\Model\Quote\Address\Rate::class, []);
- $shippingRate->setCarrier('flatrate');
- $quoteShippingAddress = $this->createPartialMock(
- \Magento\Quote\Model\Quote\Address::class,
- ['setLimitCarrier', 'getShippingMethod', 'getShippingRateByCode']
- );
- $this->cartRepositoryMock->expects($this->any())->method('getActive')->with($cartId)->willReturn($quoteMock);
- $quoteMock->expects($this->once())->method('getBillingAddress')->willReturn($quoteBillingAddress);
- $quoteMock->expects($this->once())->method('getShippingAddress')->willReturn($quoteShippingAddress);
- $quoteBillingAddress->expects($this->once())->method('getId')->willReturn($billingAddressId);
- $quoteMock->expects($this->once())->method('removeAddress')->with($billingAddressId);
- $quoteMock->expects($this->once())->method('setBillingAddress')->with($billingAddressMock);
- $quoteMock->expects($this->once())->method('setDataChanges')->willReturnSelf();
- $quoteShippingAddress->expects($this->any())->method('getShippingRateByCode')->willReturn($shippingRate);
- $quoteShippingAddress->expects($this->any())->method('getShippingMethod')->willReturn('flatrate_flatrate');
- $quoteShippingAddress->expects($this->once())->method('setLimitCarrier')->with('flatrate')->willReturnSelf();
- }
- }
|