Skip to content

Commit f7b8fd1

Browse files
committed
MAGETWO-63910: Create infrastructure for mapper in Payment module
- Added payment method code validation to Braintree mappers - Updated default payment verification mapper and factory for creating mappers
1 parent 3ea78ad commit f7b8fd1

File tree

4 files changed

+67
-0
lines changed

4 files changed

+67
-0
lines changed

app/code/Magento/Braintree/Model/AvsEmsCodeMapper.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
*/
66
namespace Magento\Braintree\Model;
77

8+
use Magento\Braintree\Model\Ui\ConfigProvider;
89
use Magento\Braintree\Gateway\Response\PaymentDetailsHandler;
910
use Magento\Payment\Api\PaymentVerificationInterface;
1011
use Magento\Sales\Api\Data\OrderPaymentInterface;
@@ -43,18 +44,25 @@ class AvsEmsCodeMapper implements PaymentVerificationInterface
4344
/**
4445
* Gets payment AVS verification code.
4546
* Returns null if payment does not contain any AVS details.
47+
* Throws an exception if specified order payment has different payment method code.
4648
*
4749
* @param OrderPaymentInterface $orderPayment
4850
* @return string
51+
* @throws \Exception
4952
*/
5053
public function getCode(OrderPaymentInterface $orderPayment)
5154
{
55+
if ($orderPayment->getMethod() !== ConfigProvider::CODE) {
56+
throw new \Exception('"' . $orderPayment->getMethod() . '" does not supported by Braintree AVS mapper.');
57+
}
58+
5259
$additionalInfo = $orderPayment->getAdditionalInformation();
5360
if (empty($additionalInfo[PaymentDetailsHandler::AVS_POSTAL_RESPONSE_CODE]) ||
5461
empty($additionalInfo[PaymentDetailsHandler::AVS_STREET_ADDRESS_RESPONSE_CODE])
5562
) {
5663
return self::$unavailableCode;
5764
}
65+
5866
$streetCode = $additionalInfo[PaymentDetailsHandler::AVS_STREET_ADDRESS_RESPONSE_CODE];
5967
$zipCode = $additionalInfo[PaymentDetailsHandler::AVS_POSTAL_RESPONSE_CODE];
6068
$key = $zipCode . $streetCode;

app/code/Magento/Braintree/Model/CvvEmsCodeMapper.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
namespace Magento\Braintree\Model;
77

88
use Magento\Braintree\Gateway\Response\PaymentDetailsHandler;
9+
use Magento\Braintree\Model\Ui\ConfigProvider;
910
use Magento\Payment\Api\PaymentVerificationInterface;
1011
use Magento\Sales\Api\Data\OrderPaymentInterface;
1112

@@ -42,12 +43,18 @@ class CvvEmsCodeMapper implements PaymentVerificationInterface
4243
/**
4344
* Gets payment CVV verification code.
4445
* Returns null if payment does not contain any CVV details.
46+
* Throws an exception if specified order payment has different payment method code.
4547
*
4648
* @param OrderPaymentInterface $orderPayment
4749
* @return string
50+
* @throws \Exception
4851
*/
4952
public function getCode(OrderPaymentInterface $orderPayment)
5053
{
54+
if ($orderPayment->getMethod() !== ConfigProvider::CODE) {
55+
throw new \Exception('"' . $orderPayment->getMethod() . '" does not supported by Braintree CVV mapper.');
56+
}
57+
5158
$additionalInfo = $orderPayment->getAdditionalInformation();
5259
if (empty($additionalInfo[PaymentDetailsHandler::CVV_RESPONSE_CODE])) {
5360
return self::$notProvidedCode;

app/code/Magento/Braintree/Test/Unit/Model/AvsEmsCodeMapperTest.php

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
namespace Magento\Braintree\Test\Unit\Model;
77

88
use Magento\Braintree\Model\AvsEmsCodeMapper;
9+
use Magento\Braintree\Model\Ui\ConfigProvider;
910
use Magento\Sales\Api\Data\OrderPaymentInterface;
1011
use PHPUnit_Framework_MockObject_MockObject as MockObject;
1112

@@ -40,6 +41,10 @@ public function testGetCode($avsZip, $avsStreet, $expected)
4041
->disableOriginalConstructor()
4142
->getMock();
4243

44+
$orderPayment->expects(self::once())
45+
->method('getMethod')
46+
->willReturn(ConfigProvider::CODE);
47+
4348
$orderPayment->expects(self::once())
4449
->method('getAdditionalInformation')
4550
->willReturn([
@@ -50,6 +55,27 @@ public function testGetCode($avsZip, $avsStreet, $expected)
5055
self::assertEquals($expected, $this->mapper->getCode($orderPayment));
5156
}
5257

58+
/**
59+
* Checks a test case, when payment order is not Braintree payment method.
60+
*
61+
* @covers \Magento\Braintree\Model\AvsEmsCodeMapper::getCode
62+
* @expectedException \Exception
63+
* @expectedExceptionMessage "some_payment" does not supported by Braintree AVS mapper.
64+
*/
65+
public function testGetCodeWithException()
66+
{
67+
/** @var OrderPaymentInterface|MockObject $orderPayment */
68+
$orderPayment = $this->getMockBuilder(OrderPaymentInterface::class)
69+
->disableOriginalConstructor()
70+
->getMock();
71+
72+
$orderPayment->expects(self::exactly(2))
73+
->method('getMethod')
74+
->willReturn('some_payment');
75+
76+
$this->mapper->getCode($orderPayment);
77+
}
78+
5379
/**
5480
* Gets list of AVS codes.
5581
*

app/code/Magento/Braintree/Test/Unit/Model/CvvEmsCodeMapperTest.php

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
namespace Magento\Braintree\Test\Unit\Model;
77

88
use Magento\Braintree\Model\CvvEmsCodeMapper;
9+
use Magento\Braintree\Model\Ui\ConfigProvider;
910
use Magento\Sales\Api\Data\OrderPaymentInterface;
1011
use PHPUnit_Framework_MockObject_MockObject as MockObject;
1112

@@ -39,13 +40,38 @@ public function testGetCode($cvvCode, $expected)
3940
->disableOriginalConstructor()
4041
->getMock();
4142

43+
$orderPayment->expects(self::once())
44+
->method('getMethod')
45+
->willReturn(ConfigProvider::CODE);
46+
4247
$orderPayment->expects(self::once())
4348
->method('getAdditionalInformation')
4449
->willReturn(['cvvResponseCode' => $cvvCode]);
4550

4651
self::assertEquals($expected, $this->mapper->getCode($orderPayment));
4752
}
4853

54+
/**
55+
* Checks a test case, when payment order is not Braintree payment method.
56+
*
57+
* @covers \Magento\Braintree\Model\CvvEmsCodeMapper::getCode
58+
* @expectedException \Exception
59+
* @expectedExceptionMessage "some_payment" does not supported by Braintree CVV mapper.
60+
*/
61+
public function testGetCodeWithException()
62+
{
63+
/** @var OrderPaymentInterface|MockObject $orderPayment */
64+
$orderPayment = $this->getMockBuilder(OrderPaymentInterface::class)
65+
->disableOriginalConstructor()
66+
->getMock();
67+
68+
$orderPayment->expects(self::exactly(2))
69+
->method('getMethod')
70+
->willReturn('some_payment');
71+
72+
$this->mapper->getCode($orderPayment);
73+
}
74+
4975
/**
5076
* Gets variations of cvv codes and expected mapping result.
5177
*

0 commit comments

Comments
 (0)