killbill-memoizeit

jaxrs: better error handling for tag definition creation Check

6/28/2013 1:18:21 PM

Details

diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/TagResource.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/TagResource.java
index e0a9db9..5f78fcd 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/TagResource.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/TagResource.java
@@ -42,6 +42,7 @@ import com.ning.billing.util.api.TagDefinitionApiException;
 import com.ning.billing.util.api.TagUserApi;
 import com.ning.billing.util.tag.TagDefinition;
 
+import com.google.common.base.Preconditions;
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
 
@@ -91,6 +92,10 @@ public class TagResource extends JaxRsResourceBase {
                                         @HeaderParam(HDR_REASON) final String reason,
                                         @HeaderParam(HDR_COMMENT) final String comment,
                                         @javax.ws.rs.core.Context final HttpServletRequest request) throws TagDefinitionApiException {
+        // Checked as the database layer as well, but bail early and return 400 instead of 500
+        Preconditions.checkNotNull(json.getName(), String.format("TagDefinition name needs to be set"));
+        Preconditions.checkNotNull(json.getDescription(), String.format("TagDefinition description needs to be set"));
+
         final TagDefinition createdTagDef = tagUserApi.createTagDefinition(json.getName(), json.getDescription(), context.createContext(createdBy, reason, comment, request));
         return uriBuilder.buildResponse(TagResource.class, "getTagDefinition", createdTagDef.getId());
     }
diff --git a/server/src/test/java/com/ning/billing/jaxrs/TestTag.java b/server/src/test/java/com/ning/billing/jaxrs/TestTag.java
index ebea9ae..9003537 100644
--- a/server/src/test/java/com/ning/billing/jaxrs/TestTag.java
+++ b/server/src/test/java/com/ning/billing/jaxrs/TestTag.java
@@ -31,11 +31,22 @@ import com.google.common.collect.ImmutableList;
 
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNotNull;
-import static org.testng.Assert.assertTrue;
 
 public class TestTag extends TestJaxrsBase {
 
     @Test(groups = "slow")
+    public void testTagErrorHandling() throws Exception {
+        final TagDefinitionJson[] tags = new TagDefinitionJson[]{new TagDefinitionJson(null, false, null, null, null),
+                                                                 new TagDefinitionJson(null, false, "something", null, null),
+                                                                 new TagDefinitionJson(null, false, null, "something", null)};
+        for (final TagDefinitionJson tag : tags) {
+            final String baseJson = mapper.writeValueAsString(tag);
+            final Response response = doPost(JaxrsResource.TAG_DEFINITIONS_PATH, baseJson, DEFAULT_EMPTY_QUERY, DEFAULT_HTTP_TIMEOUT_SEC);
+            assertEquals(response.getStatusCode(), Status.BAD_REQUEST.getStatusCode());
+        }
+    }
+
+    @Test(groups = "slow")
     public void testTagDefinitionOk() throws Exception {
         final TagDefinitionJson input = new TagDefinitionJson(null, false, "blue", "relaxing color", ImmutableList.<String>of());
         String baseJson = mapper.writeValueAsString(input);