RiskDataHandlerTest.php 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Braintree\Test\Unit\Gateway\Response;
  7. use Braintree\Transaction;
  8. use Magento\Braintree\Gateway\SubjectReader;
  9. use Magento\Braintree\Gateway\Response\RiskDataHandler;
  10. use Magento\Payment\Gateway\Data\PaymentDataObjectInterface;
  11. use Magento\Sales\Model\Order\Payment;
  12. use PHPUnit_Framework_MockObject_MockObject as MockObject;
  13. /**
  14. * Class RiskDataHandlerTest
  15. *
  16. * @see \Magento\Braintree\Gateway\Response\RiskDataHandler
  17. */
  18. class RiskDataHandlerTest extends \PHPUnit\Framework\TestCase
  19. {
  20. /**
  21. * @var RiskDataHandler
  22. */
  23. private $riskDataHandler;
  24. /**
  25. * @var SubjectReader|MockObject
  26. */
  27. private $subjectReaderMock;
  28. /**
  29. * @inheritdoc
  30. */
  31. protected function setUp()
  32. {
  33. $this->subjectReaderMock = $this->getMockBuilder(SubjectReader::class)
  34. ->disableOriginalConstructor()
  35. ->setMethods(['readPayment', 'readTransaction'])
  36. ->getMock();
  37. $this->riskDataHandler = new RiskDataHandler($this->subjectReaderMock);
  38. }
  39. /**
  40. * Test for handle method
  41. * @covers \Magento\Braintree\Gateway\Response\RiskDataHandler::handle
  42. * @param string $riskDecision
  43. * @param boolean $isFraud
  44. * @dataProvider riskDataProvider
  45. */
  46. public function testHandle($riskDecision, $isFraud)
  47. {
  48. /** @var Payment|MockObject $payment */
  49. $payment = $this->getMockBuilder(Payment::class)
  50. ->disableOriginalConstructor()
  51. ->setMethods(['setAdditionalInformation', 'setIsFraudDetected'])
  52. ->getMock();
  53. /** @var PaymentDataObjectInterface|MockObject $paymentDO */
  54. $paymentDO = $this->createMock(PaymentDataObjectInterface::class);
  55. $paymentDO->expects(self::once())
  56. ->method('getPayment')
  57. ->willReturn($payment);
  58. $transaction = Transaction::factory([
  59. 'riskData' => [
  60. 'id' => 'test-id',
  61. 'decision' => $riskDecision
  62. ]
  63. ]);
  64. $response = [
  65. 'object' => $transaction
  66. ];
  67. $handlingSubject = [
  68. 'payment' => $paymentDO,
  69. ];
  70. $this->subjectReaderMock->expects(static::once())
  71. ->method('readPayment')
  72. ->with($handlingSubject)
  73. ->willReturn($paymentDO);
  74. $this->subjectReaderMock->expects(static::once())
  75. ->method('readTransaction')
  76. ->with($response)
  77. ->willReturn($transaction);
  78. $payment->expects(static::at(0))
  79. ->method('setAdditionalInformation')
  80. ->with(RiskDataHandler::RISK_DATA_ID, 'test-id');
  81. $payment->expects(static::at(1))
  82. ->method('setAdditionalInformation')
  83. ->with(RiskDataHandler::RISK_DATA_DECISION, $riskDecision);
  84. if (!$isFraud) {
  85. $payment->expects(static::never())
  86. ->method('setIsFraudDetected');
  87. } else {
  88. $payment->expects(static::once())
  89. ->method('setIsFraudDetected')
  90. ->with(true);
  91. }
  92. $this->riskDataHandler->handle($handlingSubject, $response);
  93. }
  94. /**
  95. * Get list of variations to test fraud
  96. * @return array
  97. */
  98. public function riskDataProvider()
  99. {
  100. return [
  101. ['decision' => 'Not Evaluated', 'isFraud' => false],
  102. ['decision' => 'Approve', 'isFraud' => false],
  103. ['decision' => 'Review', 'isFraud' => true],
  104. ];
  105. }
  106. }