From e78482fff5a306a852654a1301f8f33e9edfa188 Mon Sep 17 00:00:00 2001 From: RokPopov Date: Thu, 18 Jan 2024 09:09:52 +0100 Subject: [PATCH] add unit tests for TransactionPayment --- .../Http/Client/TransactionPaymentTest.php | 117 ++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 Test/Unit/Gateway/Http/Client/TransactionPaymentTest.php diff --git a/Test/Unit/Gateway/Http/Client/TransactionPaymentTest.php b/Test/Unit/Gateway/Http/Client/TransactionPaymentTest.php new file mode 100644 index 000000000..b5203445e --- /dev/null +++ b/Test/Unit/Gateway/Http/Client/TransactionPaymentTest.php @@ -0,0 +1,117 @@ +adyenHelperMock = $this->createMock(Data::class); + $this->paymentResponseFactoryMock = $this->createGeneratedMock(PaymentResponseFactory::class, ['create']); + $this->paymentResponseResourceModelMock = $this->createMock(PaymentResponseResourceModel::class); + $this->idempotencyHelperMock = $this->createMock(Idempotency::class); + $this->orderApiHelperMock = $this->createMock(OrdersApi::class); + $this->storeManagerMock = $this->createMock(StoreManagerInterface::class); + $this->giftcardPaymentHelperMock = $this->createMock(GiftcardPayment::class); + $paymentResponseInterfaceMock = $this->createMock(PaymentResponseInterface::class); + $paymentResponseMock = $this->createMock(PaymentResponse::class); + $paymentResponseMock->method('setResponse')->willReturn($paymentResponseInterfaceMock); + $paymentResponseMock->method('setResultCode')->willReturn($paymentResponseInterfaceMock); + $paymentResponseMock->method('setMerchantReference')->willReturn($paymentResponseInterfaceMock); + + // Configure PaymentResponseFactory mock to return the PaymentResponse mock + $this->paymentResponseFactoryMock = $this->createGeneratedMock(PaymentResponseFactory::class, ['create']); + $this->paymentResponseFactoryMock->method('create')->willReturn($paymentResponseMock); + + $this->transactionPayment = $objectManager->getObject( + TransactionPayment::class, + [ + 'adyenHelper' => $this->adyenHelperMock, + 'paymentResponseFactory' => $this->paymentResponseFactoryMock, + 'paymentResponseResourceModel' => $this->paymentResponseResourceModelMock, + 'idempotencyHelper' => $this->idempotencyHelperMock, + 'orderApiHelper' => $this->orderApiHelperMock, + 'storeManager' => $this->storeManagerMock, + 'giftcardPaymentHelper' => $this->giftcardPaymentHelperMock, + ] + ); + } + + public function testPlaceRequestWithResultCode() + { + $transferObjectMock = $this->createMock(TransferInterface::class); + $requestBody = ['resultCode' => 'Authorised', 'amount' => ['value' => 1000]]; + $transferObjectMock->method('getBody')->willReturn($requestBody); + + $result = $this->transactionPayment->placeRequest($transferObjectMock); + + $this->assertEquals($requestBody, $result); + } + + public function testPlaceRequestGeneratesIdempotencyKey() + { + $requestBody = ['reference' => 'ABC12345', 'amount' => ['value' => 100]]; + $transferObjectMock = $this->createConfiguredMock(TransferInterface::class, [ + 'getBody' => $requestBody, + 'getHeaders' => ['idempotencyExtraData' => ['someData']], + 'getClientConfig' => [] + ]); + + $expectedIdempotencyKey = 'generated_idempotency_key'; + $this->idempotencyHelperMock->expects($this->once()) + ->method('generateIdempotencyKey') + ->with( + $this->equalTo(['reference' => 'ABC12345', 'amount' => ['value' => 100]]), + $this->equalTo(['someData']) + ) + ->willReturn($expectedIdempotencyKey); + + $mockedPaymentResponse = [ + 'reference' => 'ABC12345', + 'amount' => ['value' => 100], + 'resultCode' => 'Authorised' + ]; + $serviceMock = $this->createMock(Checkout::class); + $serviceMock->expects($this->once()) + ->method('payments') + ->with( + $this->anything(), + $this->callback(function ($requestOptions) use ($expectedIdempotencyKey) { + return isset($requestOptions['idempotencyKey']) && + $requestOptions['idempotencyKey'] === $expectedIdempotencyKey; + }) + ) + ->willReturn($mockedPaymentResponse); + + $this->adyenHelperMock->method('createAdyenCheckoutService')->willReturn($serviceMock); + + $this->transactionPayment->placeRequest($transferObjectMock); + } +}