168 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			168 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
<?php
 | 
						|
/**
 | 
						|
 * Copyright © Magento, Inc. All rights reserved.
 | 
						|
 * See COPYING.txt for license details.
 | 
						|
 */
 | 
						|
declare(strict_types=1);
 | 
						|
 | 
						|
namespace Magento\PaypalGraphQl;
 | 
						|
 | 
						|
use Magento\GraphQl\Controller\GraphQl;
 | 
						|
use Magento\GraphQl\Service\GraphQlRequest;
 | 
						|
use Magento\Paypal\Model\Payflow\Service\Gateway;
 | 
						|
use Magento\Quote\Model\Quote;
 | 
						|
use Magento\Quote\Model\QuoteFactory;
 | 
						|
use Magento\TestFramework\ObjectManager;
 | 
						|
use PHPUnit\Framework\MockObject\MockObject;
 | 
						|
use PHPUnit\Framework\TestCase;
 | 
						|
use Magento\TestFramework\Helper\Bootstrap;
 | 
						|
use Magento\Config\Model\Config;
 | 
						|
use Magento\Framework\App\Config\ScopeConfigInterface;
 | 
						|
 | 
						|
use Magento\Payment\Model\Method\Online\GatewayInterface;
 | 
						|
 | 
						|
/**
 | 
						|
 * Abstract class with common logic for Paypal GraphQl tests
 | 
						|
 *
 | 
						|
 * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
 | 
						|
 */
 | 
						|
abstract class PaypalPayflowProAbstractTest extends TestCase
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * @var GatewayInterface|MockObject
 | 
						|
     */
 | 
						|
    protected $gatewayMock;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var ObjectManager
 | 
						|
     */
 | 
						|
    protected $objectManager;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var GraphQl
 | 
						|
     */
 | 
						|
    protected $graphqlController;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var GraphQlRequest
 | 
						|
     */
 | 
						|
    protected $graphQlRequest;
 | 
						|
 | 
						|
    protected function setUp(): void
 | 
						|
    {
 | 
						|
        $this->objectManager = Bootstrap::getObjectManager();
 | 
						|
 | 
						|
        $this->objectManager->addSharedInstance($this->getGatewayMock(), Gateway::class);
 | 
						|
 | 
						|
        $this->graphqlController = $this->objectManager->get(GraphQl::class);
 | 
						|
 | 
						|
        $this->graphQlRequest = $this->objectManager->create(GraphQlRequest::class);
 | 
						|
    }
 | 
						|
 | 
						|
    protected function tearDown(): void
 | 
						|
    {
 | 
						|
        $this->disablePaypalPaymentMethods();
 | 
						|
        $this->objectManager->removeSharedInstance(Gateway::class);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Get quote by reserved order id
 | 
						|
     *
 | 
						|
     * @param $reservedOrderId
 | 
						|
     * @return Quote
 | 
						|
     */
 | 
						|
    protected function getQuoteByReservedOrderId($reservedOrderId): Quote
 | 
						|
    {
 | 
						|
        $quoteFactory = $this->objectManager->get(QuoteFactory::class);
 | 
						|
        /** @var Quote $quote */
 | 
						|
        $quote = $quoteFactory->create();
 | 
						|
 | 
						|
        $quote->load($reservedOrderId, 'reserved_order_id');
 | 
						|
        return $quote;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Enables Paypal payment method by payment code
 | 
						|
     *
 | 
						|
     * @return void
 | 
						|
     */
 | 
						|
    protected function enablePaymentMethod($methodCode): void
 | 
						|
    {
 | 
						|
        $config = $this->objectManager->get(Config::class);
 | 
						|
        $config->setScope(ScopeConfigInterface::SCOPE_TYPE_DEFAULT);
 | 
						|
 | 
						|
        $paymentMethodActive = 'payment/' . $methodCode . '/active';
 | 
						|
 | 
						|
        $config->setDataByPath($paymentMethodActive, '1');
 | 
						|
        $config->save();
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Disables list of Paypal payment methods
 | 
						|
     *
 | 
						|
     * @return void
 | 
						|
     */
 | 
						|
    protected function disablePaypalPaymentMethods(): void
 | 
						|
    {
 | 
						|
        $paypalMethods = [
 | 
						|
            'payflowpro',
 | 
						|
        ];
 | 
						|
        $config = $this->objectManager->get(Config::class);
 | 
						|
        $config->setScope(ScopeConfigInterface::SCOPE_TYPE_DEFAULT);
 | 
						|
 | 
						|
        foreach ($paypalMethods as $method) {
 | 
						|
            $paymentMethodActive = 'payment/' . $method . '/active';
 | 
						|
            $config->setDataByPath($paymentMethodActive, '0');
 | 
						|
            $config->save();
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Get mock of Gateway class
 | 
						|
     *
 | 
						|
     * @return GatewayInterface|MockObject
 | 
						|
     */
 | 
						|
    private function getGatewayMock()
 | 
						|
    {
 | 
						|
        if (empty($this->gatewayMock)) {
 | 
						|
            $this->gatewayMock = $this->getMockBuilder(Gateway::class)
 | 
						|
                ->disableOriginalConstructor()
 | 
						|
                ->setMethods(['postRequest'])
 | 
						|
                ->getMock();
 | 
						|
        }
 | 
						|
        return $this->gatewayMock;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Get GraphQl query for creating Paypal token
 | 
						|
     *
 | 
						|
     * @param string $cartId
 | 
						|
     * @param string $paymentMethod
 | 
						|
     * @return string
 | 
						|
     */
 | 
						|
    protected function getCreatePayflowTokenMutation(string $cartId): string
 | 
						|
    {
 | 
						|
 | 
						|
        return <<<QUERY
 | 
						|
mutation {
 | 
						|
  createPayflowProToken(
 | 
						|
    input: {
 | 
						|
      cart_id:"{$cartId}",
 | 
						|
      urls: {
 | 
						|
        cancel_url: "paypal/transparent/cancel/"
 | 
						|
        error_url: "paypal/transparent/error/"
 | 
						|
        return_url: "paypal/transparent/response/"
 | 
						|
      }
 | 
						|
    }
 | 
						|
  ) {
 | 
						|
    response_message
 | 
						|
    result
 | 
						|
    result_code
 | 
						|
    secure_token
 | 
						|
    secure_token_id
 | 
						|
  }
 | 
						|
}
 | 
						|
QUERY;
 | 
						|
    }
 | 
						|
}
 |