package io.ebeaninternal.server.core; import io.ebean.BaseTestCase; import io.ebean.Ebean; import io.ebean.EbeanServer; import io.ebean.ValuePair; import io.ebean.bean.EntityBean; import io.ebeaninternal.api.SpiEbeanServer; import io.ebeaninternal.server.deploy.BeanDescriptor; import org.tests.model.embedded.EMain; import org.tests.model.embedded.Eembeddable; import org.junit.Test; import java.util.Map; import static org.junit.Assert.*; public class TestDiffHelpInsertWithEmbedded extends BaseTestCase { EbeanServer server; BeanDescriptor<EMain> emainDesc; public TestDiffHelpInsertWithEmbedded() { server = Ebean.getServer(null); SpiEbeanServer spiServer = (SpiEbeanServer) server; emainDesc = spiServer.getBeanDescriptor(EMain.class); } @Test public void simple() { EMain emain1 = createEMain(); Map<String, ValuePair> diff = emainDesc.diffForInsert((EntityBean) emain1); assertEquals(3, diff.size()); assertEquals("foo", diff.get("name").getNewValue()); assertEquals(13L, diff.get("version").getNewValue()); ValuePair valuePair = diff.get("embeddable.description"); assertNotNull(valuePair); assertEquals("bar", valuePair.getNewValue()); assertNull(valuePair.getOldValue()); } @Test public void scalarPropertyAsNull() { EMain emain1 = createEMain(); emain1.setName(null); Map<String, ValuePair> diff = emainDesc.diffForInsert((EntityBean) emain1); assertEquals(2, diff.size()); assertNull(diff.get("name")); assertEquals(13L, diff.get("version").getNewValue()); ValuePair valuePair = diff.get("embeddable.description"); assertNotNull(valuePair); assertEquals("bar", valuePair.getNewValue()); assertNull(valuePair.getOldValue()); } @Test public void embeddedAsNull() { EMain emain1 = createEMain(); emain1.setEmbeddable(null); Map<String, ValuePair> diff = emainDesc.diffForInsert((EntityBean) emain1); assertEquals(2, diff.size()); assertEquals("foo", diff.get("name").getNewValue()); assertEquals(13L, diff.get("version").getNewValue()); assertNull(diff.get("embeddable.description")); } @Test public void embeddedPropertiesAsNull() { EMain emain1 = createEMain(); emain1.getEmbeddable().setDescription(null); Map<String, ValuePair> diff = emainDesc.diffForInsert((EntityBean) emain1); assertEquals(2, diff.size()); assertEquals("foo", diff.get("name").getNewValue()); assertEquals(13L, diff.get("version").getNewValue()); assertNull(diff.get("embeddable.description")); } private EMain createEMain() { EMain emain = new EMain(); emain.setName("foo"); emain.setVersion(13l); Eembeddable embeddable = new Eembeddable(); embeddable.setDescription("bar"); emain.setEmbeddable(embeddable); return emain; } }