diff --git a/src/test/java/com/adyen/CheckoutTest.java b/src/test/java/com/adyen/CheckoutTest.java index 60c2e6212..e7c3601fc 100644 --- a/src/test/java/com/adyen/CheckoutTest.java +++ b/src/test/java/com/adyen/CheckoutTest.java @@ -294,6 +294,7 @@ public void testCreateSessionsSuccessCall() throws Exception { assertEquals( CreateCheckoutSessionResponse.StorePaymentMethodModeEnum.ASKFORCONSENT, createCheckoutSessionResponse.getStorePaymentMethodMode()); + assertEquals(Boolean.TRUE, createCheckoutSessionResponse.getPayable()); } @Test @@ -973,6 +974,12 @@ public void testForwardToken() throws Exception { assertNotNull(response.getResponse()); assertEquals(200, (int) response.getResponse().getStatus()); assertTrue(response.getResponse().getBody().contains("PAYMENT_METHOD_ID")); + assertNotNull(response.getAccountUpdate()); + assertEquals( + CheckoutForwardAccountUpdateResult.ResultEnum.CARDCHANGED, + response.getAccountUpdate().getResult()); + assertNotNull(response.getNetworkToken()); + assertEquals(Boolean.TRUE, response.getNetworkToken().getSwapped()); } @Test @@ -1156,4 +1163,143 @@ public void testPaypalUpdateOrderRequestSerialization() throws Exception { assertEquals("Express Shipping", parsed.getDeliveryMethods().get(0).getDescription()); assertEquals(true, parsed.getDeliveryMethods().get(0).getSelected()); } + + @Test + public void testPayByBankCADirectDebitDetails() throws Exception { + CheckoutPaymentMethod paymentMethod = + new CheckoutPaymentMethod( + new PayByBankCADirectDebitDetails() + .type(PayByBankCADirectDebitDetails.TypeEnum.PAYBYBANK_CA) + .checkoutAttemptId("1") + .storedPaymentMethodId("M5N7TQ4TG5PFWR50")); + + CheckoutPaymentMethod parsed = CheckoutPaymentMethod.fromJson(paymentMethod.toJson()); + + assertEquals( + PayByBankCADirectDebitDetails.TypeEnum.PAYBYBANK_CA, + parsed.getPayByBankCADirectDebitDetails().getType()); + assertEquals("1", parsed.getPayByBankCADirectDebitDetails().getCheckoutAttemptId()); + assertEquals( + "M5N7TQ4TG5PFWR50", parsed.getPayByBankCADirectDebitDetails().getStoredPaymentMethodId()); + } + + @Test + public void testPayByBankCADeserialization() throws Exception { + CheckoutPaymentMethod parsed = + CheckoutPaymentMethod.fromJson( + "{\n" + + " \"type\": \"paybybank_ca\",\n" + + " \"checkoutAttemptId\": \"1\",\n" + + " \"storedPaymentMethodId\": \"M5N7TQ4TG5PFWR50\"\n" + + " }"); + + assertEquals( + PayByBankCADirectDebitDetails.TypeEnum.PAYBYBANK_CA, + parsed.getPayByBankCADirectDebitDetails().getType()); + assertEquals("1", parsed.getPayByBankCADirectDebitDetails().getCheckoutAttemptId()); + assertEquals( + "M5N7TQ4TG5PFWR50", parsed.getPayByBankCADirectDebitDetails().getStoredPaymentMethodId()); + } + + @Test + public void testOpiRequestResponseSerialization() throws Exception { + PaymentRequest paymentRequest = + new PaymentRequest() + .merchantAccount("YOUR_MERCHANT_ACCOUNT") + .reference("YOUR_REFERENCE") + .amount(new Amount().currency("EUR").value(1000L)) + .opi(new OpiRequest().includeIssuerId(true).includeTransToken(true)); + + String json = paymentRequest.toJson(); + assertTrue(json.contains("opi")); + + PaymentRequest parsed = PaymentRequest.fromJson(json); + assertEquals(Boolean.TRUE, parsed.getOpi().getIncludeIssuerId()); + assertEquals(Boolean.TRUE, parsed.getOpi().getIncludeTransToken()); + + OpiResponse opiResponse = new OpiResponse().issuerId("ISSUER_ID").transToken("TRANS_TOKEN"); + OpiResponse parsedOpiResponse = OpiResponse.fromJson(opiResponse.toJson()); + assertEquals("ISSUER_ID", parsedOpiResponse.getIssuerId()); + assertEquals("TRANS_TOKEN", parsedOpiResponse.getTransToken()); + + StoredPaymentMethodRequest storedPaymentMethodRequest = + new StoredPaymentMethodRequest().opi(new OpiRequest().includeTransToken(true)); + assertEquals( + Boolean.TRUE, + StoredPaymentMethodRequest.fromJson(storedPaymentMethodRequest.toJson()) + .getOpi() + .getIncludeTransToken()); + } + + @Test + public void testPaymentResponseWithOpi() throws Exception { + String mockResponse = + "{\"resultCode\":\"Authorised\",\"pspReference\":\"8815658961765250\"," + + "\"opi\":{\"issuerId\":\"ISSUER_ID\",\"transToken\":\"TRANS_TOKEN\"}}"; + Client client = createMockClientFromResponse(mockResponse); + + PaymentRequest paymentRequest = + new PaymentRequest() + .merchantAccount("YOUR_MERCHANT_ACCOUNT") + .reference("YOUR_REFERENCE") + .amount(new Amount().currency("EUR").value(1000L)) + .opi(new OpiRequest().includeIssuerId(true)); + + PaymentsApi checkout = new PaymentsApi(client); + PaymentResponse paymentResponse = checkout.payments(paymentRequest); + + assertEquals(PaymentResponse.ResultCodeEnum.AUTHORISED, paymentResponse.getResultCode()); + assertEquals("ISSUER_ID", paymentResponse.getOpi().getIssuerId()); + assertEquals("TRANS_TOKEN", paymentResponse.getOpi().getTransToken()); + } + + @Test + public void testCreateSessionWithPayable() throws Exception { + CreateCheckoutSessionRequest sessionRequest = + new CreateCheckoutSessionRequest() + .merchantAccount("YOUR_MERCHANT_ACCOUNT") + .amount(new Amount().currency("EUR").value(1000L)) + .reference("YOUR_PAYMENT_REFERENCE") + .payable(true); + + String json = sessionRequest.toJson(); + assertTrue(json.contains("payable")); + + CreateCheckoutSessionRequest parsed = CreateCheckoutSessionRequest.fromJson(json); + assertEquals(Boolean.TRUE, parsed.getPayable()); + } + + @Test + public void testKlarnaNetworkDetailsKlarnaNetworkPaymentAccountId() throws Exception { + KlarnaNetworkDetails klarnaNetworkDetails = + new KlarnaNetworkDetails() + .type(KlarnaNetworkDetails.TypeEnum.KLARNA_NETWORK) + .klarnaNetworkSessionToken("SESSION_TOKEN") + .klarnaNetworkPaymentAccountId("KLARNA_NETWORK_PAYMENT_ACCOUNT_ID"); + + KlarnaNetworkDetails parsed = KlarnaNetworkDetails.fromJson(klarnaNetworkDetails.toJson()); + + assertEquals("SESSION_TOKEN", parsed.getKlarnaNetworkSessionToken()); + assertEquals("KLARNA_NETWORK_PAYMENT_ACCOUNT_ID", parsed.getKlarnaNetworkPaymentAccountId()); + } + + @Test + public void testLineItemRiskCategory() throws Exception { + LineItem lineItem = + new LineItem().quantity(1L).amountIncludingTax(1000L).riskCategory("electronics"); + + LineItem parsed = LineItem.fromJson(lineItem.toJson()); + + assertEquals(1L, parsed.getQuantity().longValue()); + assertEquals("electronics", parsed.getRiskCategory()); + } + + @Test + public void testSatispayPaymentDetailsType() throws Exception { + assertEquals(PaymentDetails.TypeEnum.SATISPAY, PaymentDetails.TypeEnum.fromValue("satispay")); + + PaymentDetails paymentDetails = new PaymentDetails().type(PaymentDetails.TypeEnum.SATISPAY); + PaymentDetails parsed = PaymentDetails.fromJson(paymentDetails.toJson()); + assertEquals(PaymentDetails.TypeEnum.SATISPAY, parsed.getType()); + } } diff --git a/src/test/resources/mocks/checkout/createSessionsResponse.json b/src/test/resources/mocks/checkout/createSessionsResponse.json index 6271e18f8..21ca71e56 100644 --- a/src/test/resources/mocks/checkout/createSessionsResponse.json +++ b/src/test/resources/mocks/checkout/createSessionsResponse.json @@ -12,5 +12,6 @@ "returnUrl": "https://your-company.com/checkout?shopperOrder=12xy..", "sessionData": "Ab02b4c0!BFHSPFBQTEwM0NBNTM3RfCf5", "mode": "embedded", + "payable": true, "storePaymentMethodMode": "askForConsent" } \ No newline at end of file diff --git a/src/test/resources/mocks/checkout/forwardResponse.json b/src/test/resources/mocks/checkout/forwardResponse.json index bf4adf6dc..806c072d9 100644 --- a/src/test/resources/mocks/checkout/forwardResponse.json +++ b/src/test/resources/mocks/checkout/forwardResponse.json @@ -1,4 +1,10 @@ { + "accountUpdate": { + "result": "CardChanged" + }, + "networkToken": { + "swapped": true + }, "pspReference": "8815658961765250", "response": { "body": "{\"data\": {\"tokenizeCreditCard\": {\"paymentMethod\": {\"id\": \"PAYMENT_METHOD_ID\"}}}}", @@ -8,4 +14,4 @@ "status": 200 }, "storedPaymentMethodId": "PAYMENT_METHOD_ID" -} \ No newline at end of file +}