killbill-aplcache

util: Fixes #408 Fixed the CTOR to correctly return the list

10/12/2015 2:35:51 PM

Details

diff --git a/util/src/main/java/org/killbill/billing/util/tag/DefaultTagDefinition.java b/util/src/main/java/org/killbill/billing/util/tag/DefaultTagDefinition.java
index 32d85f8..48383fe 100644
--- a/util/src/main/java/org/killbill/billing/util/tag/DefaultTagDefinition.java
+++ b/util/src/main/java/org/killbill/billing/util/tag/DefaultTagDefinition.java
@@ -44,13 +44,14 @@ public class DefaultTagDefinition extends EntityBase implements TagDefinition {
     }
 
     public DefaultTagDefinition(final UUID id, final String name, final String description, final Boolean isControlTag) {
-        this(id, name, description, isControlTag, ImmutableList.<ObjectType>copyOf(ObjectType.values()));
+        this(id, name, description, isControlTag, getApplicableObjectTypes(id, isControlTag));
     }
 
     public DefaultTagDefinition(final ControlTagType controlTag) {
         this(controlTag.getId(), controlTag.toString(), controlTag.getDescription(), true, controlTag.getApplicableObjectTypes());
     }
 
+
     @JsonCreator
     public DefaultTagDefinition(@JsonProperty("id") final UUID id,
                                 @JsonProperty("name") final String name,
@@ -131,4 +132,16 @@ public class DefaultTagDefinition extends EntityBase implements TagDefinition {
         result = 31 * result + (applicableObjectTypes != null ? applicableObjectTypes.hashCode() : 0);
         return result;
     }
+
+    private static List<ObjectType> getApplicableObjectTypes(final UUID id, final Boolean isControlTag) {
+        if (!isControlTag) {
+            return ImmutableList.<ObjectType>of();
+        }
+        for (final ControlTagType cur : ControlTagType.values()) {
+            if (cur.getId().equals(id)) {
+                return cur.getApplicableObjectTypes();
+            }
+        }
+        throw new IllegalStateException(String.format("ControlTag id %s does not seem to exist", id));
+    }
 }
diff --git a/util/src/test/java/org/killbill/billing/util/tag/TestDefaultTagDefinition.java b/util/src/test/java/org/killbill/billing/util/tag/TestDefaultTagDefinition.java
new file mode 100644
index 0000000..59aaf26
--- /dev/null
+++ b/util/src/test/java/org/killbill/billing/util/tag/TestDefaultTagDefinition.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2014-2015 Groupon, Inc
+ * Copyright 2014-2015 The Billing Project, LLC
+ *
+ * The Billing Project 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 org.killbill.billing.util.tag;
+
+import java.util.UUID;
+
+import org.killbill.billing.util.UtilTestSuiteNoDB;
+import org.killbill.billing.util.api.TagApiException;
+import org.killbill.billing.util.api.TagDefinitionApiException;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+public class TestDefaultTagDefinition extends UtilTestSuiteNoDB {
+
+    @Test(groups = "fast")
+    public void testDefaultTagDefinition() throws TagApiException, TagDefinitionApiException {
+
+        final DefaultTagDefinition def1 = new DefaultTagDefinition(UUID.randomUUID(), "foo", "nothing", false);
+        Assert.assertTrue(def1.getApplicableObjectTypes().isEmpty());
+
+        for (final ControlTagType cur : ControlTagType.values()) {
+
+            final DefaultTagDefinition curDef = new DefaultTagDefinition(cur.getId(), cur.name(), cur.getDescription(), true);
+            Assert.assertFalse(curDef.getApplicableObjectTypes().isEmpty());
+            Assert.assertEquals(curDef.getApplicableObjectTypes(), cur.getApplicableObjectTypes());
+        }
+
+        try {
+            new DefaultTagDefinition(UUID.randomUUID(), "bar", "nothing again", true);
+            Assert.fail("Not a control tag type");
+        } catch (final IllegalStateException e) {
+        }
+    }
+}