123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Paypal\Test\Unit\Model\Api;
- use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
- use Magento\Paypal\Model\Info;
- /**
- * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
- */
- class NvpTest extends \PHPUnit\Framework\TestCase
- {
- /** @var \Magento\Paypal\Model\Api\Nvp */
- protected $model;
- /** @var \Magento\Customer\Helper\Address|\PHPUnit_Framework_MockObject_MockObject */
- protected $customerAddressHelper;
- /** @var \Psr\Log\LoggerInterface|\PHPUnit_Framework_MockObject_MockObject */
- protected $logger;
- /** @var \Magento\Framework\Locale\ResolverInterface|\PHPUnit_Framework_MockObject_MockObject */
- protected $resolver;
- /** @var \Magento\Directory\Model\RegionFactory|\PHPUnit_Framework_MockObject_MockObject */
- protected $regionFactory;
- /** @var \Magento\Directory\Model\CountryFactory|\PHPUnit_Framework_MockObject_MockObject */
- protected $countryFactory;
- /** @var \Magento\Paypal\Model\Api\ProcessableException|\PHPUnit_Framework_MockObject_MockObject */
- protected $processableException;
- /** @var \Magento\Framework\Exception\LocalizedException|\PHPUnit_Framework_MockObject_MockObject */
- protected $exception;
- /** @var \Magento\Framework\HTTP\Adapter\Curl|\PHPUnit_Framework_MockObject_MockObject */
- protected $curl;
- /** @var \Magento\Paypal\Model\Config|\PHPUnit_Framework_MockObject_MockObject */
- protected $config;
- /** @var \Magento\Payment\Model\Method\Logger|\PHPUnit_Framework_MockObject_MockObject */
- protected $customLoggerMock;
- protected function setUp()
- {
- $this->customerAddressHelper = $this->createMock(\Magento\Customer\Helper\Address::class);
- $this->logger = $this->createMock(\Psr\Log\LoggerInterface::class);
- $this->customLoggerMock = $this->getMockBuilder(\Magento\Payment\Model\Method\Logger::class)
- ->setConstructorArgs([$this->getMockForAbstractClass(\Psr\Log\LoggerInterface::class)])
- ->setMethods(['debug'])
- ->getMock();
- $this->resolver = $this->createMock(\Magento\Framework\Locale\ResolverInterface::class);
- $this->regionFactory = $this->createMock(\Magento\Directory\Model\RegionFactory::class);
- $this->countryFactory = $this->createMock(\Magento\Directory\Model\CountryFactory::class);
- $processableExceptionFactory = $this->createPartialMock(
- \Magento\Paypal\Model\Api\ProcessableExceptionFactory::class,
- ['create']
- );
- $processableExceptionFactory->expects($this->any())
- ->method('create')
- ->will($this->returnCallback(function ($arguments) {
- $this->processableException = $this->getMockBuilder(
- \Magento\Paypal\Model\Api\ProcessableException::class
- )
- ->setConstructorArgs([$arguments['phrase'], null, $arguments['code']])
- ->getMock();
- return $this->processableException;
- }));
- $exceptionFactory = $this->createPartialMock(
- \Magento\Framework\Exception\LocalizedExceptionFactory::class,
- ['create']
- );
- $exceptionFactory->expects($this->any())
- ->method('create')
- ->will($this->returnCallback(function ($arguments) {
- $this->exception = $this->getMockBuilder(\Magento\Framework\Exception\LocalizedException::class)
- ->setConstructorArgs([$arguments['phrase']])
- ->getMock();
- return $this->exception;
- }));
- $this->curl = $this->createMock(\Magento\Framework\HTTP\Adapter\Curl::class);
- $curlFactory = $this->createPartialMock(\Magento\Framework\HTTP\Adapter\CurlFactory::class, ['create']);
- $curlFactory->expects($this->any())->method('create')->will($this->returnValue($this->curl));
- $this->config = $this->createMock(\Magento\Paypal\Model\Config::class);
- $helper = new ObjectManagerHelper($this);
- $this->model = $helper->getObject(
- \Magento\Paypal\Model\Api\Nvp::class,
- [
- 'customerAddress' => $this->customerAddressHelper,
- 'logger' => $this->logger,
- 'customLogger' => $this->customLoggerMock,
- 'localeResolver' => $this->resolver,
- 'regionFactory' => $this->regionFactory,
- 'countryFactory' => $this->countryFactory,
- 'processableExceptionFactory' => $processableExceptionFactory,
- 'frameworkExceptionFactory' => $exceptionFactory,
- 'curlFactory' => $curlFactory,
- ]
- );
- $this->model->setConfigObject($this->config);
- }
- /**
- * @param \Magento\Paypal\Model\Api\Nvp $nvpObject
- * @param string $property
- * @return mixed
- */
- protected function _invokeNvpProperty(\Magento\Paypal\Model\Api\Nvp $nvpObject, $property)
- {
- $object = new \ReflectionClass($nvpObject);
- $property = $object->getProperty($property);
- $property->setAccessible(true);
- return $property->getValue($nvpObject);
- }
- /**
- * @param string $response
- * @param array $processableErrors
- * @param null|string $exception
- * @param string $exceptionMessage
- * @param null|int $exceptionCode
- * @dataProvider callDataProvider
- */
- public function testCall($response, $processableErrors, $exception, $exceptionMessage = '', $exceptionCode = null)
- {
- if (isset($exception)) {
- $this->expectException($exception);
- $this->expectExceptionMessage($exceptionMessage);
- $this->expectExceptionCode($exceptionCode);
- }
- $this->curl->expects($this->once())
- ->method('read')
- ->will($this->returnValue($response));
- $this->model->setProcessableErrors($processableErrors);
- $this->customLoggerMock->expects($this->once())
- ->method('debug');
- $this->model->call('some method', ['data' => 'some data']);
- }
- /**
- * @return array
- */
- public function callDataProvider()
- {
- return [
- ['', [], null],
- [
- "\r\n" . 'ACK=Failure&L_ERRORCODE0=10417&L_SHORTMESSAGE0=Message.&L_LONGMESSAGE0=Long%20Message.',
- [],
- \Magento\Framework\Exception\LocalizedException::class,
- 'PayPal gateway has rejected request. Long Message (#10417: Message).',
- 0
- ],
- [
- "\r\n" . 'ACK=Failure&L_ERRORCODE0=10417&L_SHORTMESSAGE0=Message.&L_LONGMESSAGE0=Long%20Message.',
- [10417, 10422],
- \Magento\Paypal\Model\Api\ProcessableException::class,
- 'PayPal gateway has rejected request. Long Message (#10417: Message).',
- 10417
- ],
- [
- "\r\n" . 'ACK[7]=Failure&L_ERRORCODE0[5]=10417'
- . '&L_SHORTMESSAGE0[8]=Message.&L_LONGMESSAGE0[15]=Long%20Message.',
- [10417, 10422],
- \Magento\Paypal\Model\Api\ProcessableException::class,
- 'PayPal gateway has rejected request. Long Message (#10417: Message).',
- 10417
- ],
- [
- "\r\n" . 'ACK[7]=Failure&L_ERRORCODE0[5]=10417&L_SHORTMESSAGE0[8]=Message.',
- [10417, 10422],
- \Magento\Paypal\Model\Api\ProcessableException::class,
- 'PayPal gateway has rejected request. #10417: Message.',
- 10417
- ],
- ];
- }
- public function testCallGetExpressCheckoutDetails()
- {
- $this->curl->expects($this->once())
- ->method('read')
- ->will($this->returnValue(
- "\r\n" . 'ACK=Success&SHIPTONAME=Ship%20To%20Name'
- . '&SHIPTOSTREET=testStreet'
- . '&SHIPTOSTREET2=testApartment'
- . '&BUSINESS=testCompany'
- . '&SHIPTOCITY=testCity'
- . '&PHONENUM=223322'
- . '&STATE=testSTATE'
- ));
- $this->model->callGetExpressCheckoutDetails();
- $address = $this->model->getExportedShippingAddress();
- $this->assertEquals('Ship To Name', $address->getData('firstname'));
- $this->assertEquals(implode("\n", ['testStreet','testApartment']), $address->getStreet());
- $this->assertEquals('testCompany', $address->getCompany());
- $this->assertEquals('testCity', $address->getCity());
- $this->assertEquals('223322', $address->getTelephone());
- $this->assertEquals('testSTATE', $address->getRegion());
- }
- /**
- * Tests that callDoReauthorization method is called without errors and
- * needed data is imported from response.
- */
- public function testCallDoReauthorization()
- {
- $authorizationId = 555;
- $paymentStatus = 'Completed';
- $pendingReason = 'none';
- $protectionEligibility = 'Eligible';
- $protectionEligibilityType = 'ItemNotReceivedEligible';
- $this->curl->expects($this->once())
- ->method('read')
- ->willReturn(
- "\r\n" . 'ACK=Success'
- . '&AUTHORIZATIONID=' . $authorizationId
- . '&PAYMENTSTATUS=' . $paymentStatus
- . '&PENDINGREASON=' . $pendingReason
- . '&PROTECTIONELIGIBILITY=' . $protectionEligibility
- . '&PROTECTIONELIGIBILITYTYPE=' . $protectionEligibilityType
- );
- $this->model->callDoReauthorization();
- $expectedImportedData = [
- 'authorization_id' => $authorizationId,
- 'payment_status' => Info::PAYMENTSTATUS_COMPLETED,
- 'pending_reason' => $pendingReason,
- 'protection_eligibility' => $protectionEligibility
- ];
- $this->assertNotContains($protectionEligibilityType, $this->model->getData());
- $this->assertEquals($expectedImportedData, $this->model->getData());
- }
- public function testGetDebugReplacePrivateDataKeys()
- {
- $debugReplacePrivateDataKeys = $this->_invokeNvpProperty($this->model, '_debugReplacePrivateDataKeys');
- $this->assertEquals($debugReplacePrivateDataKeys, $this->model->getDebugReplacePrivateDataKeys());
- }
- /**
- * Tests case if obtained response with code 10415 'Transaction has already
- * been completed for this token'. It must does not throws the exception and
- * must returns response array.
- */
- public function testCallTransactionHasBeenCompleted()
- {
- $response = "\r\n" . 'ACK[7]=Failure&L_ERRORCODE0[5]=10415'
- . '&L_SHORTMESSAGE0[8]=Message.&L_LONGMESSAGE0[15]=Long%20Message.';
- $processableErrors =[10415];
- $this->curl->expects($this->once())
- ->method('read')
- ->will($this->returnValue($response));
- $this->model->setProcessableErrors($processableErrors);
- $this->customLoggerMock->expects($this->once())
- ->method('debug');
- $expectedResponse = [
- 'ACK' => 'Failure',
- 'L_ERRORCODE0' => '10415',
- 'L_SHORTMESSAGE0' => 'Message.',
- 'L_LONGMESSAGE0' => 'Long Message.'
- ];
- $this->assertEquals($expectedResponse, $this->model->call('some method', ['data' => 'some data']));
- }
- }
|