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;