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);