![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/magento/module-quote/Test/Unit/Model/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Quote\Test\Unit\Model; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\Payment\Model\Checks\ZeroTotal; use Magento\Payment\Model\Method\AbstractMethod; use Magento\Payment\Model\MethodInterface; use Magento\Payment\Model\MethodList; use Magento\Quote\Api\CartRepositoryInterface; use Magento\Quote\Api\Data\PaymentMethodInterface; use Magento\Quote\Model\PaymentMethodManagement; use Magento\Quote\Model\Quote; use Magento\Quote\Model\Quote\Address; use Magento\Quote\Model\Quote\Payment; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; /** * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class PaymentMethodManagementTest extends TestCase { /** * @var PaymentMethodManagement */ protected $model; /** * @var ObjectManager */ protected $objectManager; /** * @var MockObject */ protected $quoteRepositoryMock; /** * @var MockObject */ protected $methodListMock; /** * @var MockObject */ protected $zeroTotalMock; protected function setUp(): void { $this->objectManager = new ObjectManager($this); $this->quoteRepositoryMock = $this->getMockForAbstractClass( CartRepositoryInterface::class, [], '', false, true, true, [] ); $this->methodListMock = $this->createMock(MethodList::class); $this->zeroTotalMock = $this->createMock(ZeroTotal::class); $this->model = $this->objectManager->getObject( PaymentMethodManagement::class, [ 'quoteRepository' => $this->quoteRepositoryMock, 'methodList' => $this->methodListMock, 'zeroTotalValidator' => $this->zeroTotalMock ] ); } public function testGetPaymentIfPaymentMethodNotSet() { $cartId = 11; $quoteMock = $this->createMock(Quote::class); $paymentMock = $this->createMock(Payment::class); $quoteMock->expects($this->once())->method('getPayment')->willReturn($paymentMock); $paymentMock->expects($this->once())->method('getId')->willReturn(null); $this->quoteRepositoryMock->expects($this->once()) ->method('get') ->with($cartId) ->willReturn($quoteMock); $this->assertNull($this->model->get($cartId)); } public function testGetPaymentSuccess() { $cartId = 11; $paymentMock = $this->createMock(Payment::class); $paymentMock->expects($this->once())->method('getId')->willReturn(1); $quoteMock = $this->createMock(Quote::class); $quoteMock->expects($this->once())->method('getPayment')->willReturn($paymentMock); $this->quoteRepositoryMock->expects($this->once()) ->method('get') ->with($cartId) ->willReturn($quoteMock); $this->assertEquals($paymentMock, $this->model->get($cartId)); } public function testGetList() { $cartId = 10; $quoteMock = $this->createMock(Quote::class); $this->quoteRepositoryMock->expects($this->once()) ->method('get') ->with($cartId) ->willReturn($quoteMock); $paymentMethod = $this->getMockForAbstractClass(PaymentMethodInterface::class); $this->methodListMock->expects($this->once()) ->method('getAvailableMethods') ->with($quoteMock) ->willReturn([$paymentMethod]); $this->assertEquals([$paymentMethod], $this->model->getList($cartId)); } public function testSetVirtualProduct() { $cartId = 100; $paymentId = 200; $methodDataWithAdditionalData = ['method' => 'data', 'additional_data' => ['additional' => 'value']]; $methodData = $methodDataWithAdditionalData; $paymentMethod = 'checkmo'; $quoteMock = $this->getMockBuilder(Quote::class) ->addMethods(['setTotalsCollectedFlag']) ->onlyMethods(['getPayment', 'isVirtual', 'getBillingAddress', 'collectTotals', 'save']) ->disableOriginalConstructor() ->getMock(); $this->quoteRepositoryMock->expects($this->once())->method('get')->with($cartId)->willReturn($quoteMock); $methodMock = $this->getMockBuilder(Payment::class) ->addMethods(['setChecks']) ->onlyMethods(['getData']) ->disableOriginalConstructor() ->getMock(); $methodMock->expects($this->once()) ->method('setChecks') ->with( [ AbstractMethod::CHECK_USE_CHECKOUT, AbstractMethod::CHECK_USE_FOR_COUNTRY, AbstractMethod::CHECK_USE_FOR_CURRENCY, AbstractMethod::CHECK_ORDER_TOTAL_MIN_MAX, ] ) ->willReturnSelf(); $methodMock->expects($this->once())->method('getData')->willReturn($methodDataWithAdditionalData); $paymentMock = $this->createPartialMock( Payment::class, ['importData', 'getMethod', 'getMethodInstance', 'getId'] ); $paymentMock->expects($this->once())->method('importData')->with($methodData)->willReturnSelf(); $paymentMock->expects($this->once())->method('getMethod')->willReturn($paymentMethod); $billingAddressMock = $this->getMockBuilder(Address::class) ->addMethods(['setPaymentMethod']) ->onlyMethods(['getCountryId']) ->disableOriginalConstructor() ->getMock(); $billingAddressMock->expects($this->once()) ->method('setPaymentMethod') ->with($paymentMethod) ->willReturnSelf(); $quoteMock->method('getPayment')->willReturn($paymentMock); $quoteMock->expects($this->once())->method('isVirtual')->willReturn(true); $quoteMock->expects($this->once())->method('getBillingAddress')->willReturn($billingAddressMock); $methodInstance = $this->getMockForAbstractClass(MethodInterface::class); $paymentMock->expects($this->once())->method('getMethodInstance')->willReturn($methodInstance); $this->zeroTotalMock->expects($this->once()) ->method('isApplicable') ->with($methodInstance, $quoteMock) ->willReturn(true); $quoteMock->expects($this->once())->method('setTotalsCollectedFlag')->with(false)->willReturnSelf(); $quoteMock->expects($this->once())->method('save')->willReturnSelf(); $paymentMock->expects($this->once())->method('getId')->willReturn($paymentId); $this->assertEquals($paymentId, $this->model->set($cartId, $methodMock)); } public function testSetVirtualProductThrowsExceptionIfPaymentMethodNotAvailable() { $this->expectException('Magento\Framework\Exception\State\InvalidTransitionException'); $this->expectExceptionMessage('The requested Payment Method is not available.'); $cartId = 100; $methodData = ['method' => 'data']; $paymentMethod = 'checkmo'; $quoteMock = $this->createPartialMock( Quote::class, ['getPayment', 'isVirtual', 'getBillingAddress'] ); $this->quoteRepositoryMock->expects($this->once())->method('get')->with($cartId)->willReturn($quoteMock); $methodMock = $this->getMockBuilder(Payment::class) ->addMethods(['setChecks']) ->onlyMethods(['getData']) ->disableOriginalConstructor() ->getMock(); $methodMock->expects($this->once()) ->method('setChecks') ->with( [ AbstractMethod::CHECK_USE_CHECKOUT, AbstractMethod::CHECK_USE_FOR_COUNTRY, AbstractMethod::CHECK_USE_FOR_CURRENCY, AbstractMethod::CHECK_ORDER_TOTAL_MIN_MAX, ] ) ->willReturnSelf(); $methodMock->expects($this->once())->method('getData')->willReturn($methodData); $paymentMock = $this->createPartialMock( Payment::class, ['importData', 'getMethod', 'getMethodInstance'] ); $paymentMock->expects($this->once())->method('importData')->with($methodData)->willReturnSelf(); $paymentMock->expects($this->once())->method('getMethod')->willReturn($paymentMethod); $billingAddressMock = $this->getMockBuilder(Address::class) ->addMethods(['setPaymentMethod']) ->onlyMethods(['getCountryId']) ->disableOriginalConstructor() ->getMock(); $billingAddressMock->expects($this->once()) ->method('setPaymentMethod') ->with($paymentMethod) ->willReturnSelf(); $quoteMock->method('getPayment')->willReturn($paymentMock); $quoteMock->method('isVirtual')->willReturn(true); $quoteMock->method('getBillingAddress')->willReturn($billingAddressMock); $methodInstance = $this->getMockForAbstractClass(MethodInterface::class); $paymentMock->expects($this->once())->method('getMethodInstance')->willReturn($methodInstance); $this->zeroTotalMock->expects($this->once()) ->method('isApplicable') ->with($methodInstance, $quoteMock) ->willReturn(false); $this->model->set($cartId, $methodMock); } public function testSetSimpleProduct() { $cartId = 100; $paymentId = 20; $methodData = ['method' => 'data']; $paymentMethod = 'checkmo'; $quoteMock = $this->getMockBuilder(Quote::class) ->addMethods(['setTotalsCollectedFlag']) ->onlyMethods(['getPayment', 'isVirtual', 'getShippingAddress', 'collectTotals', 'save']) ->disableOriginalConstructor() ->getMock(); $this->quoteRepositoryMock->expects($this->once())->method('get')->with($cartId)->willReturn($quoteMock); $methodMock = $this->getMockBuilder(Payment::class) ->addMethods(['setChecks']) ->onlyMethods(['getData']) ->disableOriginalConstructor() ->getMock(); $methodMock->expects($this->once()) ->method('setChecks') ->with( [ AbstractMethod::CHECK_USE_CHECKOUT, AbstractMethod::CHECK_USE_FOR_COUNTRY, AbstractMethod::CHECK_USE_FOR_CURRENCY, AbstractMethod::CHECK_ORDER_TOTAL_MIN_MAX, ] ) ->willReturnSelf(); $methodMock->expects($this->once())->method('getData')->willReturn($methodData); $paymentMock = $this->createPartialMock( Payment::class, ['importData', 'getMethod', 'getMethodInstance', 'getId'] ); $paymentMock->expects($this->once())->method('importData')->with($methodData)->willReturnSelf(); $paymentMock->expects($this->once())->method('getMethod')->willReturn($paymentMethod); $shippingAddressMock = $this->getMockBuilder(Address::class) ->addMethods(['setPaymentMethod', 'setCollectShippingRates']) ->onlyMethods(['getCountryId']) ->disableOriginalConstructor() ->getMock(); $shippingAddressMock->expects($this->once())->method('getCountryId')->willReturn(100); $shippingAddressMock->expects($this->once()) ->method('setPaymentMethod') ->with($paymentMethod) ->willReturnSelf(); $shippingAddressMock->expects($this->once()) ->method('setCollectShippingRates') ->with(true); $quoteMock->method('getPayment')->willReturn($paymentMock); $quoteMock->method('isVirtual')->willReturn(false); $quoteMock->method('getShippingAddress')->willReturn($shippingAddressMock); $methodInstance = $this->getMockForAbstractClass(MethodInterface::class); $paymentMock->expects($this->once())->method('getMethodInstance')->willReturn($methodInstance); $this->zeroTotalMock->expects($this->once()) ->method('isApplicable') ->with($methodInstance, $quoteMock) ->willReturn(true); $quoteMock->expects($this->once())->method('setTotalsCollectedFlag')->with(false)->willReturnSelf(); $quoteMock->expects($this->once())->method('save')->willReturnSelf(); $paymentMock->expects($this->once())->method('getId')->willReturn($paymentId); $this->assertEquals($paymentId, $this->model->set($cartId, $methodMock)); } public function testSetSimpleProductTrowsExceptionIfShippingAddressNotSet() { $this->expectException('Magento\Framework\Exception\State\InvalidTransitionException'); $this->expectExceptionMessage('The shipping address is missing. Set the address and try again.'); $cartId = 100; $quoteMock = $this->createPartialMock( Quote::class, ['getPayment', 'isVirtual', 'getShippingAddress'] ); $this->quoteRepositoryMock->expects($this->once())->method('get')->with($cartId)->willReturn($quoteMock); /** @var \Magento\Quote\Model\Quote\Payment|MockObject $methodMock */ $methodMock = $this->getMockBuilder(Payment::class) ->addMethods(['setChecks']) ->onlyMethods(['getData']) ->disableOriginalConstructor() ->getMock(); $methodMock->expects($this->once()) ->method('setChecks') ->with([ AbstractMethod::CHECK_USE_CHECKOUT, AbstractMethod::CHECK_USE_FOR_COUNTRY, AbstractMethod::CHECK_USE_FOR_CURRENCY, AbstractMethod::CHECK_ORDER_TOTAL_MIN_MAX, ]) ->willReturnSelf(); $methodMock->expects($this->never())->method('getData'); $shippingAddressMock = $this->createPartialMock(Address::class, ['getCountryId']); $shippingAddressMock->expects($this->once())->method('getCountryId')->willReturn(null); $quoteMock->method('isVirtual')->willReturn(false); $quoteMock->method('getShippingAddress')->willReturn($shippingAddressMock); $this->model->set($cartId, $methodMock); } }