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 de.juplo.yourshouter.api.persistence.jpa.PrimaryKey;
8 import java.time.LocalDate;
9 import java.time.OffsetDateTime;
10 import java.time.ZoneId;
11 import java.time.ZoneOffset;
12 import java.time.ZonedDateTime;
13 import javax.persistence.EntityManager;
14 import javax.persistence.EntityTransaction;
15 import javax.persistence.Persistence;
16 import org.junit.Test;
17 import static org.junit.Assert.assertEquals;
18 import org.slf4j.Logger;
19 import org.slf4j.LoggerFactory;
26 public class JPAConverterTest
28 final static Logger log = LoggerFactory.getLogger(JPAConverterTest.class);
33 ZonedDateTime zdt = ZonedDateTime.now();
34 OffsetDateTime odt = OffsetDateTime.now();
35 LocalDate ld = LocalDate.now();
37 ZoneId defaultZone = ZoneId.systemDefault();
38 ZoneId otherZone = defaultZone.getId().equals("America/New_York") ? ZoneId.of("Europe/Berlin") : ZoneId.of("America/New_York");
40 ZoneOffset defaultOffset = defaultZone.getRules().getOffset(odt.toLocalDateTime());
41 ZoneOffset otherOffset = ZoneOffset.ofTotalSeconds(defaultOffset.getTotalSeconds() + 3 * 60 * 60);
45 public void testOffsetDateTimeAnnotated()
47 em = Persistence.createEntityManagerFactory("annotated").createEntityManager();
52 public void testOffsetDateTimeXml()
54 em = Persistence.createEntityManagerFactory("xml").createEntityManager();
58 public void testOffsetDateTime()
60 EierlegendeWollmilchSau ews;
62 TimeConversions.setZoneOffsetStrategy(new FixedZoneOffsetStrategy(defaultOffset));
63 ews = new EierlegendeWollmilchSau();
66 ews = retrieve(EierlegendeWollmilchSau.class, ews.id);
67 assertEquals(odt, ews.odt);
69 TimeConversions.setZoneOffsetStrategy(new FixedZoneOffsetStrategy(otherOffset));
70 ews = new EierlegendeWollmilchSau();
73 ews = retrieve(EierlegendeWollmilchSau.class, ews.id);
74 assertEquals(odt.toInstant(), ews.odt.toInstant());
79 public void testZonedDateTimeAnnotated()
81 em = Persistence.createEntityManagerFactory("annotated").createEntityManager();
86 public void testZonedDateTimeXml()
88 em = Persistence.createEntityManagerFactory("xml").createEntityManager();
92 public void testZonedDateTime()
94 EierlegendeWollmilchSau ews;
96 TimeConversions.setZoneIdStrategy(new FixedZoneIdStrategy(defaultZone));
97 ews = new EierlegendeWollmilchSau();
100 ews = retrieve(EierlegendeWollmilchSau.class, ews.id);
101 assertEquals(zdt, ews.zdt);
103 TimeConversions.setZoneIdStrategy(new FixedZoneIdStrategy(otherZone));
104 ews = new EierlegendeWollmilchSau();
107 ews = retrieve(EierlegendeWollmilchSau.class, ews.id);
108 assertEquals(zdt.toInstant(), ews.zdt.toInstant());
113 public void testDataModel()
115 em = Persistence.createEntityManagerFactory("data-model").createEntityManager();
118 TimeConversions.setZoneIdStrategy(new FixedZoneIdStrategy(defaultZone));
120 date.setSource(URI.create("http://foo.bar"));
126 date = retrieve(Date.class, new PrimaryKey(date));
127 assertEquals(ld, date.getDate());
128 assertEquals(zdt, date.getStart());
129 assertEquals(zdt, date.getEnd());
133 private void persist(Object entity)
135 EntityTransaction tx = em.getTransaction();
138 log.info("persisting {}", entity);
143 private <T> T retrieve(Class<T> entityClass, Object id)
145 EntityTransaction tx = em.getTransaction();
149 log.info("retrieving {} of class {}", id, entityClass);
150 return em.find(entityClass, id);