Skip to content

Commit c7e77c2

Browse files
author
Ivan Tagil
authored
Merge pull request #29 from Itonomy/feature/CMP-55-publish-events
CMP - 55 dispatch events
2 parents ce233e0 + 7d62550 commit c7e77c2

File tree

4 files changed

+157
-2
lines changed

4 files changed

+157
-2
lines changed

Service/OrderService.php

+22-1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
use CM\Payments\Client\Api\OrderInterface as CMOrderClientInterface;
1919
use CM\Payments\Exception\EmptyOrderKeyException;
2020
use CM\Payments\Logger\CMPaymentsLogger;
21+
use Magento\Framework\Event\ManagerInterface;
2122
use Magento\Sales\Api\OrderRepositoryInterface;
2223

2324
class OrderService implements OrderServiceInterface
@@ -57,6 +58,11 @@ class OrderService implements OrderServiceInterface
5758
*/
5859
private $logger;
5960

61+
/**
62+
* @var ManagerInterface
63+
*/
64+
private $eventManager;
65+
6066
/**
6167
* OrderService constructor.
6268
*
@@ -66,6 +72,7 @@ class OrderService implements OrderServiceInterface
6672
* @param CMOrderRepositoryInterface $cmOrderRepository
6773
* @param OrderRequestBuilderInterface $orderRequestBuilder
6874
* @param CMOrderInterfaceFactory $cmOrderInterfaceFactory
75+
* @param ManagerInterface $eventManager
6976
* @param CMPaymentsLogger $cmPaymentsLogger
7077
*/
7178
public function __construct(
@@ -75,6 +82,7 @@ public function __construct(
7582
CMOrderRepositoryInterface $cmOrderRepository,
7683
OrderRequestBuilderInterface $orderRequestBuilder,
7784
CMOrderInterfaceFactory $cmOrderInterfaceFactory,
85+
ManagerInterface $eventManager,
7886
CMPaymentsLogger $cmPaymentsLogger
7987
) {
8088
$this->orderRepository = $orderRepository;
@@ -83,6 +91,7 @@ public function __construct(
8391
$this->cmOrderRepository = $cmOrderRepository;
8492
$this->orderRequestBuilder = $orderRequestBuilder;
8593
$this->cmOrderInterfaceFactory = $cmOrderInterfaceFactory;
94+
$this->eventManager = $eventManager;
8695
$this->logger = $cmPaymentsLogger;
8796
}
8897

@@ -102,6 +111,11 @@ public function create(string $orderId): CMOrderInterface
102111
]
103112
);
104113

114+
$this->eventManager->dispatch('cmpayments_before_order_create', [
115+
'order' => $order,
116+
'orderCreateRequest' => $orderCreateRequest,
117+
]);
118+
105119
$orderCreateResponse = $this->orderClient->create(
106120
$orderCreateRequest
107121
);
@@ -130,13 +144,20 @@ public function create(string $orderId): CMOrderInterface
130144
$order->getPayment()->setAdditionalInformation($additionalInformation);
131145
$this->orderRepository->save($order);
132146

133-
return $this->cmOrderInterfaceFactory->create(
147+
$cmOrder = $this->cmOrderInterfaceFactory->create(
134148
[
135149
'url' => $orderCreateResponse->getUrl(),
136150
'orderReference' => $orderCreateRequest->getPayload()['order_reference'],
137151
'orderKey' => $orderCreateResponse->getOrderKey(),
138152
'expiresOn' => $orderCreateResponse->getExpiresOn()
139153
]
140154
);
155+
156+
$this->eventManager->dispatch('cmpayments_after_order_create', [
157+
'order' => $order,
158+
'cmOrder' => $cmOrder,
159+
]);
160+
161+
return $cmOrder;
141162
}
142163
}

Service/PaymentService.php

+22-1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
use CM\Payments\Client\Model\CMPaymentFactory;
2020
use CM\Payments\Exception\EmptyPaymentIdException;
2121
use CM\Payments\Logger\CMPaymentsLogger;
22+
use Magento\Framework\Event\ManagerInterface;
2223
use Magento\Sales\Api\OrderRepositoryInterface;
2324

2425
class PaymentService implements PaymentServiceInterface
@@ -63,6 +64,11 @@ class PaymentService implements PaymentServiceInterface
6364
*/
6465
private $logger;
6566

67+
/**
68+
* @var ManagerInterface
69+
*/
70+
private $eventManager;
71+
6672
/**
6773
* PaymentService constructor
6874
*
@@ -73,6 +79,7 @@ class PaymentService implements PaymentServiceInterface
7379
* @param CMPaymentFactory $cmPaymentFactory
7480
* @param CMPaymentRepositoryInterface $cmPaymentRepository
7581
* @param CMOrderRepositoryInterface $cmOrderRepository
82+
* @param ManagerInterface $eventManager
7683
* @param CMPaymentsLogger $logger
7784
*/
7885
public function __construct(
@@ -83,6 +90,7 @@ public function __construct(
8390
CMPaymentFactory $cmPaymentFactory,
8491
CMPaymentRepositoryInterface $cmPaymentRepository,
8592
CMOrderRepositoryInterface $cmOrderRepository,
93+
ManagerInterface $eventManager,
8694
CMPaymentsLogger $logger
8795
) {
8896
$this->orderRepository = $orderRepository;
@@ -92,6 +100,7 @@ public function __construct(
92100
$this->cmPaymentFactory = $cmPaymentFactory;
93101
$this->cmOrderRepository = $cmOrderRepository;
94102
$this->cmPaymentRepository = $cmPaymentRepository;
103+
$this->eventManager = $eventManager;
95104
$this->logger = $logger;
96105
}
97106

@@ -112,6 +121,11 @@ public function create(string $orderId): CMPaymentInterface
112121
]
113122
);
114123

