c9f87cf632f6d544280381c50bf4cc9d70c2a906
[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   @Test
47   public void testOffsetDateTimeXml()
48   {
49     em = Persistence.createEntityManagerFactory("xml").createEntityManager();
50     testOffsetDateTime();
51   }
52
53   public void testOffsetDateTime()
54   {
55     EierlegendeWollmilchSau ews;
56     Long id;
57
58     TimeConversions.setZoneOffsetStrategy(new FixedZoneOffsetStrategy(defaultOffset));
59     ews = new EierlegendeWollmilchSau();
60     ews.odt = odt;
61     id = persist(ews);
62     ews = retrieve(id);
63     assertEquals(odt, ews.odt);
64
65     TimeConversions.setZoneOffsetStrategy(new FixedZoneOffsetStrategy(otherOffset));
66     ews = new EierlegendeWollmilchSau();
67     ews.odt = odt;
68     id = persist(ews);
69     ews = retrieve(id);
70     assertEquals(odt.toInstant(), ews.odt.toInstant());
71   }
72
73
74   @Test
75   public void testZonedDateTimeAnnotated()
76   {
77     em = Persistence.createEntityManagerFactory("annotated").createEntityManager();
78     testZonedDateTime();
79   }
80
81   @Test
82   public void testZonedDateTimeXml()
83   {
84     em = Persistence.createEntityManagerFactory("xml").createEntityManager();
85     testZonedDateTime();
86   }
87
88   public void testZonedDateTime()
89   {
90     EierlegendeWollmilchSau ews;
91     Long id;
92
93     TimeConversions.setZoneIdStrategy(new FixedZoneIdStrategy(defaultZone));
94     ews = new EierlegendeWollmilchSau();
95     ews.zdt = zdt;
96     id = persist(ews);
97     ews = retrieve(id);
98     assertEquals(zdt, ews.zdt);
99
100     TimeConversions.setZoneIdStrategy(new FixedZoneIdStrategy(otherZone));
101     ews = new EierlegendeWollmilchSau();
102     ews.zdt = zdt;
103     id = persist(ews);
104     ews = retrieve(id);
105     assertEquals(zdt.toInstant(), ews.zdt.toInstant());
106   }
107
108
109   private Long persist(EierlegendeWollmilchSau ews)
110   {
111     EntityTransaction tx = em.getTransaction();
112     tx.begin();
113     em.persist(ews);
114     log.info("persisting {}", ews);
115     tx.commit();
116     em.clear();
117     return ews.id;
118   }
119
120   private EierlegendeWollmilchSau retrieve(Long id)
121   {
122     EierlegendeWollmilchSau ews;
123     EntityTransaction tx = em.getTransaction();
124     tx.begin();
125     ews = em.find(EierlegendeWollmilchSau.class, id);
126     tx.rollback();
127     log.info("retrieved {}", ews);
128     return ews;
129   }
130 }