X-Git-Url: http://juplo.de/gitweb/?a=blobdiff_plain;f=src%2Ftest%2Fjava%2Fde%2Fjuplo%2Fjpa%2Fconverters%2FJPAConverterTest.java;fp=src%2Ftest%2Fjava%2Fde%2Fjuplo%2Fjpa%2Fconverters%2FJPAConverterTest.java;h=38b84e386a4014251efa2dfdeb7a30e9e1bc5a99;hb=2aeda6423279d79a8bc34b8ceb510fd41cec4955;hp=0000000000000000000000000000000000000000;hpb=1870491f00f6d583d6ebe9270bf69e13633c1bf7;p=jpa-converters 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 index 0000000..38b84e3 --- /dev/null +++ b/src/test/java/de/juplo/jpa/converters/JPAConverterTest.java @@ -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; + } +}