diff --git a/src/main/java/io/ebean/bean/EntityBeanIntercept.java b/src/main/java/io/ebean/bean/EntityBeanIntercept.java index da784625f..92ac0d72c 100644 --- a/src/main/java/io/ebean/bean/EntityBeanIntercept.java +++ b/src/main/java/io/ebean/bean/EntityBeanIntercept.java @@ -930,8 +930,7 @@ public final class EntityBeanIntercept implements Serializable { } /** - * OneToMany and ManyToMany don't have any interception so just check for - * PropertyChangeSupport. + * OneToMany and ManyToMany only set loaded state. */ public void preSetterMany(boolean interceptField, int propertyIndex, Object oldValue, Object newValue) { if (readOnly) { diff --git a/src/test/java/io/ebean/bean/EntityBeanInterceptTest.java b/src/test/java/io/ebean/bean/EntityBeanInterceptTest.java index a85a90d57..31891de2f 100644 --- a/src/test/java/io/ebean/bean/EntityBeanInterceptTest.java +++ b/src/test/java/io/ebean/bean/EntityBeanInterceptTest.java @@ -1,7 +1,8 @@ package io.ebean.bean; import io.ebean.BaseTestCase; -import io.ebean.Ebean; +import io.ebean.DB; +import org.tests.compositekeys.db.AuditInfo; import org.tests.model.basic.Customer; import org.tests.model.basic.EBasic; import org.tests.model.basic.ResetBasicData; @@ -19,12 +20,11 @@ import static org.junit.Assert.assertTrue; public class EntityBeanInterceptTest extends BaseTestCase { @Test - public void testHasDirtyProperty() throws Exception { - + public void testHasDirtyProperty() { ResetBasicData.reset(); - List list = Ebean.find(Customer.class).findList(); + List list = DB.find(Customer.class).findList(); Set propertyNames = new HashSet<>(); propertyNames.add("name"); @@ -32,7 +32,7 @@ public class EntityBeanInterceptTest extends BaseTestCase { Customer customer = list.get(0); - EntityBeanIntercept ebi = ((EntityBean) customer)._ebean_getIntercept(); + EntityBeanIntercept ebi = ebi(customer); assertFalse(ebi.hasDirtyProperty(propertyNames)); @@ -48,7 +48,7 @@ public class EntityBeanInterceptTest extends BaseTestCase { public void isPartial_when_new() { EBasic basic = new EBasic(); - EntityBeanIntercept ebi = ((EntityBean) basic)._ebean_getIntercept(); + EntityBeanIntercept ebi = ebi(basic); assertThat(ebi.isPartial()).isTrue(); } @@ -58,7 +58,7 @@ public class EntityBeanInterceptTest extends BaseTestCase { EBasic basic = new EBasic(); basic.setId(42); basic.setName("some"); - EntityBeanIntercept ebi = ((EntityBean) basic)._ebean_getIntercept(); + EntityBeanIntercept ebi = ebi(basic); assertThat(ebi.isPartial()).isTrue(); } @@ -72,8 +72,64 @@ public class EntityBeanInterceptTest extends BaseTestCase { basic.setSomeDate(null); basic.setStatus(EBasic.Status.ACTIVE); - EntityBeanIntercept ebi = ((EntityBean) basic)._ebean_getIntercept(); + EntityBeanIntercept ebi = ebi(basic); assertThat(ebi.isPartial()).isFalse(); } + @Test + public void isEmbeddedNewOrDirty() { + + AuditInfo auditInfo = new AuditInfo(); + EntityBeanIntercept ebi = ebi(auditInfo); + assertTrue(ebi.isNew()); + assertTrue(ebi.isEmbeddedNewOrDirty(auditInfo)); + + auditInfo.setUpdatedBy("initial"); + ebi.setLoaded(); + assertTrue(ebi.isLoaded()); + assertFalse(ebi.isEmbeddedNewOrDirty(auditInfo)); + + auditInfo.setUpdatedBy("nowDirty"); + assertTrue(ebi.isDirty()); + assertTrue(ebi.isEmbeddedNewOrDirty(auditInfo)); + assertFalse(ebi.isEmbeddedNewOrDirty(null)); + } + + @Test + public void setEmbeddedLoaded() { + AuditInfo auditInfo = new AuditInfo(); + EntityBeanIntercept ebi = ebi(auditInfo); + assertFalse(ebi.isLoaded()); + + ebi.setEmbeddedLoaded(auditInfo); + assertTrue(ebi.isLoaded()); + } + + + @Test + public void initialisedMany() { + Customer customer = new Customer(); + EntityBeanIntercept ebi = ebi(customer); + final int contactsPos = findProperty("contacts", ebi); + assertFalse(ebi.isLoadedProperty(contactsPos)); + + ebi.initialisedMany(contactsPos); + assertTrue(ebi.isLoadedProperty(contactsPos)); + } + + private int findProperty(String name, EntityBeanIntercept eb) { + final String[] names = eb.getOwner()._ebean_getPropertyNames(); + for (int i = 0; i < names.length; i++) { + if (names[i].equals(name)) { + return i; + } + } + + throw new RuntimeException("property not found"); + } + + @SuppressWarnings("unchecked") + private EntityBeanIntercept ebi(Object bean) { + return ((EntityBean)bean)._ebean_getIntercept(); + } }