killbill-memoizeit

util: don't require ID to be set when adding custom fields Signed-off-by:

12/20/2017 2:57:51 PM

Details

diff --git a/util/src/main/java/org/killbill/billing/util/customfield/api/DefaultCustomFieldUserApi.java b/util/src/main/java/org/killbill/billing/util/customfield/api/DefaultCustomFieldUserApi.java
index be16a38..45d033b 100644
--- a/util/src/main/java/org/killbill/billing/util/customfield/api/DefaultCustomFieldUserApi.java
+++ b/util/src/main/java/org/killbill/billing/util/customfield/api/DefaultCustomFieldUserApi.java
@@ -92,7 +92,13 @@ public class DefaultCustomFieldUserApi implements CustomFieldUserApi {
             final Iterable<CustomFieldModelDao> transformed = Iterables.transform(customFields, new Function<CustomField, CustomFieldModelDao>() {
                 @Override
                 public CustomFieldModelDao apply(final CustomField input) {
-                    return new CustomFieldModelDao(input.getId(), context.getCreatedDate(), context.getCreatedDate(), input.getFieldName(), input.getFieldValue(), input.getObjectId(), input.getObjectType());
+                    // Respect user-specified ID
+                    // TODO See https://github.com/killbill/killbill/issues/35
+                    if (input.getId() != null) {
+                        return new CustomFieldModelDao(input.getId(), context.getCreatedDate(), context.getCreatedDate(), input.getFieldName(), input.getFieldValue(), input.getObjectId(), input.getObjectType());
+                    } else {
+                        return new CustomFieldModelDao(context.getCreatedDate(), input.getFieldName(), input.getFieldValue(), input.getObjectId(), input.getObjectType());
+                    }
                 }
             });
             ((DefaultCustomFieldDao) customFieldDao).create(transformed, internalCallContext);
diff --git a/util/src/test/java/org/killbill/billing/util/customfield/api/TestDefaultCustomFieldUserApi.java b/util/src/test/java/org/killbill/billing/util/customfield/api/TestDefaultCustomFieldUserApi.java
index e8ac37a..a2acf84 100644
--- a/util/src/test/java/org/killbill/billing/util/customfield/api/TestDefaultCustomFieldUserApi.java
+++ b/util/src/test/java/org/killbill/billing/util/customfield/api/TestDefaultCustomFieldUserApi.java
@@ -68,6 +68,20 @@ public class TestDefaultCustomFieldUserApi extends UtilTestSuiteWithEmbeddedDB {
     }
 
     @Test(groups = "slow")
+    public void testCustomFieldNoId() throws Exception {
+        // Verify that when coming from a plugin, the id isn't required
+        final CustomField customField = Mockito.mock(CustomField.class);
+        Mockito.when(customField.getObjectId()).thenReturn(accountId);
+        Mockito.when(customField.getObjectType()).thenReturn(ObjectType.ACCOUNT);
+        Mockito.when(customField.getFieldName()).thenReturn(UUID.randomUUID().toString());
+        Mockito.when(customField.getFieldValue()).thenReturn(UUID.randomUUID().toString());
+
+        eventsListener.pushExpectedEvents(NextEvent.CUSTOM_FIELD);
+        customFieldUserApi.addCustomFields(ImmutableList.<CustomField>of(customField), callContext);
+        assertListenerStatus();
+    }
+
+    @Test(groups = "slow")
     public void testCustomFieldBasic() throws Exception {
 
         final CustomField customField1 = new StringCustomField("some123", "some 456", ObjectType.ACCOUNT, accountId, callContext.getCreatedDate());