38b84e386a4014251efa2dfdeb7a30e9e1bc5a99
[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       Persistence.createEntityManagerFactory("test").createEntityManager();
29
30   ZonedDateTime zdt = ZonedDateTime.now();
31   OffsetDateTime odt = OffsetDateTime.now();
32
33   ZoneId defaultZone = ZoneId.systemDefault();
34   ZoneId otherZone = defaultZone.getId().equals("America/New_York") ? ZoneId.of("Europe/Berlin") : ZoneId.of("America/New_York");
35
36   ZoneOffset defaultOffset = defaultZone.getRules().getOffset(odt.toLocalDateTime());
37   ZoneOffset otherOffset = ZoneOffset.ofTotalSeconds(defaultOffset.getTotalSeconds() + 3 * 60 * 60);
38
39
40   @Test
41   public void testOffsetDateTime()
42   {
43     EierlegendeWollmilchSau ews;
44     Long id;
45
46     TimeConversions.setZoneOffsetStrategy(new FixedZoneOffsetStrategy(defaultOffset));
47     ews = new EierlegendeWollmilchSau();
48     ews.odt = odt;
49     id = persist(ews);
50     ews = retrieve(id);
51     assertEquals(odt, ews.odt);
52
53     TimeConversions.setZoneOffsetStrategy(new FixedZoneOffsetStrategy(otherOffset));
54     ews = new EierlegendeWollmilchSau();
55     ews.odt = odt;
56     id = persist(ews);
57     ews = retrieve(id);
58     assertEquals(odt.toInstant(), ews.odt.toInstant());
59   }
60
61   @Test
62   public void testZonedDateTime()
63   {
64     EierlegendeWollmilchSau ews;
65     Long id;
66
67     TimeConversions.setZoneIdStrategy(new FixedZoneIdStrategy(defaultZone));
68     ews = new EierlegendeWollmilchSau();
69     ews.zdt = zdt;
70     id = persist(ews);
71     ews = retrieve(id);
72     assertEquals(zdt, ews.zdt);
73
74     TimeConversions.setZoneIdStrategy(new FixedZoneIdStrategy(otherZone));
75     ews = new EierlegendeWollmilchSau();
76     ews.zdt = zdt;
77     id = persist(ews);
78     ews = retrieve(id);
79     assertEquals(zdt.toInstant(), ews.zdt.toInstant());
80   }
81
82
83   private Long persist(EierlegendeWollmilchSau ews)
84   {
85     EntityTransaction tx = em.getTransaction();
86     tx.begin();
87     em.persist(ews);
88     log.info("persisting {}", ews);
89     tx.commit();
90     em.clear();
91     return ews.id;
92   }
93
94   private EierlegendeWollmilchSau retrieve(Long id)
95   {
96     EierlegendeWollmilchSau ews;
97     EntityTransaction tx = em.getTransaction();
98     tx.begin();
99     ews = em.find(EierlegendeWollmilchSau.class, id);
100     tx.rollback();
101     log.info("retrieved {}", ews);
102     return ews;
103   }
104 }