diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/CreditJson.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/CreditJson.java
index 75ecde0..a63a244 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/CreditJson.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/CreditJson.java
@@ -100,7 +100,8 @@ public class CreditJson {
final CreditJson that = (CreditJson) o;
- if (creditAmount != null ? !creditAmount.equals(that.creditAmount) : that.creditAmount != null) {
+ if (!((creditAmount == null && that.creditAmount == null) ||
+ (creditAmount != null && that.creditAmount != null && creditAmount.compareTo(that.creditAmount) == 0))) {
return false;
}
if (!((effectiveDate == null && that.effectiveDate == null) ||
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/CreditResource.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/CreditResource.java
index 6ebf02c..74ea6a3 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/CreditResource.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/CreditResource.java
@@ -67,9 +67,12 @@ public class CreditResource implements JaxrsResource {
public Response getCredit(@PathParam("creditId") final String creditId) {
try {
final InvoiceItem credit = invoiceUserApi.getCreditById(UUID.fromString(creditId));
- final CreditJson creditJson = new CreditJson(credit);
-
- return Response.status(Response.Status.OK).entity(creditJson).build();
+ if (credit == null) {
+ return Response.status(Response.Status.NOT_FOUND).build();
+ } else {
+ final CreditJson creditJson = new CreditJson(credit);
+ return Response.status(Response.Status.OK).entity(creditJson).build();
+ }
} catch (InvoiceApiException e) {
final String error = String.format("Failed to locate credit for id %s", creditId);
log.info(error, e);
@@ -81,12 +84,16 @@ public class CreditResource implements JaxrsResource {
@Consumes(APPLICATION_JSON)
@Produces(APPLICATION_JSON)
public Response createCredit(final CreditJson json,
- @PathParam("accountId") final String accountId,
@HeaderParam(HDR_CREATED_BY) final String createdBy,
@HeaderParam(HDR_REASON) final String reason,
@HeaderParam(HDR_COMMENT) final String comment) {
+ final UUID accountId = json.getAccountId();
+ if (accountId == null) {
+ return Response.status(Response.Status.BAD_REQUEST).entity("AccountId cannot be null").build();
+ }
+
try {
- final Account account = accountUserApi.getAccountById(UUID.fromString(accountId));
+ final Account account = accountUserApi.getAccountById(accountId);
final InvoiceItem credit = invoiceUserApi.insertCredit(account.getId(), json.getCreditAmount(), json.getEffectiveDate(),
account.getCurrency(), context.createContext(createdBy, reason, comment));
diff --git a/server/src/test/java/com/ning/billing/jaxrs/TestCredit.java b/server/src/test/java/com/ning/billing/jaxrs/TestCredit.java
index 4abee9d..0129225 100644
--- a/server/src/test/java/com/ning/billing/jaxrs/TestCredit.java
+++ b/server/src/test/java/com/ning/billing/jaxrs/TestCredit.java
@@ -27,12 +27,12 @@ import org.testng.annotations.Test;
import com.ning.billing.jaxrs.json.AccountJson;
import com.ning.billing.jaxrs.json.CreditJson;
import com.ning.billing.jaxrs.resources.JaxrsResource;
+import com.ning.billing.util.clock.DefaultClock;
import com.ning.http.client.Response;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
-@Test(groups = "slow", enabled = false)
public class TestCredit extends TestJaxrsBase {
AccountJson accountJson;
@@ -44,9 +44,11 @@ public class TestCredit extends TestJaxrsBase {
@Test(groups = "slow")
public void testAddCreditToInvoice() throws Exception {
+ final DateTime requestedDate = DefaultClock.truncateMs(new DateTime(DateTimeZone.UTC));
+ final DateTime effectiveDate = DefaultClock.truncateMs(new DateTime(DateTimeZone.UTC));
final CreditJson input = new CreditJson(BigDecimal.TEN, UUID.randomUUID(), UUID.randomUUID().toString(),
- new DateTime(DateTimeZone.UTC), new DateTime(DateTimeZone.UTC),
- UUID.randomUUID().toString());
+ requestedDate, effectiveDate,
+ UUID.randomUUID().toString(), UUID.fromString(accountJson.getAccountId()));
final String jsonInput = mapper.writeValueAsString(input);
// Create the credit
@@ -60,16 +62,18 @@ public class TestCredit extends TestJaxrsBase {
response = doGetWithUrl(location, DEFAULT_EMPTY_QUERY, DEFAULT_HTTP_TIMEOUT_SEC);
assertEquals(response.getStatusCode(), javax.ws.rs.core.Response.Status.OK.getStatusCode());
+ // We can't just compare the object via .equals() due e.g. to the invoice id
final CreditJson objFromJson = mapper.readValue(response.getResponseBody(), CreditJson.class);
- assertNotNull(objFromJson);
- assertEquals(objFromJson, input);
+ assertEquals(objFromJson.getAccountId(), input.getAccountId());
+ assertEquals(objFromJson.getCreditAmount().compareTo(input.getCreditAmount()), 0);
+ assertEquals(objFromJson.getEffectiveDate().compareTo(input.getEffectiveDate()), 0);
}
@Test(groups = "slow")
public void testAccountDoesNotExist() throws Exception {
final CreditJson input = new CreditJson(BigDecimal.TEN, UUID.randomUUID(), UUID.randomUUID().toString(),
new DateTime(DateTimeZone.UTC), new DateTime(DateTimeZone.UTC),
- UUID.randomUUID().toString());
+ UUID.randomUUID().toString(), UUID.randomUUID());
final String jsonInput = mapper.writeValueAsString(input);
// Try to create the credit
@@ -79,7 +83,7 @@ public class TestCredit extends TestJaxrsBase {
@Test(groups = "slow")
public void testBadRequest() throws Exception {
- final CreditJson input = new CreditJson(null, null, null, null, null, null);
+ final CreditJson input = new CreditJson(null, null, null, null, null, null, null);
final String jsonInput = mapper.writeValueAsString(input);
// Try to create the credit