8 use Braintree\Result\Successful;
9 use Braintree\Transaction;
10 use Braintree\Transaction\CreditCardDetails;
18 use Magento\Sales\Api\Data\OrderPaymentExtension;
19 use Magento\Sales\Api\Data\OrderPaymentExtensionInterface;
20 use Magento\Sales\Api\Data\OrderPaymentExtensionInterfaceFactory;
24 use PHPUnit\Framework\TestCase;
25 use PHPUnit_Framework_MockObject_MockObject as MockObject;
34 private static $transactionId =
'432erwwe';
36 private static $token =
'rh3gd4';
41 private $paymentHandler;
51 private $paymentTokenFactory;
56 private $paymentExtension;
61 private $paymentExtensionFactory;
67 $this->paymentTokenFactory = $this->getMockBuilder(PaymentTokenFactoryInterface::class)
68 ->setMethods([
'create'])
69 ->disableOriginalConstructor()
71 $this->paymentTokenFactory->method(
'create')
75 $this->initPaymentExtensionAttributesMock();
76 $this->paymentExtension->method(
'setVaultPaymentToken')
78 $this->paymentExtension->method(
'getVaultPaymentToken')
81 $this->payment = $this->getMockBuilder(Payment::class)
82 ->disableOriginalConstructor()
83 ->setMethods([
'__wakeup',
'getExtensionAttributes'])
86 $this->payment->expects(self::any())->method(
'getExtensionAttributes')->willReturn($this->paymentExtension);
88 $config = $this->getConfigMock();
91 $this->paymentTokenFactory,
92 $this->paymentExtensionFactory,
101 $paymentData = $this->getPaymentDataObjectMock();
103 $subject = [
'payment' => $paymentData];
104 $response = [
'object' => $this->getBraintreeTransaction()];
106 $this->paymentHandler->handle($subject,
$response);
108 ->getVaultPaymentToken();
111 self::assertEquals(
'2022-01-01 00:00:00',
$paymentToken->getExpiresAt());
118 'expirationDate' =>
'12/2021' 131 $mock = $this->getMockBuilder(PaymentDataObject::class)
132 ->setMethods([
'getPayment'])
133 ->disableOriginalConstructor()
136 $mock->method(
'getPayment')
137 ->willReturn($this->payment);
147 private function getBraintreeTransaction()
150 'id' => self::$transactionId,
151 'creditCardDetails' => $this->getCreditCardDetails()
165 private function getCreditCardDetails(): CreditCardDetails
170 'cardType' =>
'American Express',
171 'expirationMonth' => 12,
172 'expirationYear' => 2021,
176 $creditCardDetails =
new CreditCardDetails(
$attributes);
178 return $creditCardDetails;
186 private function getConfigMock(): Config
189 'american-express' =>
'AE',
192 'mastercard' =>
'MC',
193 'master-card' =>
'MC',
196 'diners-club' =>
'DN',
200 $config = $this->getMockBuilder(Config::class)
201 ->setMethods([
'getCctypesMapper'])
202 ->disableOriginalConstructor()
205 $config->method(
'getCctypesMapper')
206 ->willReturn($mapperArray);
216 private function initPaymentExtensionAttributesMock()
218 $this->paymentExtension = $this->getMockBuilder(OrderPaymentExtensionInterface::class)
219 ->setMethods([
'setVaultPaymentToken',
'getVaultPaymentToken'])
220 ->disableOriginalConstructor()
223 $this->paymentExtensionFactory = $this->getMockBuilder(OrderPaymentExtensionInterfaceFactory::class)
224 ->disableOriginalConstructor()
225 ->setMethods([
'create'])
227 $this->paymentExtensionFactory->method(
'create')
228 ->willReturn($this->paymentExtension);
const TOKEN_TYPE_CREDIT_CARD