diff --git a/documents/addon.md b/documents/addon.md index f99245b8..fe155d4b 100644 --- a/documents/addon.md +++ b/documents/addon.md @@ -2,7 +2,9 @@ ### Create an addon +#### Old Method ```java + String subscriptionId = "sub_I55auG9GnbsR8u"; JSONObject addonRequest = new JSONObject(); @@ -16,7 +18,26 @@ addonRequest.put("quantity",2); Addon addon = instance.subscriptions.createAddon(subscriptionId,addonRequest); ``` +#### New Method +```java +Addon addon = Addon.builder() + .items( + AddOnItem.builder() + .name("Test") + .amount(3000) + .currency("INR") + .description("Test description") + .build() + ) + .quantity(2) + .build(); + + if(addon.validateAddOn()){ + Addon createdAddOn = instance.subscriptions.createAddon(subscriptionId,addonRequest.toJson()); + } + +``` **Parameters:** | Name | Type | Description | diff --git a/pom.xml b/pom.xml index 1b0abe6f..4ecdb4cb 100644 --- a/pom.xml +++ b/pom.xml @@ -57,6 +57,20 @@ 2.13.0 test + + + org.projectlombok + lombok + 1.18.24 + provided + + + + com.google.code.gson + gson + 2.10 + + org.json diff --git a/src/main/java/com/razorpay/Addon.java b/src/main/java/com/razorpay/Addon.java deleted file mode 100755 index e4e606d9..00000000 --- a/src/main/java/com/razorpay/Addon.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.razorpay; - -import org.json.JSONObject; - -public class Addon extends Entity { - - public Addon(JSONObject jsonObject) { - super(jsonObject); - } -} diff --git a/src/main/java/com/razorpay/ApiClient.java b/src/main/java/com/razorpay/ApiClient.java index 319ec3c0..aaf332dc 100755 --- a/src/main/java/com/razorpay/ApiClient.java +++ b/src/main/java/com/razorpay/ApiClient.java @@ -13,7 +13,7 @@ import okhttp3.HttpUrl; import okhttp3.Response; -class ApiClient { +public class ApiClient { String auth; @@ -31,7 +31,7 @@ class ApiClient { private final int STATUS_MULTIPLE_CHOICE = 300; - ApiClient(String auth) { + public ApiClient(String auth) { this.auth = auth; } @@ -56,7 +56,7 @@ public T patch(String path, JSONObject requestObject) throws } - ArrayList getCollection(String path, JSONObject requestObject) + public ArrayList getCollection(String path, JSONObject requestObject) throws RazorpayException { Response response = ApiUtils.getRequest(path, requestObject, auth); return processCollectionResponse(response); diff --git a/src/main/java/com/razorpay/Constants.java b/src/main/java/com/razorpay/Constants.java index 748d58db..b96d3c35 100755 --- a/src/main/java/com/razorpay/Constants.java +++ b/src/main/java/com/razorpay/Constants.java @@ -15,7 +15,7 @@ public class Constants { static final MediaType MEDIA_TYPE_JSON = MediaType.parse("application/json; charset=utf-8"); // API URI - static final String PAYMENT_GET = "payments/%s"; + public static final String PAYMENT_GET = "payments/%s"; static final String PAYMENT_LIST = "payments"; static final String PAYMENT_CAPTURE = "payments/%s/capture"; static final String PAYMENT_REFUND = "payments/%s/refund"; @@ -120,9 +120,9 @@ public class Constants { static final String SUBSCRIPTION_OFFER = "subscriptions/%s/%s"; static final String SUBSCRIPTION_REGISTRATION_LINK = "subscription_registration/auth_links"; - static final String ADDON_GET = "addons/%s"; - static final String ADDON_DELETE = "addons/%s"; - static final String ADDON_LIST = "addons"; + public static final String ADDON_GET = "addons/%s"; + public static final String ADDON_DELETE = "addons/%s"; + public static final String ADDON_LIST = "addons"; static final String VIRTUAL_ACCOUNT_CREATE = "virtual_accounts"; static final String VIRTUAL_ACCOUNT_GET = "virtual_accounts/%s"; diff --git a/src/main/java/com/razorpay/Entity.java b/src/main/java/com/razorpay/Entity.java index ec46e474..8e5f1911 100644 --- a/src/main/java/com/razorpay/Entity.java +++ b/src/main/java/com/razorpay/Entity.java @@ -11,7 +11,7 @@ public abstract class Entity { private final String CREATED_AT = "created_at"; private final String CAPTURED_AT = "captured_at"; - Entity(JSONObject jsonObject) { + public Entity(JSONObject jsonObject) { this.modelJson = jsonObject; } diff --git a/src/main/java/com/razorpay/RazorpayClient.java b/src/main/java/com/razorpay/RazorpayClient.java index a42bbcdd..771b5036 100755 --- a/src/main/java/com/razorpay/RazorpayClient.java +++ b/src/main/java/com/razorpay/RazorpayClient.java @@ -2,6 +2,7 @@ import java.util.Map; +import com.razorpay.addon.AddonClient; import okhttp3.Credentials; public class RazorpayClient { diff --git a/src/main/java/com/razorpay/RefundClient.java b/src/main/java/com/razorpay/RefundClient.java index 78bc5345..6117bd33 100755 --- a/src/main/java/com/razorpay/RefundClient.java +++ b/src/main/java/com/razorpay/RefundClient.java @@ -6,7 +6,7 @@ public class RefundClient extends ApiClient { - RefundClient(String auth) { + public RefundClient(String auth) { super(auth); } diff --git a/src/main/java/com/razorpay/SubscriptionClient.java b/src/main/java/com/razorpay/SubscriptionClient.java index b62fd904..9af92da5 100644 --- a/src/main/java/com/razorpay/SubscriptionClient.java +++ b/src/main/java/com/razorpay/SubscriptionClient.java @@ -2,6 +2,7 @@ import java.util.List; +import com.razorpay.addon.Addon; import org.json.JSONObject; public class SubscriptionClient extends ApiClient { @@ -38,6 +39,10 @@ public Addon createAddon(String id, JSONObject request) throws RazorpayException return post(String.format(Constants.SUBSCRIPTION_ADDON_CREATE, id), request); } + public Addon createAddon(String id, Addon addon) throws RazorpayException { + return post(String.format(Constants.SUBSCRIPTION_ADDON_CREATE, id), addon.toJson()); + } + public Subscription update(String id, JSONObject request) throws RazorpayException { return patch(String.format(Constants.SUBSCRIPTION, id), request); } diff --git a/src/main/java/com/razorpay/addon/AddOnItem.java b/src/main/java/com/razorpay/addon/AddOnItem.java new file mode 100644 index 00000000..875469a8 --- /dev/null +++ b/src/main/java/com/razorpay/addon/AddOnItem.java @@ -0,0 +1,14 @@ +package com.razorpay.addon; + +import lombok.Builder; +import lombok.Getter; + +@Builder +@Getter +public class AddOnItem { + String name; + Integer amount; + String currency; + String description; + +} diff --git a/src/main/java/com/razorpay/addon/Addon.java b/src/main/java/com/razorpay/addon/Addon.java new file mode 100755 index 00000000..92f82754 --- /dev/null +++ b/src/main/java/com/razorpay/addon/Addon.java @@ -0,0 +1,48 @@ +package com.razorpay.addon; + +import com.google.gson.Gson; +import com.razorpay.Entity; +import lombok.Builder; +import org.json.JSONObject; + +@Builder +public class Addon extends Entity { + + public Addon(JSONObject jsonObject) { + super(jsonObject); + } + + AddOnItem items; + Integer quantity; + + public JSONObject toJson(){ + + JSONObject addonRequest = new JSONObject(); + JSONObject itemsJson = new JSONObject(); + itemsJson.put("name",items.getName()); + itemsJson.put("amount",items.getAmount()); + itemsJson.put("currency",items.getCurrency()); + itemsJson.put("description",items.getDescription()); + addonRequest.put("item",itemsJson); + addonRequest.put("quantity",this.quantity); + + return addonRequest; + } + + public static Addon getAddOnFromJson(JSONObject jsonObject) throws Exception { + Gson gson = new Gson(); + try { + Addon addon= gson.fromJson(String.valueOf(jsonObject), Addon.class); + return addon; + } catch (Exception e){ + throw new Exception("Error parsing. Please check the input string"); + } + } + + public boolean validateAddOn(){ + if(this.items.getName() == null || this.items.getName().isEmpty()) { + return false; + } + return true; + } +} diff --git a/src/main/java/com/razorpay/AddonClient.java b/src/main/java/com/razorpay/addon/AddonClient.java similarity index 85% rename from src/main/java/com/razorpay/AddonClient.java rename to src/main/java/com/razorpay/addon/AddonClient.java index d5cafcea..37ca6a90 100644 --- a/src/main/java/com/razorpay/AddonClient.java +++ b/src/main/java/com/razorpay/addon/AddonClient.java @@ -1,12 +1,15 @@ -package com.razorpay; +package com.razorpay.addon; import java.util.List; +import com.razorpay.ApiClient; +import com.razorpay.Constants; +import com.razorpay.RazorpayException; import org.json.JSONObject; public class AddonClient extends ApiClient { - AddonClient(String auth) { + public AddonClient(String auth) { super(auth); } diff --git a/src/test/java/com/razorpay/AddonClientTest.java b/src/test/java/com/razorpay/AddonClientTest.java index 3bcd6658..907b5185 100644 --- a/src/test/java/com/razorpay/AddonClientTest.java +++ b/src/test/java/com/razorpay/AddonClientTest.java @@ -1,5 +1,8 @@ package com.razorpay; +import com.razorpay.addon.AddOnItem; +import com.razorpay.addon.Addon; +import com.razorpay.addon.AddonClient; import org.json.JSONObject; import org.junit.Test; import org.mockito.InjectMocks; @@ -23,6 +26,7 @@ public class AddonClientTest extends BaseTest{ @Test public void fetch() throws RazorpayException { + String json = "{\n \"id\":"+ADDON_ID+",\n" + "\"entity\":\"addon\",\n" + "\"item\":{\n" + @@ -117,4 +121,21 @@ public void fetchAll() throws RazorpayException { assertTrue(false); } } + + public void testCreate(){ + Addon addon = Addon.builder() + .items( + AddOnItem.builder() + .name("Test") + .amount(3000) + .currency("INR") + .description("Test description") + .build() + ) + .quantity(2) + .build(); + if(addon.validateAddOn()){ + + } + } } diff --git a/src/test/java/com/razorpay/SubscriptionClientTest.java b/src/test/java/com/razorpay/SubscriptionClientTest.java index 4fd2971f..4883ab8e 100644 --- a/src/test/java/com/razorpay/SubscriptionClientTest.java +++ b/src/test/java/com/razorpay/SubscriptionClientTest.java @@ -1,12 +1,9 @@ package com.razorpay; -import okhttp3.Request; -import okio.Buffer; +import com.razorpay.addon.Addon; import org.json.JSONObject; import org.junit.Test; -import org.mockito.ArgumentCaptor; import org.mockito.InjectMocks; -import org.mockito.Mockito; import java.io.IOException; import java.util.Arrays;