132 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			132 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
<?php
 | 
						|
/**
 | 
						|
 * Copyright © Magento, Inc. All rights reserved.
 | 
						|
 * See COPYING.txt for license details.
 | 
						|
 */
 | 
						|
declare(strict_types=1);
 | 
						|
 | 
						|
namespace Magento\Paypal\Controller\Billing;
 | 
						|
 | 
						|
use Magento\Customer\Model\Session;
 | 
						|
use Magento\Framework\App\Action\Context;
 | 
						|
use Magento\Framework\App\RequestInterface;
 | 
						|
use Magento\Framework\ObjectManagerInterface;
 | 
						|
use Magento\Payment\Helper\Data;
 | 
						|
use Magento\Paypal\Controller\Billing\Agreement\ReturnWizard;
 | 
						|
use Magento\Paypal\Model\Express;
 | 
						|
use Magento\Paypal\Model\ResourceModel\Billing\Agreement\Collection;
 | 
						|
use Magento\Store\Model\StoreManager;
 | 
						|
use Magento\TestFramework\Helper\Bootstrap;
 | 
						|
use Magento\TestFramework\TestCase\AbstractController;
 | 
						|
 | 
						|
/**
 | 
						|
 * Test class for \Magento\Paypal\Controller\Billing\Agreement
 | 
						|
 */
 | 
						|
class AgreementTest extends AbstractController
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * Test billing agreement record creation in Magento DB.
 | 
						|
     *
 | 
						|
     * All mocking effort is aimed to disable remote call for billing agreement creation in the external system.
 | 
						|
     * Request parameters and current customer are emulated as well.
 | 
						|
     *
 | 
						|
     * @magentoDataFixture Magento/Customer/_files/customer.php
 | 
						|
     * @magentoDbIsolation enabled
 | 
						|
     * @magentoAppArea frontend
 | 
						|
     *
 | 
						|
     * @return void
 | 
						|
     */
 | 
						|
    public function testReturnWizardAction(): void
 | 
						|
    {
 | 
						|
        $paymentMethod = "paypal_express";
 | 
						|
        $token = "token_value";
 | 
						|
        $referenceId = "Reference-id-1";
 | 
						|
 | 
						|
        $objectManager = Bootstrap::getObjectManager();
 | 
						|
 | 
						|
        /** Mock Request */
 | 
						|
        $requestMock = $this->getMockForAbstractClass(RequestInterface::class, [], '', false);
 | 
						|
        $requestMock->expects($this->any())
 | 
						|
            ->method('getParam')
 | 
						|
            ->willReturnMap(
 | 
						|
                [
 | 
						|
                    ['payment_method', null, $paymentMethod],
 | 
						|
                    ['token', null, $token]
 | 
						|
                ]
 | 
						|
            );
 | 
						|
 | 
						|
        /**
 | 
						|
         * Disable billing agreement placement using calls to remote system
 | 
						|
         * in \Magento\Paypal\Model\Billing\Agreement::place()
 | 
						|
         */
 | 
						|
        $objectManagerMock = $this->createMock(ObjectManagerInterface::class);
 | 
						|
        $paymentMethodMock = $this->getMockBuilder(Express::class)
 | 
						|
            ->disableOriginalConstructor()
 | 
						|
            ->disableOriginalClone()
 | 
						|
            ->disableArgumentCloning()
 | 
						|
            ->disallowMockingUnknownTypes()
 | 
						|
            ->onlyMethods(['getTitle', 'setStore'])
 | 
						|
            ->addMethods(['placeBillingAgreement'])
 | 
						|
            ->getMock();
 | 
						|
        $paymentMethodMock->expects($this->any())->method('placeBillingAgreement')->willReturnSelf();
 | 
						|
        $paymentMethodMock->expects($this->any())->method('getTitle')->willReturn($paymentMethod);
 | 
						|
 | 
						|
        $paymentHelperMock = $this->createPartialMock(Data::class, ['getMethodInstance']);
 | 
						|
        $paymentHelperMock->expects($this->any())
 | 
						|
            ->method('getMethodInstance')
 | 
						|
            ->willReturn($paymentMethodMock);
 | 
						|
        $billingAgreement = $objectManager->create(
 | 
						|
            \Magento\Paypal\Model\Billing\Agreement::class,
 | 
						|
            ['paymentData' => $paymentHelperMock]
 | 
						|
        );
 | 
						|
        /** Reference ID is normally set by placeBillingAgreement() and is an agreement ID in the external system. */
 | 
						|
        $billingAgreement->setBillingAgreementId($referenceId);
 | 
						|
        $objectManagerMock->expects($this->once())
 | 
						|
            ->method('create')
 | 
						|
            ->with(\Magento\Paypal\Model\Billing\Agreement::class, [])
 | 
						|
            ->willReturn($billingAgreement);
 | 
						|
        $storeManager = $objectManager->get(StoreManager::class);
 | 
						|
        $customerSession = $objectManager->get(Session::class);
 | 
						|
        $objectManagerMock->expects($this->any())
 | 
						|
            ->method('get')
 | 
						|
            ->willReturnMap(
 | 
						|
                [
 | 
						|
                    [StoreManager::class, $storeManager],
 | 
						|
                    [Session::class, $customerSession],
 | 
						|
                ]
 | 
						|
            );
 | 
						|
        $contextMock = $objectManager->create(
 | 
						|
            Context::class,
 | 
						|
            [
 | 
						|
                'objectManager' => $objectManagerMock,
 | 
						|
                'request' => $requestMock
 | 
						|
            ]
 | 
						|
        );
 | 
						|
        /** @var \Magento\Paypal\Controller\Billing\Agreement $billingAgreementController */
 | 
						|
        $billingAgreementController = $objectManager->create(
 | 
						|
            ReturnWizard::class,
 | 
						|
            ['context' => $contextMock]
 | 
						|
        );
 | 
						|
 | 
						|
        /** Initialize current customer */
 | 
						|
        /** @var Session $customerSession */
 | 
						|
        $customerSession = $objectManager->get(Session::class);
 | 
						|
        $fixtureCustomerId = 1;
 | 
						|
        $customerSession->setCustomerId($fixtureCustomerId);
 | 
						|
 | 
						|
        /** Execute SUT */
 | 
						|
        $billingAgreementController->execute();
 | 
						|
 | 
						|
        /** Ensure that billing agreement record was created in the DB */
 | 
						|
        /** @var Collection $billingAgreementCollection */
 | 
						|
        $billingAgreementCollection = $objectManager->create(
 | 
						|
            Collection::class
 | 
						|
        );
 | 
						|
        /** @var \Magento\Paypal\Model\Billing\Agreement $createdBillingAgreement */
 | 
						|
        $createdBillingAgreement = $billingAgreementCollection->getLastItem();
 | 
						|
        $this->assertEquals($fixtureCustomerId, $createdBillingAgreement->getCustomerId(), "Customer ID is invalid.");
 | 
						|
        $this->assertEquals($referenceId, $createdBillingAgreement->getReferenceId(), "Reference ID is invalid.");
 | 
						|
        $this->assertEquals($paymentMethod, $createdBillingAgreement->getMethodCode(), "Method code is invalid.");
 | 
						|
    }
 | 
						|
}
 |