package io.ebeaninternal.server.core;
import io.ebean.BaseTestCase;
import io.ebean.Ebean;
import io.ebean.EbeanServer;
import io.ebean.ValuePair;
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.Assert;
import org.junit.Test;
import java.util.Map;
public class TestDiffHelpWithEmbedded extends BaseTestCase {
EbeanServer server;
BeanDescriptor<EMain> emainDesc;
public TestDiffHelpWithEmbedded() {
server = Ebean.getServer(null);
SpiEbeanServer spiServer = (SpiEbeanServer) server;
emainDesc = spiServer.getBeanDescriptor(EMain.class);
}
@Test
public void testChangeExistingEmbedded() {
EMain emain1 = createEMain();
EMain emain2 = createEMain();
emain2.getEmbeddable().setDescription("baz");
Map<String, ValuePair> diff = DiffHelp.diff(emain1, emain2, emainDesc);
Assert.assertEquals(1, diff.size());
ValuePair valuePair = diff.get("embeddable.description");
Assert.assertNotNull(valuePair);
Assert.assertEquals("bar", valuePair.getNewValue());
Assert.assertEquals("baz", valuePair.getOldValue());
}
/**
* Same result as testChangeExistingEmbedded.
*/
@Test
public void testSetViaNewEmbedded() {
EMain emain1 = createEMain();
EMain emain2 = createEMain();
Eembeddable embeddable = new Eembeddable();
embeddable.setDescription("baz");
emain2.setEmbeddable(embeddable);
Map<String, ValuePair> diff = DiffHelp.diff(emain1, emain2, emainDesc);
Assert.assertEquals(1, diff.size());
ValuePair valuePair = diff.get("embeddable.description");
Assert.assertNotNull(valuePair);
Assert.assertEquals("bar", valuePair.getNewValue());
Assert.assertEquals("baz", valuePair.getOldValue());
}
@Test
public void testDiffEmbedded_flatMode() {
EMain emain1 = createEMain();
EMain emain2 = createEMain();
emain2.getEmbeddable().setDescription("baz");
Map<String, ValuePair> diff = DiffHelp.diff(emain1, emain2, emainDesc);
Assert.assertEquals(1, diff.size());
ValuePair valuePair = diff.get("embeddable.description");
Assert.assertNotNull(valuePair);
Assert.assertEquals("bar", valuePair.getNewValue());
Assert.assertEquals("baz", valuePair.getOldValue());
}
@Test
public void testFirstEmbeddedIsNull() {
EMain emain1 = createEMain();
emain1.setEmbeddable(null);
EMain emain2 = createEMain();
Map<String, ValuePair> diff = DiffHelp.diff(emain1, emain2, emainDesc);
Assert.assertEquals(1, diff.size());
ValuePair valuePair = diff.get("embeddable.description");
Assert.assertNotNull(valuePair);
Assert.assertNull(valuePair.getNewValue());
Assert.assertEquals("bar", valuePair.getOldValue());
}
@Test
public void testSecondEmbeddedIsNull() {
EMain emain1 = createEMain();
EMain emain2 = createEMain();
emain2.setEmbeddable(null);
Map<String, ValuePair> diff = DiffHelp.diff(emain1, emain2, emainDesc);
Assert.assertEquals(1, diff.size());
ValuePair valuePair = diff.get("embeddable.description");
Assert.assertNotNull(valuePair);
Assert.assertNull(valuePair.getOldValue());
Assert.assertEquals("bar", valuePair.getNewValue());
}
@Test
public void testSecondEmbeddedIsNull_given_flatMode() {
EMain emain1 = createEMain();
EMain emain2 = createEMain();
emain2.setEmbeddable(null);
Map<String, ValuePair> diff = DiffHelp.diff(emain1, emain2, emainDesc);
Assert.assertEquals(1, diff.size());
ValuePair valuePair = diff.get("embeddable.description");
Assert.assertNotNull(valuePair);
Assert.assertNull(valuePair.getOldValue());
Assert.assertEquals("bar", valuePair.getNewValue());
}
@Test
public void testBothEmbeddedIsNull() {
EMain emain1 = createEMain();
emain1.setEmbeddable(null);
EMain emain2 = createEMain();
emain2.setEmbeddable(null);
Map<String, ValuePair> diff = DiffHelp.diff(emain1, emain2, emainDesc);
Assert.assertEquals(0, diff.size());
}
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;
}
}