124+
$this->eventManager->dispatch('cmpayments_before_payment_create', [
125+
'order' => $order,
126+
'paymentCreateRequest' => $paymentCreateRequest,
127+
]);
128+
115129
$paymentCreateResponse = $this->paymentClient->create(
116130
$paymentCreateRequest
117131
);
@@ -136,13 +150,20 @@ public function create(string $orderId): CMPaymentInterface
136150
$order->getPayment()->setAdditionalInformation($additionalInformation);
137151
$this->orderRepository->save($order);
138152

139-
return $this->cmPaymentFactory->create(
153+
$cmPayment = $this->cmPaymentFactory->create(
140154
[
141155
'id' => $paymentCreateResponse->getId(),
142156
'status' => $paymentCreateResponse->getStatus(),
143157
'redirectUrl' => $paymentCreateResponse->getRedirectUrl(),
144158
'urls' => $paymentCreateResponse->getUrls()
145159
]
146160
);
161+
162+
$this->eventManager->dispatch('cmpayments_after_payment_create', [
163+
'order' => $order,
164+
'cmPayment' => $cmPayment,
165+
]);
166+
167+
return $cmPayment;
147168
}
148169
}

Test/Unit/Service/OrderServiceTest.php

+57
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
use CM\Payments\Service\OrderService;
2525
use CM\Payments\Test\Unit\UnitTestCase;
2626
use Exception;
27+
use Magento\Framework\Event\ManagerInterface;
2728
use Magento\Sales\Api\Data\OrderAddressInterface;
2829
use Magento\Sales\Api\Data\OrderPaymentInterface;
2930
use Magento\Sales\Api\OrderRepositoryInterface;
@@ -72,6 +73,11 @@ class OrderServiceTest extends UnitTestCase
7273
*/
7374
private $cmPaymentsLoggerMock;
7475

76+
/**
77+
* @var ManagerInterface|\PHPUnit\Framework\MockObject\MockObject
78+
*/
79+
private $eventManagerMock;
80+
7581
public function testCreateOrder()
7682
{
7783
$this->orderClientMock->method('create')->willReturn(
@@ -110,6 +116,52 @@ public function testCreateOrderShouldThrowErrorWhenOrderKeyIsEmpty()
110116
$this->orderService->create('1');
111117
}
112118

119+
public function testEventDispatch()
120+
{
121+
$orderCreateResponse = new \CM\Payments\Client\Model\Response\OrderCreate(
122+
[
123+
'order_key' => '0287A1617D93780EF28044B98438BF2F',
124+
//phpcs:ignore
125+
'url' => 'https://testsecure.docdatapayments.com/ps/menu?merchant_name=itonomy_b_v&client_language=NL&payment_cluster_key=0287A1617D93780EF28044B98438BF2F',
126+
'expires_on' => '2021-07-12T08:10:57Z'
127+
]
128+
);
129+
130+
$this->orderClientMock->method('create')->willReturn(
131+
$orderCreateResponse
132+
);
133+
$order = $this->getOrderMock();
134+
$orderCreateRequest = new OrderCreateRequest(
135+
new OrderCreate(
136+
'000000001',
137+
2000,
138+
'EUR',
139+
self::ADDRESS_DATA['email_address'],
140+
self::LANGUAGE,
141+
self::ADDRESS_DATA['country_code'],
142+
self::PAYMENT_PROFILE,
143+
[
144+
'success' => '',
145+
'pending' => '',
146+
'cancelled' => '',
147+
'error' => ''
148+
]
149+
)
150+
);
151+
152+
$this->eventManagerMock->expects($this->exactly(2))->method('dispatch')->withConsecutive(
153+
['cmpayments_before_order_create', ['order' => $order, 'orderCreateRequest' => $orderCreateRequest]],
154+
['cmpayments_after_order_create', ['order' => $order, 'cmOrder' => new CMOrder(
155+
$orderCreateResponse->getUrl(),
156+
'000000001',
157+
$orderCreateResponse->getOrderKey(),
158+
$orderCreateResponse->getExpiresOn(),
159+
)]]
160+
);
161+
162+
$this->orderService->create('1');
163+
}
164+
113165
protected function setUp(): void
114166
{
115167
parent::setUp();
@@ -144,6 +196,10 @@ protected function setUp(): void
144196
->disableOriginalConstructor()
145197
->getMock();
146198

199+
$this->eventManagerMock = $this->getMockBuilder(ManagerInterface::class)
200+
->disableOriginalConstructor()
201+
->getMock();
202+
147203
$this->orderRepositoryMock->method('get')->willReturn($this->getOrderMock());
148204
$this->orderRepositoryMock->method('save');
149205
$this->cmOrderRepositoryMock->method('save');
@@ -176,6 +232,7 @@ protected function setUp(): void
176232
$this->cmOrderRepositoryMock,
177233
$this->orderRequestBuilderMock,
178234
$this->cmOrderInterfaceFactoryMock,
235+
$this->eventManagerMock,
179236
$this->cmPaymentsLoggerMock
180237
);
181238
}

