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