From 1fe71df82220d3276b603feaba100182bbadc72b Mon Sep 17 00:00:00 2001 From: yaphet17 Date: Thu, 1 Jun 2023 18:45:06 +0300 Subject: [PATCH] Create ChapaException class to handle 4XX and 5XX response codes --- src/main/java/com/yaphet/chapa/Chapa.java | 25 +++++++++++++++++++ .../chapa/exception/ChapaException.java | 19 ++++++++++++++ .../java/com/yaphet/chapa/utility/Util.java | 4 +++ src/test/java/com/yaphet/chapa/ChapaTest.java | 7 ++++-- 4 files changed, 53 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/yaphet/chapa/exception/ChapaException.java diff --git a/src/main/java/com/yaphet/chapa/Chapa.java b/src/main/java/com/yaphet/chapa/Chapa.java index 2dd8a8e..eeb04ef 100644 --- a/src/main/java/com/yaphet/chapa/Chapa.java +++ b/src/main/java/com/yaphet/chapa/Chapa.java @@ -2,6 +2,7 @@ import com.yaphet.chapa.client.ChapaClient; import com.yaphet.chapa.client.ChapaClientImpl; +import com.yaphet.chapa.exception.ChapaException; import com.yaphet.chapa.model.*; import com.yaphet.chapa.utility.Util; @@ -94,6 +95,10 @@ public InitializeResponseData initialize(PostData postData) throws Throwable { / responseBody = chapaClient.post(BASE_URL + "/transaction/initialize", fields, SECRETE_KEY); statusCode = chapaClient.getStatusCode(); + if(!Util.is2xxSuccessful(chapaClient.getStatusCode())) { + throw new ChapaException(responseBody); + } + InitializeResponseData initializeResponseData = Util.jsonToInitializeResponseData(responseBody) .setRawJson(responseBody) .setStatusCode(statusCode); @@ -115,6 +120,10 @@ public InitializeResponseData initialize(String jsonData) throws Throwable { responseBody = chapaClient.post(BASE_URL + "/transaction/initialize", jsonData, SECRETE_KEY); statusCode = chapaClient.getStatusCode(); + if(!Util.is2xxSuccessful(chapaClient.getStatusCode())) { + throw new ChapaException(responseBody); + } + InitializeResponseData initializeResponseData = Util.jsonToInitializeResponseData(responseBody) .setRawJson(responseBody) .setStatusCode(statusCode); @@ -137,6 +146,10 @@ public VerifyResponseData verify(String transactionRef) throws Throwable { responseBody = chapaClient.get(BASE_URL + "/transaction/verify/" + transactionRef, SECRETE_KEY); statusCode = chapaClient.getStatusCode(); + if(!Util.is2xxSuccessful(chapaClient.getStatusCode())) { + throw new ChapaException(responseBody); + } + VerifyResponseData verifyResponseData = Util.jsonToVerifyResponseData(responseBody) .setRawJson(responseBody) .setStatusCode(statusCode); @@ -152,6 +165,10 @@ public List banks() throws Throwable { responseBody = chapaClient.get(BASE_URL + "/banks", SECRETE_KEY); statusCode = chapaClient.getStatusCode(); + if(!Util.is2xxSuccessful(chapaClient.getStatusCode())) { + throw new ChapaException(responseBody); + } + return Util.extractBanks(responseBody); } @@ -176,6 +193,10 @@ public SubAccountResponseData createSubAccount(SubAccount subAccount) throws Thr responseBody = chapaClient.post(BASE_URL + "/subaccount", fields, SECRETE_KEY); statusCode = chapaClient.getStatusCode(); + if(!Util.is2xxSuccessful(chapaClient.getStatusCode())) { + throw new ChapaException(responseBody); + } + SubAccountResponseData subAccountResponseData = Util.jsonToSubAccountResponseData(responseBody) .setRawJson(responseBody) .setStatusCode(statusCode); @@ -196,6 +217,10 @@ public SubAccountResponseData createSubAccount(String jsonData) throws Throwable responseBody = chapaClient.post(BASE_URL + "/subaccount", jsonData, SECRETE_KEY); statusCode = chapaClient.getStatusCode(); + if(!Util.is2xxSuccessful(chapaClient.getStatusCode())) { + throw new ChapaException(responseBody); + } + SubAccountResponseData subAccountResponseData = Util.jsonToSubAccountResponseData(responseBody) .setRawJson(responseBody) .setStatusCode(statusCode); diff --git a/src/main/java/com/yaphet/chapa/exception/ChapaException.java b/src/main/java/com/yaphet/chapa/exception/ChapaException.java new file mode 100644 index 0000000..52b3a17 --- /dev/null +++ b/src/main/java/com/yaphet/chapa/exception/ChapaException.java @@ -0,0 +1,19 @@ +package com.yaphet.chapa.exception; + +/** + * A ChapaException is thrown to signal a problem during SDK execution. + */ +public class ChapaException extends Exception { + + public ChapaException(String message) { + super(message); + } + + public ChapaException(Throwable cause) { + super(cause); + } + + public ChapaException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/src/main/java/com/yaphet/chapa/utility/Util.java b/src/main/java/com/yaphet/chapa/utility/Util.java index 59ad89f..c972235 100644 --- a/src/main/java/com/yaphet/chapa/utility/Util.java +++ b/src/main/java/com/yaphet/chapa/utility/Util.java @@ -124,4 +124,8 @@ public static String generateToken() { public static boolean notNullAndEmpty(String value) { return value != null && !value.isEmpty(); } + + public static boolean is2xxSuccessful(int statucCode) { + return (statucCode / 100) == 2; + } } diff --git a/src/test/java/com/yaphet/chapa/ChapaTest.java b/src/test/java/com/yaphet/chapa/ChapaTest.java index 744f0c1..2402537 100644 --- a/src/test/java/com/yaphet/chapa/ChapaTest.java +++ b/src/test/java/com/yaphet/chapa/ChapaTest.java @@ -47,6 +47,7 @@ void setUp() { .setEmail("abebe@bikila.com") .setTxRef(Util.generateToken()) .setCallbackUrl("https://chapa.co") + .setReturnUrl("https://chapa.co") .setSubAccountId("testSubAccountId") .setCustomization(customization); postDataString = " { " + @@ -57,6 +58,7 @@ void setUp() { "'last_name': 'Bikila'," + "'tx_ref': 'tx-myecommerce12345'," + "'callback_url': 'https://chapa.co'," + + "'return_url': 'https://chapa.co'," + "'subaccount[id]': 'testSubAccountId'," + "'customizations':{'customization[title]':'E-commerce','customization[description]':'It is time to pay','customization[logo]':'https://mylogo.com/log.png'}" + " }"; @@ -220,7 +222,7 @@ public void shouldCreateSubAccount_asResponseData() throws Throwable { // This should not run in the pipeline @Test - @Disabled +// @Disabled public void testDefault() throws Throwable { // given Customization customization = new Customization() @@ -232,9 +234,10 @@ public void testDefault() throws Throwable { .setCurrency("ETB") .setFirstName("Abebe") .setLastName("Bikila") - .setEmail("abebe@bikila.com") + .setEmail("abebe@bikila") .setTxRef(Util.generateToken()) .setCallbackUrl("https://chapa.co") + .setReturnUrl("https://chapa.co") .setSubAccountId("testSubAccountId") .setCustomization(customization); subAccount = new SubAccount()