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.basic.Customer; import org.tests.model.basic.Order; import org.tests.model.basic.Order.Status; import org.junit.Assert; import org.junit.Test; import java.sql.Date; import java.sql.Timestamp; import java.util.Map; import java.util.Set; public class TestDiffHelpSimple extends BaseTestCase { long firstTime = System.currentTimeMillis() - 10000; long secondTime = System.currentTimeMillis(); EbeanServer server; BeanDescriptor<Order> orderDesc; public TestDiffHelpSimple() { server = Ebean.getServer(null); SpiEbeanServer spiServer = (SpiEbeanServer) server; orderDesc = spiServer.getBeanDescriptor(Order.class); } private Order createBaseOrder(EbeanServer server) { Order order1 = new Order(); order1.setId(12); order1.setCretime(new Timestamp(firstTime)); order1.setCustomer(server.getReference(Customer.class, 1234)); order1.setStatus(Status.NEW); order1.setShipDate(new Date(firstTime)); order1.setOrderDate(new Date(firstTime)); return order1; } @Test public void testBasicChanges() { Order order1 = createBaseOrder(server); Order order2 = new Order(); order2.setId(14); order2.setCretime(new Timestamp(secondTime)); order2.setCustomer(server.getReference(Customer.class, 2133)); order2.setStatus(Status.COMPLETE); order2.setShipDate(new Date(secondTime)); order2.setOrderDate(new Date(secondTime)); Map<String, ValuePair> diff = DiffHelp.diff(order1, order2, orderDesc); Assert.assertEquals(5, diff.size()); Set<String> keySet = diff.keySet(); Assert.assertTrue(keySet.contains("cretime")); Assert.assertTrue(keySet.contains("status")); Assert.assertTrue(keySet.contains("shipDate")); Assert.assertTrue(keySet.contains("orderDate")); Assert.assertTrue(keySet.contains("customer.id")); } @Test public void testBasicChanges_given_flatMode() { Order order1 = createBaseOrder(server); Order order2 = new Order(); order2.setId(14); order2.setCretime(new Timestamp(secondTime)); order2.setCustomer(server.getReference(Customer.class, 2133)); order2.setStatus(Status.COMPLETE); order2.setShipDate(new Date(secondTime)); order2.setOrderDate(new Date(secondTime)); Map<String, ValuePair> diff = DiffHelp.diff(order1, order2, orderDesc); Assert.assertEquals(5, diff.size()); Set<String> keySet = diff.keySet(); Assert.assertTrue(keySet.contains("cretime")); Assert.assertTrue(keySet.contains("status")); Assert.assertTrue(keySet.contains("shipDate")); Assert.assertTrue(keySet.contains("orderDate")); Assert.assertTrue(keySet.contains("customer.id")); Assert.assertEquals(2133, diff.get("customer.id").getOldValue()); Assert.assertEquals(1234, diff.get("customer.id").getNewValue()); } @Test public void testIdIgnored() { Order order1 = createBaseOrder(server); Order order2 = createBaseOrder(server); order2.setId(14); Map<String, ValuePair> diff = DiffHelp.diff(order1, order2, orderDesc); Assert.assertEquals(0, diff.size()); } @Test public void testSecondValueNull() { Order order1 = createBaseOrder(server); Order order2 = createBaseOrder(server); order2.setCustomer(server.getReference(Customer.class, 2133)); order2.setStatus(Status.COMPLETE); order2.setShipDate(null); Map<String, ValuePair> diff = DiffHelp.diff(order1, order2, orderDesc); Assert.assertEquals(3, diff.size()); Set<String> keySet = diff.keySet(); Assert.assertTrue(keySet.contains("status")); Assert.assertTrue(keySet.contains("customer.id")); Assert.assertTrue(keySet.contains("shipDate")); ValuePair shipDatePair = diff.get("shipDate"); Assert.assertEquals(order1.getShipDate(), shipDatePair.getNewValue()); Assert.assertEquals(order2.getShipDate(), shipDatePair.getOldValue()); Assert.assertNull(shipDatePair.getOldValue()); } @Test public void testFirstValueNull() { Order order1 = createBaseOrder(server); order1.setShipDate(null); Order order2 = createBaseOrder(server); order2.setShipDate(new Date(secondTime)); Map<String, ValuePair> diff = DiffHelp.diff(order1, order2, orderDesc); Assert.assertEquals(1, diff.size()); Set<String> keySet = diff.keySet(); Assert.assertTrue(keySet.contains("shipDate")); ValuePair shipDatePair = diff.get("shipDate"); Assert.assertEquals(order1.getShipDate(), shipDatePair.getNewValue()); Assert.assertEquals(order2.getShipDate(), shipDatePair.getOldValue()); Assert.assertNull(shipDatePair.getNewValue()); } @Test public void testBothNull() { Order order1 = createBaseOrder(server); order1.setShipDate(null); Order order2 = createBaseOrder(server); order2.setShipDate(null); Map<String, ValuePair> diff = DiffHelp.diff(order1, order2, orderDesc); Assert.assertEquals(0, diff.size()); } }