From 6ccada9bb823d9034e89e2a593a8b23920a68a04 Mon Sep 17 00:00:00 2001 From: Ievgen Sentiabov Date: Sat, 11 Jun 2016 10:01:07 +0300 Subject: [PATCH] MAGETWO-54214: Order can't be placed via Payflow Pro payment method - Added assignData method for Payflow Pro model --- app/code/Magento/Paypal/Model/Payflowpro.php | 41 ++++++++++++++++--- .../Paypal/Test/Unit/Model/PayflowproTest.php | 32 +++++++++++++++ 2 files changed, 67 insertions(+), 6 deletions(-) diff --git a/app/code/Magento/Paypal/Model/Payflowpro.php b/app/code/Magento/Paypal/Model/Payflowpro.php index e8a2c326de486..ec96cb19c5937 100644 --- a/app/code/Magento/Paypal/Model/Payflowpro.php +++ b/app/code/Magento/Paypal/Model/Payflowpro.php @@ -8,18 +8,17 @@ use Magento\Framework\DataObject; use Magento\Framework\Exception\LocalizedException; use Magento\Payment\Model\InfoInterface; +use Magento\Payment\Model\Method\ConfigInterface; use Magento\Payment\Model\Method\ConfigInterfaceFactory; +use Magento\Payment\Model\Method\Online\GatewayInterface; +use Magento\Payment\Observer\AbstractDataAssignObserver; +use Magento\Paypal\Model\Config; use Magento\Paypal\Model\Payflow\Service\Gateway; use Magento\Paypal\Model\Payflow\Service\Response\Handler\HandlerInterface; -use Magento\Paypal\Model\Payflow\Transparent; use Magento\Quote\Model\Quote; -use Magento\Sales\Model\Order\Payment; -use Magento\Payment\Model\Method\Online\GatewayInterface; -use Magento\Payment\Model\Method\ConfigInterface; -use Magento\Paypal\Model\Config; use Magento\Sales\Model\Order; +use Magento\Sales\Model\Order\Payment; use Magento\Store\Model\ScopeInterface; -use Magento\Vault\Api\Data\PaymentTokenInterface; /** * Payflow Pro payment gateway model @@ -861,6 +860,36 @@ public function addRequestOrderInfo(DataObject $request, Order $order) ->setComment1($orderIncrementId); } + /** + * Assign data to info model instance + * + * @param array|DataObject $data + * @return $this + * @throws \Magento\Framework\Exception\LocalizedException + */ + public function assignData(DataObject $data) + { + $this->_eventManager->dispatch( + 'payment_method_assign_data_' . $this->getCode(), + [ + AbstractDataAssignObserver::METHOD_CODE => $this, + AbstractDataAssignObserver::MODEL_CODE => $this->getInfoInstance(), + AbstractDataAssignObserver::DATA_CODE => $data + ] + ); + + $this->_eventManager->dispatch( + 'payment_method_assign_data', + [ + AbstractDataAssignObserver::METHOD_CODE => $this, + AbstractDataAssignObserver::MODEL_CODE => $this->getInfoInstance(), + AbstractDataAssignObserver::DATA_CODE => $data + ] + ); + + return $this; + } + /** * @param InfoInterface $payment * @param string $transactionId diff --git a/app/code/Magento/Paypal/Test/Unit/Model/PayflowproTest.php b/app/code/Magento/Paypal/Test/Unit/Model/PayflowproTest.php index 5c899714253fa..eb59cf44a13c5 100644 --- a/app/code/Magento/Paypal/Test/Unit/Model/PayflowproTest.php +++ b/app/code/Magento/Paypal/Test/Unit/Model/PayflowproTest.php @@ -11,10 +11,12 @@ use Magento\Framework\DataObject; use Magento\Framework\Exception\LocalizedException; +use Magento\Framework\Event\ManagerInterface; use Magento\Payment\Model\Method\ConfigInterface; use Magento\Paypal\Model\Config; use Magento\Paypal\Model\Payflowpro; use Magento\Store\Model\ScopeInterface; +use Magento\Payment\Model\InfoInterface; /** * Class PayflowproTest @@ -54,6 +56,11 @@ class PayflowproTest extends \PHPUnit_Framework_TestCase */ protected $scopeConfigMock; + /** + * @var ManagerInterface|\PHPUnit_Framework_MockObject_MockObject + */ + private $eventManager; + protected function setUp() { $configFactoryMock = $this->getMock( @@ -114,10 +121,13 @@ protected function setUp() $clientFactory = $this->getMock('Magento\Framework\HTTP\ZendClientFactory', ['create'], [], '', false); $clientFactory->expects($this->any())->method('create')->will($this->returnValue($client)); + $this->eventManager = $this->getMockForAbstractClass(ManagerInterface::class); + $this->helper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this); $this->payflowpro = $this->helper->getObject( 'Magento\Paypal\Model\Payflowpro', [ + 'eventDispatcher' => $this->eventManager, 'configFactory' => $configFactoryMock, 'httpClientFactory' => $clientFactory, 'storeManager' => $this->storeManagerMock, @@ -498,4 +508,26 @@ public function testPostRequestException() $this->payflowpro->postRequest($request, $config); } + + /** + * @covers \Magento\Paypal\Model\Payflowpro::assignData + */ + public function testAssignData() + { + $data = [ + 'cc_type' => 'VI', + 'cc_last_4' => 1111, + 'cc_exp_month' => 12, + 'cc_exp_year' => 2023 + ]; + $dataObject = new DataObject($data); + + $infoInstance = $this->getMockForAbstractClass(InfoInterface::class); + $this->payflowpro->setData('info_instance', $infoInstance); + + $this->eventManager->expects(static::exactly(2)) + ->method('dispatch'); + + $this->payflowpro->assignData($dataObject); + } }