Added a test that reuses classes and mappings from a real project
[jpa-converters] / src / test / java / de / juplo / jpa / converters / JPAConverterTest.java
index 38b84e3..0ff1493 100644 (file)
@@ -2,6 +2,8 @@ package de.juplo.jpa.converters;
 
 import de.juplo.jpa.converters.TimeConversions.FixedZoneIdStrategy;
 import de.juplo.jpa.converters.TimeConversions.FixedZoneOffsetStrategy;
+import de.juplo.yourshouter.api.model.Date;
+import java.time.LocalDate;
 import java.time.OffsetDateTime;
 import java.time.ZoneId;
 import java.time.ZoneOffset;
@@ -24,11 +26,11 @@ public class JPAConverterTest
   final static Logger log = LoggerFactory.getLogger(JPAConverterTest.class);
 
 
-  EntityManager em =
-      Persistence.createEntityManagerFactory("test").createEntityManager();
+  EntityManager em;
 
   ZonedDateTime zdt = ZonedDateTime.now();
   OffsetDateTime odt = OffsetDateTime.now();
+  LocalDate ld = LocalDate.now();
 
   ZoneId defaultZone = ZoneId.systemDefault();
   ZoneId otherZone = defaultZone.getId().equals("America/New_York") ? ZoneId.of("Europe/Berlin") : ZoneId.of("America/New_York");
@@ -38,67 +40,115 @@ public class JPAConverterTest
 
 
   @Test
+  public void testOffsetDateTimeAnnotated()
+  {
+    em = Persistence.createEntityManagerFactory("annotated").createEntityManager();
+    testOffsetDateTime();
+  }
+
+  @Test
+  public void testOffsetDateTimeXml()
+  {
+    em = Persistence.createEntityManagerFactory("xml").createEntityManager();
+    testOffsetDateTime();
+  }
+
   public void testOffsetDateTime()
   {
     EierlegendeWollmilchSau ews;
-    Long id;
 
     TimeConversions.setZoneOffsetStrategy(new FixedZoneOffsetStrategy(defaultOffset));
     ews = new EierlegendeWollmilchSau();
     ews.odt = odt;
-    id = persist(ews);
-    ews = retrieve(id);
+    persist(ews);
+    ews = retrieve(EierlegendeWollmilchSau.class, ews.id);
     assertEquals(odt, ews.odt);
 
     TimeConversions.setZoneOffsetStrategy(new FixedZoneOffsetStrategy(otherOffset));
     ews = new EierlegendeWollmilchSau();
     ews.odt = odt;
-    id = persist(ews);
-    ews = retrieve(id);
+    persist(ews);
+    ews = retrieve(EierlegendeWollmilchSau.class, ews.id);
     assertEquals(odt.toInstant(), ews.odt.toInstant());
   }
 
+
+  @Test
+  public void testZonedDateTimeAnnotated()
+  {
+    em = Persistence.createEntityManagerFactory("annotated").createEntityManager();
+    testZonedDateTime();
+  }
+
   @Test
+  public void testZonedDateTimeXml()
+  {
+    em = Persistence.createEntityManagerFactory("xml").createEntityManager();
+    testZonedDateTime();
+  }
+
   public void testZonedDateTime()
   {
     EierlegendeWollmilchSau ews;
-    Long id;
 
     TimeConversions.setZoneIdStrategy(new FixedZoneIdStrategy(defaultZone));
     ews = new EierlegendeWollmilchSau();
     ews.zdt = zdt;
-    id = persist(ews);
-    ews = retrieve(id);
+    persist(ews);
+    ews = retrieve(EierlegendeWollmilchSau.class, ews.id);
     assertEquals(zdt, ews.zdt);
 
     TimeConversions.setZoneIdStrategy(new FixedZoneIdStrategy(otherZone));
     ews = new EierlegendeWollmilchSau();
     ews.zdt = zdt;
-    id = persist(ews);
-    ews = retrieve(id);
+    persist(ews);
+    ews = retrieve(EierlegendeWollmilchSau.class, ews.id);
     assertEquals(zdt.toInstant(), ews.zdt.toInstant());
   }
 
 
-  private Long persist(EierlegendeWollmilchSau ews)
+  @Test
+  public void testDataModel()
+  {
+    em = Persistence.createEntityManagerFactory("data-model").createEntityManager();
+    Date date;
+
+    TimeConversions.setZoneIdStrategy(new FixedZoneIdStrategy(defaultZone));
+    date = new Date();
+    date.setId("TEST");
+    date.setDate(ld);
+    date.setStart(zdt);
+    date.setEnd(zdt);
+    persist(date);
+    date = retrieve(Date.class, date.getId());
+    assertEquals(ld, date.getDate());
+    assertEquals(zdt, date.getStart());
+    assertEquals(zdt, date.getEnd());
+  }
+
+
+  private void persist(Object entity)
   {
     EntityTransaction tx = em.getTransaction();
     tx.begin();
-    em.persist(ews);
-    log.info("persisting {}", ews);
+    em.persist(entity);
+    log.info("persisting {}", entity);
     tx.commit();
     em.clear();
-    return ews.id;
   }
 
-  private EierlegendeWollmilchSau retrieve(Long id)
+  private <T> T retrieve(Class<T> entityClass, Object id)
   {
-    EierlegendeWollmilchSau ews;
     EntityTransaction tx = em.getTransaction();
     tx.begin();
-    ews = em.find(EierlegendeWollmilchSau.class, id);
-    tx.rollback();
-    log.info("retrieved {}", ews);
-    return ews;
+    try
+    {
+      log.info("retrieving {} of class {}", id, entityClass);
+      return em.find(entityClass, id);
+    }
+    finally
+    {
+      tx.rollback();
+    }
   }
 }