|
11 | 11 |
|
12 | 12 | namespace UnzerSDK\test\unit\Services; |
13 | 13 |
|
14 | | -use UnzerSDK\Unzer; |
| 14 | +use RuntimeException; |
| 15 | +use stdClass; |
15 | 16 | use UnzerSDK\Interfaces\ResourceServiceInterface; |
| 17 | +use UnzerSDK\Resources\TransactionTypes\Charge; |
| 18 | +use UnzerSDK\Resources\TransactionTypes\Chargeback; |
16 | 19 | use UnzerSDK\Resources\Webhook; |
17 | 20 | use UnzerSDK\Resources\Webhooks; |
18 | 21 | use UnzerSDK\Services\ResourceService; |
19 | 22 | use UnzerSDK\Services\WebhookService; |
20 | 23 | use UnzerSDK\test\BasePaymentTest; |
21 | 24 | use UnzerSDK\test\unit\DummyResource; |
22 | | -use RuntimeException; |
23 | | -use stdClass; |
| 25 | +use UnzerSDK\Unzer; |
24 | 26 |
|
25 | 27 | class WebhooksServiceTest extends BasePaymentTest |
26 | 28 | { |
@@ -328,6 +330,54 @@ public function fetchResourceByEventWithEmptyRetrieveUrlShouldThrowException(): |
328 | 330 | $webhookService->fetchResourceFromEvent(); |
329 | 331 | } |
330 | 332 |
|
| 333 | + /** |
| 334 | + * Verify that a chargeback is returned from a webhook event. |
| 335 | + * |
| 336 | + * @test |
| 337 | + */ |
| 338 | + public function fetchChargebackByEventShouldReturnChargeback(): void |
| 339 | + { |
| 340 | + // given |
| 341 | + $unzer = new Unzer('s-priv-1234'); |
| 342 | + $webhookService = new WebhookService($unzer); |
| 343 | + |
| 344 | + $paymentId = 's-pay-42'; |
| 345 | + $chargeId = 's-chg-1'; |
| 346 | + $chargebackId = 's-cbk-1'; |
| 347 | + $retrieveUrl = "https://api.unzer.com/v1/payments/{$paymentId}/charges/{$chargeId}/chargebacks/{$chargebackId}"; |
| 348 | + |
| 349 | + // Partial mock: keep original behavior except fetchChargebackById which we want to intercept |
| 350 | + $resourceServiceMock = $this->getMockBuilder(ResourceService::class) |
| 351 | + ->setConstructorArgs([$unzer]) |
| 352 | + ->setMethods(['fetchChargebackById']) |
| 353 | + ->getMock(); |
| 354 | + |
| 355 | + $chargeback = (new Chargeback(10.0)) |
| 356 | + ->setId($chargebackId) |
| 357 | + ->setParentResource((new Charge())->setId($chargeId)); |
| 358 | + |
| 359 | + $resourceServiceMock->expects($this->once()) |
| 360 | + ->method('fetchChargebackById') |
| 361 | + ->with($paymentId, $chargebackId, $chargeId) |
| 362 | + ->willReturn($chargeback); |
| 363 | + |
| 364 | + $webhookService->setResourceService($resourceServiceMock); |
| 365 | + |
| 366 | + $eventJson = json_encode([ |
| 367 | + 'event' => 'chargeback', |
| 368 | + 'publicKey' => 's-pub-xyz', |
| 369 | + 'retrieveUrl' => $retrieveUrl, |
| 370 | + 'paymentId' => $paymentId |
| 371 | + ]); |
| 372 | + |
| 373 | + // when |
| 374 | + $fetchedChargeback = $webhookService->fetchResourceFromEvent($eventJson); |
| 375 | + |
| 376 | + // then |
| 377 | + $this->assertSame($chargeback, $fetchedChargeback); |
| 378 | + $this->assertNotNull($fetchedChargeback); |
| 379 | + } |
| 380 | + |
331 | 381 | /** |
332 | 382 | * Verify exception is thrown if the retrieveURL is empty. |
333 | 383 | * |
|
0 commit comments