mirror of
https://github.com/ebean-orm/ebean.git
synced 2024-04-21 10:51:47 +00:00
#88 - v4 - Breaking API Change - BeanPersistRequest.getOldValues() replaced with ... Map<String,ValuePair> getUpdatedValues()
This commit is contained in:
@@ -0,0 +1,138 @@
|
||||
package com.avaje.ebean;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import junit.framework.Assert;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import com.avaje.ebean.bean.EntityBean;
|
||||
import com.avaje.ebean.bean.EntityBeanIntercept;
|
||||
import com.avaje.ebeaninternal.server.core.DefaultBeanState;
|
||||
import com.avaje.tests.model.embedded.EMain;
|
||||
import com.avaje.tests.model.embedded.Eembeddable;
|
||||
|
||||
public class TestDirtyProperties extends BaseTestCase {
|
||||
|
||||
@Test
|
||||
public void testEmbeddedUpdateEmbeddedProperty() {
|
||||
|
||||
EMain emain = new EMain();
|
||||
|
||||
EntityBean eb = (EntityBean)emain;
|
||||
EntityBeanIntercept ebi = eb._ebean_getIntercept();
|
||||
|
||||
emain.setId(1);
|
||||
emain.setName("foo");
|
||||
Eembeddable embeddable = setEmbeddedBean(emain, "bar");
|
||||
setEmbeddedLoaded(embeddable);
|
||||
|
||||
// sets loaded state so follow setters are deemed as changes to the bean
|
||||
ebi.setLoaded();
|
||||
|
||||
emain.setName("changedFoo");
|
||||
|
||||
DefaultBeanState beanState = new DefaultBeanState(eb);
|
||||
|
||||
Set<String> changedProps = beanState.getChangedProps();
|
||||
Assert.assertEquals(1, changedProps.size());
|
||||
Assert.assertTrue(changedProps.contains("name"));
|
||||
|
||||
Map<String, ValuePair> dirtyValues = beanState.getDirtyValues();
|
||||
Assert.assertEquals(1, dirtyValues.size());
|
||||
Assert.assertTrue(dirtyValues.keySet().contains("name"));
|
||||
|
||||
ValuePair valuePair = dirtyValues.get("name");
|
||||
Assert.assertNotNull(valuePair);
|
||||
Assert.assertEquals("changedFoo",valuePair.getNewValue());
|
||||
Assert.assertEquals("foo",valuePair.getOldValue());
|
||||
|
||||
Eembeddable embeddableRead = emain.getEmbeddable();
|
||||
embeddableRead.setDescription("embChanged");
|
||||
|
||||
Set<String> changedProps2 = beanState.getChangedProps();
|
||||
Assert.assertEquals(2, changedProps2.size());
|
||||
Assert.assertTrue(changedProps2.contains("name"));
|
||||
Assert.assertTrue(changedProps2.contains("embeddable.description"));
|
||||
|
||||
Map<String, ValuePair> dirtyValues2 = beanState.getDirtyValues();
|
||||
Assert.assertEquals(2, dirtyValues2.size());
|
||||
Assert.assertTrue(dirtyValues2.keySet().contains("name"));
|
||||
Assert.assertTrue(dirtyValues2.keySet().contains("embeddable.description"));
|
||||
|
||||
ValuePair valuePair2 = dirtyValues2.get("embeddable.description");
|
||||
Assert.assertEquals("embChanged",valuePair2.getNewValue());
|
||||
Assert.assertEquals("bar",valuePair2.getOldValue());
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Test
|
||||
public void testEmbeddedUpdateSetNewBean() {
|
||||
|
||||
EMain emain = new EMain();
|
||||
|
||||
EntityBean eb = (EntityBean)emain;
|
||||
EntityBeanIntercept ebi = eb._ebean_getIntercept();
|
||||
|
||||
emain.setId(1);
|
||||
emain.setName("foo");
|
||||
Eembeddable embeddable = setEmbeddedBean(emain, "bar");
|
||||
setEmbeddedLoaded(embeddable);
|
||||
|
||||
// sets loaded state so follow setters are deemed as changes to the bean
|
||||
ebi.setLoaded();
|
||||
|
||||
emain.setName("changedFoo");
|
||||
|
||||
Assert.assertSame(embeddable, emain.getEmbeddable());
|
||||
|
||||
Eembeddable embeddable2 = setEmbeddedBean(emain, "changeEmbeddedInstance");
|
||||
Assert.assertSame(embeddable2, emain.getEmbeddable());
|
||||
Assert.assertNotSame(embeddable, emain.getEmbeddable());
|
||||
|
||||
|
||||
DefaultBeanState beanState = new DefaultBeanState(eb);
|
||||
|
||||
Set<String> changedProps2 = beanState.getChangedProps();
|
||||
Assert.assertEquals(2, changedProps2.size());
|
||||
Assert.assertTrue(changedProps2.contains("name"));
|
||||
|
||||
Assert.assertTrue("The whole bean instance has changed", changedProps2.contains("embeddable"));
|
||||
|
||||
Map<String, ValuePair> dirtyValues2 = beanState.getDirtyValues();
|
||||
Assert.assertEquals(2, dirtyValues2.size());
|
||||
Assert.assertTrue(dirtyValues2.keySet().contains("name"));
|
||||
Assert.assertTrue(dirtyValues2.keySet().contains("embeddable"));
|
||||
|
||||
|
||||
ValuePair valuePair2 = dirtyValues2.get("embeddable");
|
||||
Assert.assertSame(embeddable2, valuePair2.getNewValue());
|
||||
Assert.assertSame(embeddable, valuePair2.getOldValue());
|
||||
|
||||
}
|
||||
|
||||
|
||||
private void setEmbeddedLoaded(Eembeddable embeddable) {
|
||||
((EntityBean)embeddable)._ebean_getIntercept().setLoaded();
|
||||
}
|
||||
|
||||
|
||||
private Eembeddable setEmbeddedBean(EMain emain, String description) {
|
||||
|
||||
Eembeddable embeddable = new Eembeddable();
|
||||
embeddable.setDescription(description);
|
||||
|
||||
emain.setEmbeddable(embeddable);
|
||||
|
||||
EntityBean owner = (EntityBean)emain;
|
||||
EntityBeanIntercept ebi= owner._ebean_getIntercept();
|
||||
|
||||
// hooks the embeddable bean back to the owner
|
||||
int embeddablePropertyIndex = ebi.findProperty("embeddable");
|
||||
Assert.assertTrue(embeddablePropertyIndex > -1);
|
||||
((EntityBean)embeddable)._ebean_getIntercept().setEmbeddedOwner(owner, embeddablePropertyIndex);
|
||||
return embeddable;
|
||||
}
|
||||
}
|
||||
@@ -3,8 +3,6 @@ package com.avaje.tests.model.basic;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import com.avaje.ebean.BeanState;
|
||||
import com.avaje.ebean.Ebean;
|
||||
import com.avaje.ebean.config.ServerConfig;
|
||||
import com.avaje.ebean.event.BeanPersistListener;
|
||||
import com.avaje.ebean.event.BulkTableEvent;
|
||||
@@ -44,10 +42,8 @@ public class MyEBasicConfigStartup implements ServerConfigStartup {
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean updated(EBasic bean) {
|
||||
BeanState beanState = Ebean.getBeanState(bean);
|
||||
Set<String> updatedProperties = beanState.getChangedProps();
|
||||
System.out.println("-- EBasic updated " + bean.getId());
|
||||
public boolean updated(EBasic bean, Set<String> updatedProperties) {
|
||||
System.out.println("-- EBasic updated " + bean.getId()+" updatedProperties: "+updatedProperties);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user