CancelOrderTest.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Signifyd\Plugin;
  7. use Magento\Framework\Api\SearchCriteriaBuilder;
  8. use Magento\Sales\Api\Data\OrderInterface;
  9. use Magento\Sales\Api\OrderManagementInterface;
  10. use Magento\Sales\Api\OrderRepositoryInterface;
  11. use Magento\Signifyd\Api\CaseRepositoryInterface;
  12. use Magento\Signifyd\Api\Data\CaseInterface;
  13. use Magento\Signifyd\Model\SignifydGateway\ApiClient;
  14. use Magento\TestFramework\Helper\Bootstrap;
  15. use Magento\TestFramework\ObjectManager;
  16. use PHPUnit\Framework\MockObject_MockObject as MockObject;
  17. class CancelOrderTest extends \PHPUnit\Framework\TestCase
  18. {
  19. /**
  20. * @var int
  21. */
  22. private static $caseId = 123;
  23. /**
  24. * @var ObjectManager
  25. */
  26. private $objectManager;
  27. /**
  28. * @var ApiClient|MockObject
  29. */
  30. private $apiClient;
  31. /**
  32. * @inheritdoc
  33. */
  34. protected function setUp()
  35. {
  36. $this->objectManager = Bootstrap::getObjectManager();
  37. $this->apiClient = $this->getMockBuilder(ApiClient::class)
  38. ->disableOriginalConstructor()
  39. ->setMethods(['makeApiCall'])
  40. ->getMock();
  41. $this->objectManager->addSharedInstance($this->apiClient, ApiClient::class);
  42. }
  43. /**
  44. * @inheritdoc
  45. */
  46. protected function tearDown()
  47. {
  48. $this->objectManager->removeSharedInstance(ApiClient::class);
  49. }
  50. /**
  51. * Checks a test case, when order has been cancelled
  52. * and calls plugin to cancel Signifyd case guarantee.
  53. *
  54. * @covers \Magento\Signifyd\Plugin\OrderPlugin::afterCancel
  55. * @magentoDataFixture Magento/Signifyd/_files/approved_case.php
  56. * @magentoConfigFixture current_store fraud_protection/signifyd/active 1
  57. */
  58. public function testAfterCancel()
  59. {
  60. $order = $this->getOrder();
  61. $this->apiClient->expects(self::once())
  62. ->method('makeApiCall')
  63. ->with(
  64. self::equalTo('/cases/' . self::$caseId . '/guarantee'),
  65. 'PUT',
  66. [
  67. 'guaranteeDisposition' => CaseInterface::GUARANTEE_CANCELED
  68. ]
  69. )
  70. ->willReturn([
  71. 'disposition' => CaseInterface::GUARANTEE_CANCELED
  72. ]);
  73. /** @var OrderManagementInterface $orderService */
  74. $orderService = $this->objectManager->get(OrderManagementInterface::class);
  75. $orderService->cancel($order->getEntityId());
  76. /** @var CaseRepositoryInterface $caseRepository */
  77. $caseRepository = $this->objectManager->get(CaseRepositoryInterface::class);
  78. $case = $caseRepository->getByCaseId(self::$caseId);
  79. self::assertEquals(CaseInterface::GUARANTEE_CANCELED, $case->getGuaranteeDisposition());
  80. }
  81. /**
  82. * Get stored order.
  83. *
  84. * @return OrderInterface
  85. */
  86. private function getOrder()
  87. {
  88. /** @var SearchCriteriaBuilder $searchCriteriaBuilder */
  89. $searchCriteriaBuilder = $this->objectManager->get(SearchCriteriaBuilder::class);
  90. $searchCriteria = $searchCriteriaBuilder->addFilter(OrderInterface::INCREMENT_ID, '100000001')
  91. ->create();
  92. $orderRepository = $this->objectManager->get(OrderRepositoryInterface::class);
  93. $orders = $orderRepository->getList($searchCriteria)
  94. ->getItems();
  95. /** @var OrderInterface $order */
  96. return array_pop($orders);
  97. }
  98. }