Test/Unit/Service/PaymentServiceTest.php

+56
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
use CM\Payments\Model\Data\Payment as CMPaymentData;
2727
use CM\Payments\Service\PaymentService;
2828
use CM\Payments\Test\Unit\UnitTestCase;
29+
use Magento\Framework\Event\ManagerInterface;
2930
use Magento\Sales\Api\Data\OrderAddressInterface;
3031
use Magento\Sales\Api\Data\OrderPaymentInterface;
3132
use Magento\Sales\Api\OrderRepositoryInterface;
@@ -79,6 +80,11 @@ class PaymentServiceTest extends UnitTestCase
7980
*/
8081
private $cmPaymentsLoggerMock;
8182

83+
/**
84+
* @var ManagerInterface|\PHPUnit\Framework\MockObject\MockObject
85+
*/
86+
private $eventManagerMock;
87+
8288
public function testCreateIdealPayment()
8389
{
8490
$this->paymentClientMock->expects($this->once())->method('create')->willReturn(
@@ -107,6 +113,51 @@ public function testCreateIdealPayment()
107113
);
108114
}
109115

116+
public function testEventDispatch()
117+
{
118+
$paymentCreateResponse = new \CM\Payments\Client\Model\Response\PaymentCreate(
119+
[
120+
'id' => 'pid4911257676t',
121+
'status' => 'REDIRECTED_FOR_AUTHORIZATION',
122+
'urls' => [
123+
0 => [
124+
'purpose' => 'REDIRECT',
125+
'method' => 'GET',
126+
//phpcs:ignore
127+
'url' => 'https://test.docdatapayments.com/ps_sim/idealbanksimulator.jsf?trxid=1625579689224&ec=4911257676&returnUrl=https%3A%2F%2Ftestsecure.docdatapayments.com%2Fps%2FreturnFromAuthorization%3FpaymentReference%3D49112576765AD00EC846B52EAED61E9FC2530CFF90%26checkDigitId%3D49112576765AD00EC846B52EAED61E9FC2530CFF90',
128+
'order' => 1,
129+
],
130+
]
131+
]
132+
);
133+
134+
$this->paymentClientMock->expects($this->once())->method('create')->willReturn(
135+
$paymentCreateResponse
136+
);
137+
$order = $this->getOrderMock();
138+
$paymentCreate = new PaymentCreate(
139+
MethodServiceInterface::API_METHODS_MAPPING[ConfigProvider::CODE_IDEAL],
140+
[
141+
'ideal_details' => ['issuer_id' => 'INGBNL2A']
142+
]
143+
);
144+
$paymentCreateRequest = new PaymentCreateRequest('0287A1617D93780EF28044B98438BF2F', $paymentCreate);
145+
146+
$cmPayment = new CMPayment(
147+
$paymentCreateResponse->getId(),
148+
$paymentCreateResponse->getStatus(),
149+
$paymentCreateResponse->getRedirectUrl(),
150+
$paymentCreateResponse->getUrls()
151+
);
152+
153+
$this->eventManagerMock->expects($this->exactly(2))->method('dispatch')->withConsecutive(
154+
['cmpayments_before_payment_create', ['order' => $order, 'paymentCreateRequest' => $paymentCreateRequest]],
155+
['cmpayments_after_payment_create', ['order' => $order, 'cmPayment' => $cmPayment]]
156+
);
157+
158+
$this->paymentService->create((string)$order->getEntityId());
159+
}
160+
110161
/**
111162
* @return OrderInterface
112163
*/
@@ -181,6 +232,10 @@ protected function setUp(): void
181232
->disableOriginalConstructor()
182233
->getMock();
183234

235+
$this->eventManagerMock = $this->getMockBuilder(ManagerInterface::class)
236+
->disableOriginalConstructor()
237+
->getMock();
238+
184239
$this->orderRepositoryMock->method('get')->willReturn($this->getOrderMock());
185240
$this->orderRepositoryMock->method('save');
186241
$this->cmOrderRepositoryMock->method('save');
@@ -205,6 +260,7 @@ protected function setUp(): void
205260
$this->cmPaymentFactoryMock,
206261
$this->cmPaymentRepositoryMock,
207262
$this->cmOrderRepositoryMock,
263+
$this->eventManagerMock,
208264
$this->cmPaymentsLoggerMock
209265
);
210266
}

0 commit comments

Comments
 (0)