1 package de.juplo.jpa.converters;
3 import de.juplo.jpa.converters.TimeConversions.FixedZoneIdStrategy;
4 import de.juplo.jpa.converters.TimeConversions.FixedZoneOffsetStrategy;
5 import de.juplo.yourshouter.api.model.Date;
6 import java.time.LocalDate;
7 import java.time.OffsetDateTime;
8 import java.time.ZoneId;
9 import java.time.ZoneOffset;
10 import java.time.ZonedDateTime;
11 import javax.persistence.EntityManager;
12 import javax.persistence.EntityTransaction;
13 import javax.persistence.Persistence;
14 import org.junit.Test;
15 import static org.junit.Assert.assertEquals;
16 import org.slf4j.Logger;
17 import org.slf4j.LoggerFactory;
24 public class JPAConverterTest
26 final static Logger log = LoggerFactory.getLogger(JPAConverterTest.class);
31 ZonedDateTime zdt = ZonedDateTime.now();
32 OffsetDateTime odt = OffsetDateTime.now();
33 LocalDate ld = LocalDate.now();
35 ZoneId defaultZone = ZoneId.systemDefault();
36 ZoneId otherZone = defaultZone.getId().equals("America/New_York") ? ZoneId.of("Europe/Berlin") : ZoneId.of("America/New_York");
38 ZoneOffset defaultOffset = defaultZone.getRules().getOffset(odt.toLocalDateTime());
39 ZoneOffset otherOffset = ZoneOffset.ofTotalSeconds(defaultOffset.getTotalSeconds() + 3 * 60 * 60);
43 public void testOffsetDateTimeAnnotated()
45 em = Persistence.createEntityManagerFactory("annotated").createEntityManager();
50 public void testOffsetDateTimeXml()
52 em = Persistence.createEntityManagerFactory("xml").createEntityManager();
56 public void testOffsetDateTime()
58 EierlegendeWollmilchSau ews;
60 TimeConversions.setZoneOffsetStrategy(new FixedZoneOffsetStrategy(defaultOffset));
61 ews = new EierlegendeWollmilchSau();
64 ews = retrieve(EierlegendeWollmilchSau.class, ews.id);
65 assertEquals(odt, ews.odt);
67 TimeConversions.setZoneOffsetStrategy(new FixedZoneOffsetStrategy(otherOffset));
68 ews = new EierlegendeWollmilchSau();
71 ews = retrieve(EierlegendeWollmilchSau.class, ews.id);
72 assertEquals(odt.toInstant(), ews.odt.toInstant());
77 public void testZonedDateTimeAnnotated()
79 em = Persistence.createEntityManagerFactory("annotated").createEntityManager();
84 public void testZonedDateTimeXml()
86 em = Persistence.createEntityManagerFactory("xml").createEntityManager();
90 public void testZonedDateTime()
92 EierlegendeWollmilchSau ews;
94 TimeConversions.setZoneIdStrategy(new FixedZoneIdStrategy(defaultZone));
95 ews = new EierlegendeWollmilchSau();
98 ews = retrieve(EierlegendeWollmilchSau.class, ews.id);
99 assertEquals(zdt, ews.zdt);
101 TimeConversions.setZoneIdStrategy(new FixedZoneIdStrategy(otherZone));
102 ews = new EierlegendeWollmilchSau();
105 ews = retrieve(EierlegendeWollmilchSau.class, ews.id);
106 assertEquals(zdt.toInstant(), ews.zdt.toInstant());
111 public void testDataModel()
113 em = Persistence.createEntityManagerFactory("data-model").createEntityManager();
116 TimeConversions.setZoneIdStrategy(new FixedZoneIdStrategy(defaultZone));
123 date = retrieve(Date.class, date.getId());
124 assertEquals(ld, date.getDate());
125 assertEquals(zdt, date.getStart());
126 assertEquals(zdt, date.getEnd());
130 private void persist(Object entity)
132 EntityTransaction tx = em.getTransaction();
135 log.info("persisting {}", entity);
140 private <T> T retrieve(Class<T> entityClass, Object id)
142 EntityTransaction tx = em.getTransaction();
146 log.info("retrieving {} of class {}", id, entityClass);
147 return em.find(entityClass, id);