Implemented some test-cases
[jpa-converters] / src / test / java / de / juplo / jpa / converters / JPAConverterTest.java
diff --git a/src/test/java/de/juplo/jpa/converters/JPAConverterTest.java b/src/test/java/de/juplo/jpa/converters/JPAConverterTest.java
new file mode 100644 (file)
index 0000000..38b84e3
--- /dev/null
@@ -0,0 +1,104 @@
+package de.juplo.jpa.converters;
+
+import de.juplo.jpa.converters.TimeConversions.FixedZoneIdStrategy;
+import de.juplo.jpa.converters.TimeConversions.FixedZoneOffsetStrategy;
+import java.time.OffsetDateTime;
+import java.time.ZoneId;
+import java.time.ZoneOffset;
+import java.time.ZonedDateTime;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityTransaction;
+import javax.persistence.Persistence;
+import org.junit.Test;
+import static org.junit.Assert.assertEquals;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ *
+ * @author kai
+ */
+public class JPAConverterTest
+{
+  final static Logger log = LoggerFactory.getLogger(JPAConverterTest.class);
+
+
+  EntityManager em =
+      Persistence.createEntityManagerFactory("test").createEntityManager();
+
+  ZonedDateTime zdt = ZonedDateTime.now();
+  OffsetDateTime odt = OffsetDateTime.now();
+
+  ZoneId defaultZone = ZoneId.systemDefault();
+  ZoneId otherZone = defaultZone.getId().equals("America/New_York") ? ZoneId.of("Europe/Berlin") : ZoneId.of("America/New_York");
+
+  ZoneOffset defaultOffset = defaultZone.getRules().getOffset(odt.toLocalDateTime());
+  ZoneOffset otherOffset = ZoneOffset.ofTotalSeconds(defaultOffset.getTotalSeconds() + 3 * 60 * 60);
+
+
+  @Test
+  public void testOffsetDateTime()
+  {
+    EierlegendeWollmilchSau ews;
+    Long id;
+
+    TimeConversions.setZoneOffsetStrategy(new FixedZoneOffsetStrategy(defaultOffset));
+    ews = new EierlegendeWollmilchSau();
+    ews.odt = odt;
+    id = persist(ews);
+    ews = retrieve(id);
+    assertEquals(odt, ews.odt);
+
+    TimeConversions.setZoneOffsetStrategy(new FixedZoneOffsetStrategy(otherOffset));
+    ews = new EierlegendeWollmilchSau();
+    ews.odt = odt;
+    id = persist(ews);
+    ews = retrieve(id);
+    assertEquals(odt.toInstant(), ews.odt.toInstant());
+  }
+
+  @Test
+  public void testZonedDateTime()
+  {
+    EierlegendeWollmilchSau ews;
+    Long id;
+
+    TimeConversions.setZoneIdStrategy(new FixedZoneIdStrategy(defaultZone));
+    ews = new EierlegendeWollmilchSau();
+    ews.zdt = zdt;
+    id = persist(ews);
+    ews = retrieve(id);
+    assertEquals(zdt, ews.zdt);
+
+    TimeConversions.setZoneIdStrategy(new FixedZoneIdStrategy(otherZone));
+    ews = new EierlegendeWollmilchSau();
+    ews.zdt = zdt;
+    id = persist(ews);
+    ews = retrieve(id);
+    assertEquals(zdt.toInstant(), ews.zdt.toInstant());
+  }
+
+
+  private Long persist(EierlegendeWollmilchSau ews)
+  {
+    EntityTransaction tx = em.getTransaction();
+    tx.begin();
+    em.persist(ews);
+    log.info("persisting {}", ews);
+    tx.commit();
+    em.clear();
+    return ews.id;
+  }
+
+  private EierlegendeWollmilchSau retrieve(Long id)
+  {
+    EierlegendeWollmilchSau ews;
+    EntityTransaction tx = em.getTransaction();
+    tx.begin();
+    ews = em.find(EierlegendeWollmilchSau.class, id);
+    tx.rollback();
+    log.info("retrieved {}", ews);
+    return ews;
+  }
+}