Details
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/InvoiceEmailJson.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/InvoiceEmailJson.java
new file mode 100644
index 0000000..4bffaa6
--- /dev/null
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/InvoiceEmailJson.java
@@ -0,0 +1,80 @@
+/*
+ * Copyright 2010-2012 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.jaxrs.json;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonGetter;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+public class InvoiceEmailJson {
+ private final String accountId;
+ private final boolean isNotifiedForInvoices;
+
+ @JsonCreator
+ public InvoiceEmailJson(@JsonProperty("accountId") final String accountId,
+ @JsonProperty("isNotifiedForInvoices") final boolean isNotifiedForInvoices) {
+ this.accountId = accountId;
+ this.isNotifiedForInvoices = isNotifiedForInvoices;
+ }
+
+ public String getAccountId() {
+ return accountId;
+ }
+
+ @JsonGetter("isNotifiedForInvoices")
+ public boolean isNotifiedForInvoices() {
+ return isNotifiedForInvoices;
+ }
+
+ @Override
+ public String toString() {
+ final StringBuilder sb = new StringBuilder();
+ sb.append("InvoiceEmailJson");
+ sb.append("{accountId='").append(accountId).append('\'');
+ sb.append(", isNotifiedForInvoices=").append(isNotifiedForInvoices);
+ sb.append('}');
+ return sb.toString();
+ }
+
+ @Override
+ public boolean equals(final Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+
+ final InvoiceEmailJson that = (InvoiceEmailJson) o;
+
+ if (isNotifiedForInvoices != that.isNotifiedForInvoices) {
+ return false;
+ }
+ if (accountId != null ? !accountId.equals(that.accountId) : that.accountId != null) {
+ return false;
+ }
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = accountId != null ? accountId.hashCode() : 0;
+ result = 31 * result + (isNotifiedForInvoices ? 1 : 0);
+ return result;
+ }
+}
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/AccountResource.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/AccountResource.java
index 445d46d..1b3f9ce 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/AccountResource.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/AccountResource.java
@@ -49,6 +49,7 @@ import com.ning.billing.account.api.AccountApiException;
import com.ning.billing.account.api.AccountData;
import com.ning.billing.account.api.AccountEmail;
import com.ning.billing.account.api.AccountUserApi;
+import com.ning.billing.account.api.MutableAccountData;
import com.ning.billing.entitlement.api.timeline.BundleTimeline;
import com.ning.billing.entitlement.api.timeline.EntitlementRepairException;
import com.ning.billing.entitlement.api.timeline.EntitlementTimelineApi;
@@ -61,6 +62,7 @@ import com.ning.billing.jaxrs.json.AccountJson;
import com.ning.billing.jaxrs.json.AccountTimelineJson;
import com.ning.billing.jaxrs.json.BundleJsonNoSubscriptions;
import com.ning.billing.jaxrs.json.CustomFieldJson;
+import com.ning.billing.jaxrs.json.InvoiceEmailJson;
import com.ning.billing.jaxrs.json.PaymentJsonSimple;
import com.ning.billing.jaxrs.json.PaymentMethodJson;
import com.ning.billing.jaxrs.util.Context;
@@ -261,7 +263,48 @@ public class AccountResource extends JaxRsResourceBase {
}
/*
- * ************************** PAYMENTS ********************************
+ * ************************** EMAIL NOTIFICATIONS FOR INVOICES ********************************
+ */
+
+ @GET
+ @Path("/{accountId:" + UUID_PATTERN + "}/" + EMAIL_NOTIFICATIONS)
+ @Produces(APPLICATION_JSON)
+ public Response getEmailNotificationsForAccount(@PathParam("accountId") final String accountId) {
+ try {
+ final Account account = accountApi.getAccountById(UUID.fromString(accountId));
+ final InvoiceEmailJson invoiceEmailJson = new InvoiceEmailJson(accountId, account.isNotifiedForInvoices());
+
+ return Response.status(Status.OK).entity(invoiceEmailJson).build();
+ } catch (AccountApiException e) {
+ return Response.status(Status.NOT_FOUND).build();
+ }
+ }
+
+ @PUT
+ @Path("/{accountId:" + UUID_PATTERN + "}/" + EMAIL_NOTIFICATIONS)
+ @Consumes(APPLICATION_JSON)
+ @Produces(APPLICATION_JSON)
+ public Response getEmailNotificationsForAccount(final InvoiceEmailJson json,
+ @PathParam("accountId") final String accountIdString,
+ @HeaderParam(HDR_CREATED_BY) final String createdBy,
+ @HeaderParam(HDR_REASON) final String reason,
+ @HeaderParam(HDR_COMMENT) final String comment) {
+ try {
+ final UUID accountId = UUID.fromString(accountIdString);
+ final Account account = accountApi.getAccountById(accountId);
+
+ final MutableAccountData mutableAccountData = account.toMutableAccountData();
+ mutableAccountData.setIsNotifiedForInvoices(json.isNotifiedForInvoices());
+ accountApi.updateAccount(accountId, mutableAccountData, context.createContext(createdBy, reason, comment));
+
+ return Response.status(Status.OK).build();
+ } catch (AccountApiException e) {
+ return Response.status(Status.NOT_FOUND).build();
+ }
+ }
+
+ /*
+ * ************************** PAYMENTS ********************************
*/
@GET
@@ -397,7 +440,7 @@ public class AccountResource extends JaxRsResourceBase {
}
/*
- * ************************* TAGS *****************************
+ * ************************* TAGS *****************************
*/
@GET
@@ -435,7 +478,7 @@ public class AccountResource extends JaxRsResourceBase {
}
/*
- * ************************* EMAILS *****************************
+ * ************************* EMAILS *****************************
*/
@GET
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/JaxrsResource.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/JaxrsResource.java
index 023f47a..16c6bc5 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/JaxrsResource.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/JaxrsResource.java
@@ -83,7 +83,6 @@ public interface JaxrsResource {
public static final String PAYMENT_METHODS_PATH = PREFIX + "/" + PAYMENT_METHODS;
public static final String PAYMENT_METHODS_DEFAULT_PATH_POSTFIX = "setDefault";
-
public static final String CREDITS = "credits";
public static final String CREDITS_PATH = PREFIX + "/" + CREDITS;
@@ -93,6 +92,7 @@ public interface JaxrsResource {
public static final String TAGS = "tags";
public static final String CUSTOM_FIELDS = "customFields";
public static final String EMAILS = "emails";
+ public static final String EMAIL_NOTIFICATIONS = "emailNotifications";
public static final String CATALOG = "catalog";
public static final String CATALOG_PATH = PREFIX + "/" + CATALOG;
diff --git a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestInvoiceEmailJson.java b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestInvoiceEmailJson.java
new file mode 100644
index 0000000..c859596
--- /dev/null
+++ b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestInvoiceEmailJson.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2010-2012 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.jaxrs.json;
+
+import java.util.UUID;
+
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+public class TestInvoiceEmailJson {
+ private static final ObjectMapper mapper = new ObjectMapper();
+
+ @Test(groups = "fast")
+ public void testJson() throws Exception {
+ final String accountId = UUID.randomUUID().toString();
+ final boolean isNotifiedForInvoices = true;
+
+ final InvoiceEmailJson invoiceEmailJson = new InvoiceEmailJson(accountId, isNotifiedForInvoices);
+ Assert.assertEquals(invoiceEmailJson.getAccountId(), accountId);
+ Assert.assertEquals(invoiceEmailJson.isNotifiedForInvoices(), isNotifiedForInvoices);
+
+ final String asJson = mapper.writeValueAsString(invoiceEmailJson);
+ Assert.assertEquals(asJson, "{\"accountId\":\"" + accountId + "\"," +
+ "\"isNotifiedForInvoices\":" + isNotifiedForInvoices + "}");
+
+ final InvoiceEmailJson fromJson = mapper.readValue(asJson, InvoiceEmailJson.class);
+ Assert.assertEquals(fromJson, invoiceEmailJson);
+ }
+}
diff --git a/server/src/test/java/com/ning/billing/jaxrs/TestAccountEmailNotifications.java b/server/src/test/java/com/ning/billing/jaxrs/TestAccountEmailNotifications.java
new file mode 100644
index 0000000..9982032
--- /dev/null
+++ b/server/src/test/java/com/ning/billing/jaxrs/TestAccountEmailNotifications.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright 2010-2012 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.jaxrs;
+
+import java.util.UUID;
+
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.ning.billing.jaxrs.json.AccountJson;
+import com.ning.billing.jaxrs.json.InvoiceEmailJson;
+import com.ning.billing.jaxrs.resources.JaxrsResource;
+import com.ning.http.client.Response;
+
+import static org.testng.Assert.assertEquals;
+
+public class TestAccountEmailNotifications extends TestJaxrsBase {
+ @Test(groups = "slow")
+ public void testSetAndUnsetEmailNotifications() throws Exception {
+ final AccountJson input = createAccount(UUID.randomUUID().toString(), UUID.randomUUID().toString(), UUID.randomUUID().toString());
+ final String accountId = input.getAccountId();
+
+ final InvoiceEmailJson invoiceEmailJsonWithNotifications = new InvoiceEmailJson(accountId, true);
+ final InvoiceEmailJson invoiceEmailJsonWithoutNotifications = new InvoiceEmailJson(accountId, false);
+ final String baseUri = JaxrsResource.ACCOUNTS_PATH + "/" + accountId + "/" + JaxrsResource.EMAIL_NOTIFICATIONS;
+
+ // Verify the initial state
+ final Response firstResponse = doGet(baseUri, DEFAULT_EMPTY_QUERY, DEFAULT_HTTP_TIMEOUT_SEC);
+ Assert.assertEquals(firstResponse.getStatusCode(), javax.ws.rs.core.Response.Status.OK.getStatusCode());
+ final InvoiceEmailJson firstInvoiceEmailJson = mapper.readValue(firstResponse.getResponseBody(), new TypeReference<InvoiceEmailJson>() {});
+ Assert.assertEquals(firstInvoiceEmailJson.getAccountId(), accountId);
+ Assert.assertFalse(firstInvoiceEmailJson.isNotifiedForInvoices());
+
+ // Enable email notifications
+ final String firstEmailString = mapper.writeValueAsString(invoiceEmailJsonWithNotifications);
+ final Response secondResponse = doPut(baseUri, firstEmailString, DEFAULT_EMPTY_QUERY, DEFAULT_HTTP_TIMEOUT_SEC);
+ assertEquals(secondResponse.getStatusCode(), javax.ws.rs.core.Response.Status.OK.getStatusCode());
+
+ // Verify we can retrieve it
+ final Response thirdResponse = doGet(baseUri, DEFAULT_EMPTY_QUERY, DEFAULT_HTTP_TIMEOUT_SEC);
+ Assert.assertEquals(thirdResponse.getStatusCode(), javax.ws.rs.core.Response.Status.OK.getStatusCode());
+ final InvoiceEmailJson secondInvoiceEmailJson = mapper.readValue(thirdResponse.getResponseBody(), new TypeReference<InvoiceEmailJson>() {});
+ Assert.assertEquals(secondInvoiceEmailJson.getAccountId(), accountId);
+ Assert.assertTrue(secondInvoiceEmailJson.isNotifiedForInvoices());
+
+ // Disable email notifications
+ final String secondEmailString = mapper.writeValueAsString(invoiceEmailJsonWithoutNotifications);
+ final Response fourthResponse = doPut(baseUri, secondEmailString, DEFAULT_EMPTY_QUERY, DEFAULT_HTTP_TIMEOUT_SEC);
+ assertEquals(fourthResponse.getStatusCode(), javax.ws.rs.core.Response.Status.OK.getStatusCode());
+
+ // Verify we can retrieve it
+ final Response fifthResponse = doGet(baseUri, DEFAULT_EMPTY_QUERY, DEFAULT_HTTP_TIMEOUT_SEC);
+ Assert.assertEquals(fifthResponse.getStatusCode(), javax.ws.rs.core.Response.Status.OK.getStatusCode());
+ final InvoiceEmailJson thirdInvoiceEmailJson = mapper.readValue(fifthResponse.getResponseBody(), new TypeReference<InvoiceEmailJson>() {});
+ Assert.assertEquals(thirdInvoiceEmailJson.getAccountId(), accountId);
+ Assert.assertFalse(thirdInvoiceEmailJson.isNotifiedForInvoices());
+ }
+}