From acc0e7fc68adf35ed1cec59b5c448510e00ec05d Mon Sep 17 00:00:00 2001 From: Abeer Date: Thu, 10 Jan 2019 15:39:25 +0530 Subject: [PATCH] Use org.joda.time.DateTime to handle datetime objects All datetime fields in the models are now parsed to `org.joda.time.DateTime` in UTC. This is set as a convention to avoid any inconsistencies in the timezone sent in the v2 API. `DateTimeUtils.parseISODateTimeString` will automatically detect the timezone in datetime string and return a `DateTime` object, given that the string is in ISO8601 format. Signed-off-by: Abeer --- build.gradle | 1 + .../com/instamojo/wrapper/api/Instamojo.java | 5 ++- .../instamojo/wrapper/api/InstamojoImpl.java | 8 +++-- .../com/instamojo/wrapper/model/Invoice.java | 21 ++++++----- .../instamojo/wrapper/model/PaymentOrder.java | 7 ++-- .../wrapper/model/PaymentRequest.java | 26 +++++++------- .../com/instamojo/wrapper/model/Payout.java | 9 +++-- .../com/instamojo/wrapper/model/Refund.java | 9 +++-- .../instamojo/wrapper/util/DateTimeUtils.java | 13 +++++++ .../instamojo/wrapper/util/GsonWrapper.java | 36 +++++++++++++++++++ .../com/instamojo/wrapper/util/HttpUtils.java | 5 +-- .../wrapper/api/InstamojoExample.java | 2 +- .../wrapper/api/InstamojoIntegrationTest.java | 4 ++- .../wrapper/model/AccessTokenTest.java | 11 +++--- .../instamojo/wrapper/model/InvoiceTest.java | 20 ++++++----- .../wrapper/model/PaymentOptionsTest.java | 6 ++-- .../wrapper/model/PaymentOrderTest.java | 7 ++-- .../wrapper/model/PaymentRequestTest.java | 7 ++-- .../instamojo/wrapper/model/PayoutsTest.java | 16 ++++----- .../instamojo/wrapper/model/RefundTest.java | 28 +++++++-------- 20 files changed, 146 insertions(+), 95 deletions(-) create mode 100644 src/main/java/com/instamojo/wrapper/util/DateTimeUtils.java create mode 100644 src/main/java/com/instamojo/wrapper/util/GsonWrapper.java diff --git a/build.gradle b/build.gradle index 2242afa..a88849a 100644 --- a/build.gradle +++ b/build.gradle @@ -56,6 +56,7 @@ dependencies { compile group: 'commons-codec', name: 'commons-codec', version: '1.11' compile group: 'commons-logging', name: 'commons-logging', version: '1.2' compile group: 'com.google.code.gson', name: 'gson', version: '2.8.5' + compile group: 'joda-time', name: 'joda-time', version: '2.10.1' } jacocoTestReport { diff --git a/src/main/java/com/instamojo/wrapper/api/Instamojo.java b/src/main/java/com/instamojo/wrapper/api/Instamojo.java index 1f5fc59..87bb9a8 100644 --- a/src/main/java/com/instamojo/wrapper/api/Instamojo.java +++ b/src/main/java/com/instamojo/wrapper/api/Instamojo.java @@ -1,13 +1,12 @@ package com.instamojo.wrapper.api; -import com.instamojo.wrapper.filter.PaymentRequestFilter; -import com.instamojo.wrapper.filter.PayoutFilter; import com.instamojo.wrapper.exception.ConnectionException; import com.instamojo.wrapper.exception.HTTPException; +import com.instamojo.wrapper.filter.PaymentRequestFilter; +import com.instamojo.wrapper.filter.PayoutFilter; import com.instamojo.wrapper.model.*; import com.instamojo.wrapper.response.ApiListResponse; -import java.util.List; import java.util.Map; /** diff --git a/src/main/java/com/instamojo/wrapper/api/InstamojoImpl.java b/src/main/java/com/instamojo/wrapper/api/InstamojoImpl.java index 7b37d63..c3bd0cb 100644 --- a/src/main/java/com/instamojo/wrapper/api/InstamojoImpl.java +++ b/src/main/java/com/instamojo/wrapper/api/InstamojoImpl.java @@ -10,6 +10,7 @@ import com.instamojo.wrapper.response.ApiListResponse; import com.instamojo.wrapper.response.ApiResponse; import com.instamojo.wrapper.util.Constants; +import com.instamojo.wrapper.util.GsonWrapper; import com.instamojo.wrapper.util.HttpUtils; import org.apache.commons.codec.digest.HmacAlgorithms; import org.apache.commons.codec.digest.HmacUtils; @@ -18,7 +19,10 @@ import java.io.IOException; import java.lang.reflect.Type; import java.net.URISyntaxException; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; public class InstamojoImpl implements Instamojo { @@ -28,7 +32,7 @@ public class InstamojoImpl implements Instamojo { public InstamojoImpl(ApiContext context) { this.context = context; - this.gson = new Gson(); + this.gson = GsonWrapper.getGson(); } @Override diff --git a/src/main/java/com/instamojo/wrapper/model/Invoice.java b/src/main/java/com/instamojo/wrapper/model/Invoice.java index 80df23a..badbaab 100644 --- a/src/main/java/com/instamojo/wrapper/model/Invoice.java +++ b/src/main/java/com/instamojo/wrapper/model/Invoice.java @@ -1,8 +1,7 @@ package com.instamojo.wrapper.model; import com.google.gson.annotations.SerializedName; - -import java.util.Date; +import org.joda.time.DateTime; public class Invoice { @@ -12,16 +11,16 @@ public class Invoice { private String userUri; @SerializedName("created_at") - private Date createdAt; + private DateTime createdAt; @SerializedName("issue_date") - private Date issueDate; + private DateTime issueDate; @SerializedName("file") private String fileUrl; @SerializedName("last_modified") - private Date modifiedAt; + private DateTime modifiedAt; public String getId() { return id; @@ -39,19 +38,19 @@ public void setUserUri(String userUri) { this.userUri = userUri; } - public Date getCreatedAt() { + public DateTime getCreatedAt() { return createdAt; } - public void setCreatedAt(Date createdAt) { + public void setCreatedAt(DateTime createdAt) { this.createdAt = createdAt; } - public Date getIssueDate() { + public DateTime getIssueDate() { return issueDate; } - public void setIssueDate(Date issueDate) { + public void setIssueDate(DateTime issueDate) { this.issueDate = issueDate; } @@ -63,11 +62,11 @@ public void setFileUrl(String fileUrl) { this.fileUrl = fileUrl; } - public Date getModifiedAt() { + public DateTime getModifiedAt() { return modifiedAt; } - public void setModifiedAt(Date modifiedAt) { + public void setModifiedAt(DateTime modifiedAt) { this.modifiedAt = modifiedAt; } diff --git a/src/main/java/com/instamojo/wrapper/model/PaymentOrder.java b/src/main/java/com/instamojo/wrapper/model/PaymentOrder.java index 8148655..814ed7a 100644 --- a/src/main/java/com/instamojo/wrapper/model/PaymentOrder.java +++ b/src/main/java/com/instamojo/wrapper/model/PaymentOrder.java @@ -1,6 +1,7 @@ package com.instamojo.wrapper.model; import com.google.gson.annotations.SerializedName; +import org.joda.time.DateTime; import java.util.List; @@ -68,7 +69,7 @@ public class PaymentOrder { * The created at. */ @SerializedName("created_at") - private String createdAt; + private DateTime createdAt; /** * The resource uri. @@ -288,7 +289,7 @@ public void setRedirectUrl(String redirectUrl) { * * @return the created at */ - public String getCreatedAt() { + public DateTime getCreatedAt() { return createdAt; } @@ -297,7 +298,7 @@ public String getCreatedAt() { * * @param createdAt the new created at */ - public void setCreatedAt(String createdAt) { + public void setCreatedAt(DateTime createdAt) { this.createdAt = createdAt; } diff --git a/src/main/java/com/instamojo/wrapper/model/PaymentRequest.java b/src/main/java/com/instamojo/wrapper/model/PaymentRequest.java index c287b3d..010e685 100644 --- a/src/main/java/com/instamojo/wrapper/model/PaymentRequest.java +++ b/src/main/java/com/instamojo/wrapper/model/PaymentRequest.java @@ -1,8 +1,8 @@ package com.instamojo.wrapper.model; import com.google.gson.annotations.SerializedName; +import org.joda.time.DateTime; -import java.util.Date; import java.util.List; public class PaymentRequest { @@ -50,10 +50,10 @@ public class PaymentRequest { private String webhookUrl; @SerializedName("scheduled_at") - private Date scheduledAt; + private DateTime scheduledAt; @SerializedName("expires_at") - private Date expiresAt; + private DateTime expiresAt; @SerializedName("allow_repeated_payments") private Boolean allowRepeatedPayments; @@ -71,10 +71,10 @@ public class PaymentRequest { private Boolean markFulfilled; @SerializedName("created_at") - private Date createdAt; + private DateTime createdAt; @SerializedName("modified_at") - private Date modifiedAt; + private DateTime modifiedAt; @SerializedName("resource_uri") private String resourceUri; @@ -207,19 +207,19 @@ public void setWebhookUrl(String webhookUrl) { this.webhookUrl = webhookUrl; } - public Date getScheduledAt() { + public DateTime getScheduledAt() { return scheduledAt; } - public void setScheduledAt(Date scheduledAt) { + public void setScheduledAt(DateTime scheduledAt) { this.scheduledAt = scheduledAt; } - public Date getExpiresAt() { + public DateTime getExpiresAt() { return expiresAt; } - public void setExpiresAt(Date expiresAt) { + public void setExpiresAt(DateTime expiresAt) { this.expiresAt = expiresAt; } @@ -263,19 +263,19 @@ public void setMarkFulfilled(Boolean markFulfilled) { this.markFulfilled = markFulfilled; } - public Date getCreatedAt() { + public DateTime getCreatedAt() { return createdAt; } - public void setCreatedAt(Date createdAt) { + public void setCreatedAt(DateTime createdAt) { this.createdAt = createdAt; } - public Date getModifiedAt() { + public DateTime getModifiedAt() { return modifiedAt; } - public void setModifiedAt(Date modifiedAt) { + public void setModifiedAt(DateTime modifiedAt) { this.modifiedAt = modifiedAt; } diff --git a/src/main/java/com/instamojo/wrapper/model/Payout.java b/src/main/java/com/instamojo/wrapper/model/Payout.java index ac20c6a..a876d73 100644 --- a/src/main/java/com/instamojo/wrapper/model/Payout.java +++ b/src/main/java/com/instamojo/wrapper/model/Payout.java @@ -1,8 +1,7 @@ package com.instamojo.wrapper.model; import com.google.gson.annotations.SerializedName; - -import java.util.Date; +import org.joda.time.DateTime; public class Payout { @@ -13,7 +12,7 @@ public class Payout { private Boolean status; @SerializedName("paid_out_at") - private Date paidOutAt; + private DateTime paidOutAt; private String currency; @@ -71,11 +70,11 @@ public void setStatus(Boolean status) { this.status = status; } - public Date getPaidOutAt() { + public DateTime getPaidOutAt() { return paidOutAt; } - public void setPaidOutAt(Date paidOutAt) { + public void setPaidOutAt(DateTime paidOutAt) { this.paidOutAt = paidOutAt; } diff --git a/src/main/java/com/instamojo/wrapper/model/Refund.java b/src/main/java/com/instamojo/wrapper/model/Refund.java index 7be373b..1e165bf 100644 --- a/src/main/java/com/instamojo/wrapper/model/Refund.java +++ b/src/main/java/com/instamojo/wrapper/model/Refund.java @@ -1,8 +1,7 @@ package com.instamojo.wrapper.model; import com.google.gson.annotations.SerializedName; - -import java.util.Date; +import org.joda.time.DateTime; /** * The Class Refund. @@ -31,7 +30,7 @@ public class Refund { private Double totalAmount; @SerializedName("created_at") - private Date createdAt; + private DateTime createdAt; public String getId() { return id; @@ -89,11 +88,11 @@ public void setTotalAmount(Double totalAmount) { this.totalAmount = totalAmount; } - public Date getCreatedAt() { + public DateTime getCreatedAt() { return createdAt; } - public void setCreatedAt(Date createdAt) { + public void setCreatedAt(DateTime createdAt) { this.createdAt = createdAt; } diff --git a/src/main/java/com/instamojo/wrapper/util/DateTimeUtils.java b/src/main/java/com/instamojo/wrapper/util/DateTimeUtils.java new file mode 100644 index 0000000..d8861f7 --- /dev/null +++ b/src/main/java/com/instamojo/wrapper/util/DateTimeUtils.java @@ -0,0 +1,13 @@ +package com.instamojo.wrapper.util; + +import org.joda.time.DateTime; +import org.joda.time.DateTimeZone; +import org.joda.time.format.ISODateTimeFormat; + +public class DateTimeUtils { + + public static DateTime parseISODateTimeString(String datetime) { + return ISODateTimeFormat.dateTime().withZone(DateTimeZone.UTC).parseDateTime(datetime); + } + +} diff --git a/src/main/java/com/instamojo/wrapper/util/GsonWrapper.java b/src/main/java/com/instamojo/wrapper/util/GsonWrapper.java new file mode 100644 index 0000000..5f56e5f --- /dev/null +++ b/src/main/java/com/instamojo/wrapper/util/GsonWrapper.java @@ -0,0 +1,36 @@ +package com.instamojo.wrapper.util; + +import com.google.gson.*; +import org.joda.time.DateTime; + +import java.lang.reflect.Type; + + +final class DateTimeDeserializer implements JsonDeserializer { + + @Override + public DateTime deserialize(JsonElement value, Type type, JsonDeserializationContext context) throws JsonParseException { + return value == null ? null : DateTimeUtils.parseISODateTimeString(value.getAsString()); + } +} + +final class DateTimeSerializer implements JsonSerializer { + + @Override + public JsonElement serialize(DateTime dt, Type type, JsonSerializationContext context) throws JsonParseException { + return dt == null ? null : new JsonPrimitive(dt.toString()); + } + +} + + +public class GsonWrapper { + + public static Gson getGson() { + return new GsonBuilder() + .registerTypeAdapter(DateTime.class, new DateTimeDeserializer()) + .registerTypeAdapter(DateTime.class, new DateTimeSerializer()) + .create(); + } + +} diff --git a/src/main/java/com/instamojo/wrapper/util/HttpUtils.java b/src/main/java/com/instamojo/wrapper/util/HttpUtils.java index d8e3ab4..70b9f94 100644 --- a/src/main/java/com/instamojo/wrapper/util/HttpUtils.java +++ b/src/main/java/com/instamojo/wrapper/util/HttpUtils.java @@ -150,11 +150,8 @@ public static String post(String url, Map customHeaders, String } private static boolean isErrorStatus(int statusCode) { - if (statusCode >= 400 && statusCode < 600) { - return true; - } + return statusCode >= 400 && statusCode < 600; - return false; } private static void populateHeaders(HttpRequestBase httpRequestBase, Map customHeaders) { diff --git a/src/test/java/com/instamojo/wrapper/api/InstamojoExample.java b/src/test/java/com/instamojo/wrapper/api/InstamojoExample.java index d4e9f90..76f1d61 100644 --- a/src/test/java/com/instamojo/wrapper/api/InstamojoExample.java +++ b/src/test/java/com/instamojo/wrapper/api/InstamojoExample.java @@ -11,7 +11,7 @@ public class InstamojoExample { - public static void main(String args[]) { + public static void main(String[] args) { /* * Get a reference to the instamojo api diff --git a/src/test/java/com/instamojo/wrapper/api/InstamojoIntegrationTest.java b/src/test/java/com/instamojo/wrapper/api/InstamojoIntegrationTest.java index ca39c80..9a6c1b7 100644 --- a/src/test/java/com/instamojo/wrapper/api/InstamojoIntegrationTest.java +++ b/src/test/java/com/instamojo/wrapper/api/InstamojoIntegrationTest.java @@ -3,7 +3,9 @@ import com.instamojo.wrapper.builder.PaymentOrderBuilder; import com.instamojo.wrapper.exception.HTTPException; import com.instamojo.wrapper.filter.PaymentRequestFilter; -import com.instamojo.wrapper.model.*; +import com.instamojo.wrapper.model.PaymentOrder; +import com.instamojo.wrapper.model.PaymentOrderResponse; +import com.instamojo.wrapper.model.PaymentRequest; import com.instamojo.wrapper.response.ApiListResponse; import com.instamojo.wrapper.util.TestConstants; import org.junit.Before; diff --git a/src/test/java/com/instamojo/wrapper/model/AccessTokenTest.java b/src/test/java/com/instamojo/wrapper/model/AccessTokenTest.java index 0b0b662..fb418bd 100644 --- a/src/test/java/com/instamojo/wrapper/model/AccessTokenTest.java +++ b/src/test/java/com/instamojo/wrapper/model/AccessTokenTest.java @@ -3,10 +3,12 @@ import com.google.gson.Gson; import com.instamojo.wrapper.exception.HTTPException; import com.instamojo.wrapper.util.Constants; +import com.instamojo.wrapper.util.GsonWrapper; import com.instamojo.wrapper.util.HttpUtils; import com.instamojo.wrapper.util.TestConstants; import org.junit.Before; import org.junit.Test; + import java.io.IOException; import java.util.HashMap; import java.util.Map; @@ -18,6 +20,7 @@ public class AccessTokenTest { private String AUTH_ENDPOINT = Constants.INSTAMOJO_TEST_AUTH_ENDPOINT; private Map apiParams = new HashMap<>(); + private static Gson gson = GsonWrapper.getGson(); @Before public void setUp() { @@ -34,7 +37,7 @@ public void testApplicationBasedAuthAccessToken() throws IOException, HTTPExcept apiParams.put(Constants.PARAM_GRANT_TYPE, Constants.GRANT_TYPE_CLIENT_CREDENTIALS); String response = HttpUtils.post(AUTH_ENDPOINT, null, apiParams); - AccessToken accessToken = new Gson().fromJson(response, AccessToken.class); + AccessToken accessToken = gson.fromJson(response, AccessToken.class); assertEquals(accessToken.getTokenType(), "Bearer"); assertEquals((long) accessToken.getExpiresIn(), (long) 36000); @@ -51,7 +54,7 @@ public void testUserBasedAuthAccessToken() throws IOException, HTTPException { apiParams.put(Constants.PARAM_PASSWORD, TestConstants.PASSWORD); String response = HttpUtils.post(AUTH_ENDPOINT, null, apiParams); - AccessToken accessToken = new Gson().fromJson(response, AccessToken.class); + AccessToken accessToken = gson.fromJson(response, AccessToken.class); assertEquals(accessToken.getTokenType(), "Bearer"); assertEquals((long) accessToken.getExpiresIn(), (long) 36000); @@ -72,7 +75,7 @@ public void testRefreshTokenBasedAuthAccessToken() throws IOException, HTTPExcep apiParams.put(Constants.PARAM_PASSWORD, TestConstants.PASSWORD); String response = HttpUtils.post(AUTH_ENDPOINT, null, apiParams); - AccessToken accessToken = new Gson().fromJson(response, AccessToken.class); + AccessToken accessToken = gson.fromJson(response, AccessToken.class); String refreshToken = accessToken.getRefreshToken(); @@ -86,7 +89,7 @@ public void testRefreshTokenBasedAuthAccessToken() throws IOException, HTTPExcep apiParams.put(Constants.PARAM_REFRESH_TOKEN, refreshToken); response = HttpUtils.post(AUTH_ENDPOINT, null, apiParams); - accessToken = new Gson().fromJson(response, AccessToken.class); + accessToken = gson.fromJson(response, AccessToken.class); assertEquals(accessToken.getTokenType(), "Bearer"); assertEquals((long) accessToken.getExpiresIn(), (long) 36000); diff --git a/src/test/java/com/instamojo/wrapper/model/InvoiceTest.java b/src/test/java/com/instamojo/wrapper/model/InvoiceTest.java index 0096de1..f55744e 100644 --- a/src/test/java/com/instamojo/wrapper/model/InvoiceTest.java +++ b/src/test/java/com/instamojo/wrapper/model/InvoiceTest.java @@ -1,20 +1,22 @@ package com.instamojo.wrapper.model; import com.google.gson.Gson; +import com.instamojo.wrapper.util.DateTimeUtils; +import com.instamojo.wrapper.util.GsonWrapper; +import org.joda.time.DateTime; import org.junit.Test; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; -import java.util.Date; import java.util.TimeZone; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; public class InvoiceTest { private static String apiResponse = "{\"issue_date\": \"2018-10-31T18:29:59.999999Z\", \"created_at\": \"2018-11-01T20:00:03.883014Z\", \"last_modified\": \"2018-11-01T20:00:03.900308Z\", \"user\": \"https://staging.instamojo.com/v2/users/76dd6c8107034a3e971b70696a16aad3/\", \"file\": \"https://s3.amazonaws.com/path/to/file/\", \"id\": \"080661309/000005\"}"; - private Gson gson = new Gson(); + private Gson gson = GsonWrapper.getGson(); @Test public void testPayoutsCreation() throws ParseException { @@ -24,14 +26,14 @@ public void testPayoutsCreation() throws ParseException { DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); df.setTimeZone(TimeZone.getTimeZone("UTC")); - Date actualCreatedAt = df.parse("2018-11-01T20:00:03.883Z"); - Date actualIssueDate = df.parse("2018-10-31T18:29:59.999Z"); - Date actualModifiedAt = df.parse("2018-11-01T20:00:03.900Z"); + DateTime expectedCreatedAt = DateTimeUtils.parseISODateTimeString("2018-11-01T20:00:03.883Z"); + DateTime expectedIssueDate = DateTimeUtils.parseISODateTimeString("2018-10-31T18:29:59.999Z"); + DateTime expectedModifiedAt = DateTimeUtils.parseISODateTimeString("2018-11-01T20:00:03.900Z"); assertEquals(invoice.getId(), "080661309/000005"); - assertEquals(invoice.getCreatedAt(), actualCreatedAt); - assertEquals(invoice.getIssueDate(), actualIssueDate); - assertEquals(invoice.getModifiedAt(), actualModifiedAt); + assertEquals(expectedCreatedAt, invoice.getCreatedAt()); + assertEquals(expectedIssueDate, invoice.getIssueDate()); + assertEquals(expectedModifiedAt, invoice.getModifiedAt()); assertEquals(invoice.getUserUri(), "https://staging.instamojo.com/v2/users/76dd6c8107034a3e971b70696a16aad3/"); assertEquals(invoice.getFileUrl(), "https://s3.amazonaws.com/path/to/file/"); diff --git a/src/test/java/com/instamojo/wrapper/model/PaymentOptionsTest.java b/src/test/java/com/instamojo/wrapper/model/PaymentOptionsTest.java index fcd753d..8bc55c5 100644 --- a/src/test/java/com/instamojo/wrapper/model/PaymentOptionsTest.java +++ b/src/test/java/com/instamojo/wrapper/model/PaymentOptionsTest.java @@ -6,15 +6,15 @@ import com.instamojo.wrapper.exception.ConnectionException; import com.instamojo.wrapper.exception.HTTPException; import com.instamojo.wrapper.util.Constants; +import com.instamojo.wrapper.util.GsonWrapper; import com.instamojo.wrapper.util.HttpUtils; import com.instamojo.wrapper.util.TestConstants; import org.junit.Before; import org.junit.Test; import java.io.IOException; - -import java.util.HashMap; import java.net.URL; +import java.util.HashMap; import java.util.Map; import static org.junit.Assert.assertEquals; @@ -24,7 +24,7 @@ public class PaymentOptionsTest { private String PAYMENT_ORDER_ENDPOINT; private Map headers = new HashMap<>(); - private Gson gson = new Gson(); + private Gson gson = GsonWrapper.getGson(); private ApiContext context; private PaymentOrderResponse orderResponse = new PaymentOrderResponse(); diff --git a/src/test/java/com/instamojo/wrapper/model/PaymentOrderTest.java b/src/test/java/com/instamojo/wrapper/model/PaymentOrderTest.java index 846b7e0..ebbb99e 100644 --- a/src/test/java/com/instamojo/wrapper/model/PaymentOrderTest.java +++ b/src/test/java/com/instamojo/wrapper/model/PaymentOrderTest.java @@ -6,6 +6,7 @@ import com.instamojo.wrapper.exception.ConnectionException; import com.instamojo.wrapper.exception.HTTPException; import com.instamojo.wrapper.util.Constants; +import com.instamojo.wrapper.util.GsonWrapper; import com.instamojo.wrapper.util.HttpUtils; import com.instamojo.wrapper.util.TestConstants; import org.junit.Before; @@ -15,15 +16,15 @@ import java.net.URL; import java.util.HashMap; import java.util.Map; -import java.util.UUID; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; public class PaymentOrderTest { private String PAYMENT_ORDER_ENDPOINT; private Map headers = new HashMap<>(); - private Gson gson = new Gson(); + private Gson gson = GsonWrapper.getGson(); private ApiContext context; private PaymentOrderResponse orderResponse = new PaymentOrderResponse(); diff --git a/src/test/java/com/instamojo/wrapper/model/PaymentRequestTest.java b/src/test/java/com/instamojo/wrapper/model/PaymentRequestTest.java index f1d91e9..cae9a60 100644 --- a/src/test/java/com/instamojo/wrapper/model/PaymentRequestTest.java +++ b/src/test/java/com/instamojo/wrapper/model/PaymentRequestTest.java @@ -5,23 +5,24 @@ import com.instamojo.wrapper.exception.ConnectionException; import com.instamojo.wrapper.exception.HTTPException; import com.instamojo.wrapper.util.Constants; +import com.instamojo.wrapper.util.GsonWrapper; import com.instamojo.wrapper.util.HttpUtils; import com.instamojo.wrapper.util.TestConstants; import org.junit.Before; import org.junit.Test; import java.io.IOException; -import java.net.URISyntaxException; import java.util.HashMap; import java.util.Map; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; public class PaymentRequestTest { private String PAYMENT_REQUEST_ENDPOINT; private Map headers = new HashMap<>(); - private Gson gson = new Gson(); + private Gson gson = GsonWrapper.getGson(); private ApiContext context; private PaymentRequest paymentRequest = new PaymentRequest(); diff --git a/src/test/java/com/instamojo/wrapper/model/PayoutsTest.java b/src/test/java/com/instamojo/wrapper/model/PayoutsTest.java index d44ff1e..2e850a3 100644 --- a/src/test/java/com/instamojo/wrapper/model/PayoutsTest.java +++ b/src/test/java/com/instamojo/wrapper/model/PayoutsTest.java @@ -1,32 +1,28 @@ package com.instamojo.wrapper.model; import com.google.gson.Gson; +import com.instamojo.wrapper.util.DateTimeUtils; +import com.instamojo.wrapper.util.GsonWrapper; +import org.joda.time.DateTime; import org.junit.Test; import java.net.MalformedURLException; import java.net.URL; -import java.text.DateFormat; import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.TimeZone; import static org.junit.Assert.*; public class PayoutsTest { private static String apiResponse = " {\"status\": true, \"paid_out_at\": \"2018-11-26T09:46:26.458516Z\", \"total_tax_amount\": \"2.30\", \"paid_amount\": \"168.04\", \"fee_amount\": \"12.66\", \"partner_commission_amount\": \"0.00\", \"refunded_amount\": \"0.00\", \"currency\": \"INR\", \"resource_uri\": \"https://staging.instamojo.com/v2/payouts/MOJO8b01001M01126000/\", \"shipping_fee\": \"0.00\", \"affiliate_commission_amount\": \"0.00\", \"reversed_amount\": \"0.00\", \"held_amount\": \"0.00\", \"recipient\": \"https://staging.instamojo.com/v2/users/d6e15a20d0994c0db67e3798c14ac840/\", \"id\": \"MOJO8b01001M01126000\", \"payout_type\": 0, \"sales_amount\": \"183.00\"} "; - private static Gson gson = new Gson(); + private static Gson gson = GsonWrapper.getGson(); @Test public void testPayoutsCreation() throws MalformedURLException, ParseException { Payout payout = gson.fromJson(apiResponse, Payout.class); - DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); - df.setTimeZone(TimeZone.getTimeZone("UTC")); - - Date actualPaidOutAt = df.parse("2018-11-26T09:46:26.458Z"); + DateTime expectedPaidOutAt = DateTimeUtils.parseISODateTimeString("2018-11-26T09:46:26.458516Z"); assertNotNull(payout.getRecipient()); @@ -36,7 +32,7 @@ public void testPayoutsCreation() throws MalformedURLException, ParseException { assertEquals(payout.getFeeAmount(), new Double(12.66)); assertEquals(payout.getHeldAmount(), new Double(0.0)); assertEquals(payout.getTotalTaxAmount(), new Double(2.30)); - assertEquals(payout.getPaidOutAt(), actualPaidOutAt); + assertEquals(expectedPaidOutAt, payout.getPaidOutAt()); assertEquals(payout.getRefundedAmount(), new Double(0.0)); assertEquals(payout.getReversedAmount(), new Double(0.0)); diff --git a/src/test/java/com/instamojo/wrapper/model/RefundTest.java b/src/test/java/com/instamojo/wrapper/model/RefundTest.java index 782105a..2e26dac 100644 --- a/src/test/java/com/instamojo/wrapper/model/RefundTest.java +++ b/src/test/java/com/instamojo/wrapper/model/RefundTest.java @@ -1,20 +1,20 @@ package com.instamojo.wrapper.model; import com.google.gson.Gson; +import com.instamojo.wrapper.util.DateTimeUtils; +import com.instamojo.wrapper.util.GsonWrapper; +import org.joda.time.DateTime; import org.junit.Test; -import java.text.DateFormat; import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.TimeZone; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; + public class RefundTest { private static String apiResponse = " {\"payment_id\": \"MOJO5c04000J30502939\", \"status\": \"Refunded\", \"body\": \"Customer isn\\'t satisfied with the quality\", \"total_amount\": \"100.00\", \"refund_amount\": \"100\", \"created_at\": \"2015-12-07T11:01:37.640Z\", \"type\": \"QFL\", \"id\": \"C5c0751269\"} "; - private static Gson gson = new Gson(); + private static Gson gson = GsonWrapper.getGson(); @Test public void testPayoutsCreation() throws ParseException { @@ -24,17 +24,15 @@ public void testPayoutsCreation() throws ParseException { assertEquals(refund.getId(), "C5c0751269"); assertEquals(refund.getPaymentId(), "MOJO5c04000J30502939"); - DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); - df.setTimeZone(TimeZone.getTimeZone("UTC")); - Date actualCreatedAt = df.parse("2015-12-07T11:01:37.640Z"); + DateTime excpectedCreatedAt = DateTimeUtils.parseISODateTimeString("2015-12-07T11:01:37.640Z"); - assertEquals(refund.getCreatedAt(), actualCreatedAt); + assertEquals(excpectedCreatedAt, refund.getCreatedAt()); - assertEquals(refund.getStatus(), "Refunded"); - assertEquals(refund.getType(), "QFL"); - assertEquals(refund.getBody(), "Customer isn't satisfied with the quality"); - assertEquals(refund.getRefundAmount(), new Double(100.0)); - assertEquals(refund.getTotalAmount(), new Double(100.0)); + assertEquals("Refunded", refund.getStatus()); + assertEquals("QFL", refund.getType()); + assertEquals("Customer isn't satisfied with the quality", refund.getBody()); + assertEquals(new Double(100.0), refund.getRefundAmount()); + assertEquals(new Double(100.0), refund.getTotalAmount()); }