Prepared for the addition of a second persistence-unit
[jpa-converters] / src / test / java / de / juplo / jpa / converters / JPAConverterTest.java
1 package de.juplo.jpa.converters;
2
3 import de.juplo.jpa.converters.TimeConversions.FixedZoneIdStrategy;
4 import de.juplo.jpa.converters.TimeConversions.FixedZoneOffsetStrategy;
5 import java.time.OffsetDateTime;
6 import java.time.ZoneId;
7 import java.time.ZoneOffset;
8 import java.time.ZonedDateTime;
9 import javax.persistence.EntityManager;
10 import javax.persistence.EntityTransaction;
11 import javax.persistence.Persistence;
12 import org.junit.Test;
13 import static org.junit.Assert.assertEquals;
14 import org.slf4j.Logger;
15 import org.slf4j.LoggerFactory;
16
17
18 /**
19  *
20  * @author kai
21  */
22 public class JPAConverterTest
23 {
24   final static Logger log = LoggerFactory.getLogger(JPAConverterTest.class);
25
26
27   EntityManager em;
28
29   ZonedDateTime zdt = ZonedDateTime.now();
30   OffsetDateTime odt = OffsetDateTime.now();
31
32   ZoneId defaultZone = ZoneId.systemDefault();
33   ZoneId otherZone = defaultZone.getId().equals("America/New_York") ? ZoneId.of("Europe/Berlin") : ZoneId.of("America/New_York");
34
35   ZoneOffset defaultOffset = defaultZone.getRules().getOffset(odt.toLocalDateTime());
36   ZoneOffset otherOffset = ZoneOffset.ofTotalSeconds(defaultOffset.getTotalSeconds() + 3 * 60 * 60);
37
38
39   @Test
40   public void testOffsetDateTimeAnnotated()
41   {
42     em = Persistence.createEntityManagerFactory("annotated").createEntityManager();
43     testOffsetDateTime();
44   }
45
46   public void testOffsetDateTime()
47   {
48     EierlegendeWollmilchSau ews;
49     Long id;
50
51     TimeConversions.setZoneOffsetStrategy(new FixedZoneOffsetStrategy(defaultOffset));
52     ews = new EierlegendeWollmilchSau();
53     ews.odt = odt;
54     id = persist(ews);
55     ews = retrieve(id);
56     assertEquals(odt, ews.odt);
57
58     TimeConversions.setZoneOffsetStrategy(new FixedZoneOffsetStrategy(otherOffset));
59     ews = new EierlegendeWollmilchSau();
60     ews.odt = odt;
61     id = persist(ews);
62     ews = retrieve(id);
63     assertEquals(odt.toInstant(), ews.odt.toInstant());
64   }
65
66   @Test
67   public void testZonedDateTimeAnnotated()
68   {
69     em = Persistence.createEntityManagerFactory("annotated").createEntityManager();
70     testZonedDateTime();
71   }
72
73   public void testZonedDateTime()
74   {
75     EierlegendeWollmilchSau ews;
76     Long id;
77
78     TimeConversions.setZoneIdStrategy(new FixedZoneIdStrategy(defaultZone));
79     ews = new EierlegendeWollmilchSau();
80     ews.zdt = zdt;
81     id = persist(ews);
82     ews = retrieve(id);
83     assertEquals(zdt, ews.zdt);
84
85     TimeConversions.setZoneIdStrategy(new FixedZoneIdStrategy(otherZone));
86     ews = new EierlegendeWollmilchSau();
87     ews.zdt = zdt;
88     id = persist(ews);
89     ews = retrieve(id);
90     assertEquals(zdt.toInstant(), ews.zdt.toInstant());
91   }
92
93
94   private Long persist(EierlegendeWollmilchSau ews)
95   {
96     EntityTransaction tx = em.getTransaction();
97     tx.begin();
98     em.persist(ews);
99     log.info("persisting {}", ews);
100     tx.commit();
101     em.clear();
102     return ews.id;
103   }
104
105   private EierlegendeWollmilchSau retrieve(Long id)
106   {
107     EierlegendeWollmilchSau ews;
108     EntityTransaction tx = em.getTransaction();
109     tx.begin();
110     ews = em.find(EierlegendeWollmilchSau.class, id);
111     tx.rollback();
112     log.info("retrieved {}", ews);
113     return ews;
114   }
115 }