--- /dev/null
+package de.juplo.jpa.converters;
+
+import de.juplo.jpa.converters.TimeConversions.FixedZoneOffsetStrategy;
+import java.sql.Timestamp;
+import java.time.OffsetDateTime;
+import java.time.ZoneId;
+import java.time.ZoneOffset;
+import static org.junit.Assert.assertEquals;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ *
+ * @author Kai Moritz
+ */
+public class OffsetDateTimeConverterTest
+{
+ Logger log = LoggerFactory.getLogger(OffsetDateTimeConverterTest.class);
+
+ OffsetDateTimeConverter converter = new OffsetDateTimeConverter();
+ OffsetDateTime odt = OffsetDateTime.now();
+ ZoneOffset defaultOffset = ZoneId.systemDefault().getRules().getOffset(odt.toLocalDateTime());
+ ZoneOffset otherOffset = ZoneOffset.ofTotalSeconds(defaultOffset.getTotalSeconds() + 3 * 60 * 60);
+
+
+ @Test
+ public void testConvertToDatabaseColumn()
+ {
+ Timestamp ts;
+
+ TimeConversions.setZoneOffsetStrategy(new FixedZoneOffsetStrategy(defaultOffset));
+ ts = converter.convertToDatabaseColumn(odt);
+ log.info("{}: {} -> {}", defaultOffset, odt, ts);
+ assertEquals(odt.toInstant(), ts.toInstant());
+
+ TimeConversions.setZoneOffsetStrategy(new FixedZoneOffsetStrategy(otherOffset));
+ ts = converter.convertToDatabaseColumn(odt);
+ log.info("{}: {} -> {}", otherOffset, odt, ts);
+ assertEquals(odt.toInstant(), OffsetDateTime.of(ts.toLocalDateTime(), otherOffset).toInstant());
+ }
+
+ @Test
+ public void testRoundtrip()
+ {
+ Timestamp ts;
+
+ TimeConversions.setZoneOffsetStrategy(new FixedZoneOffsetStrategy(defaultOffset));
+ ts = converter.convertToDatabaseColumn(odt);
+ assertEquals(odt.toInstant(), converter.convertToEntityAttribute(ts).toInstant());
+
+ TimeConversions.setZoneOffsetStrategy(new FixedZoneOffsetStrategy(otherOffset));
+ ts = converter.convertToDatabaseColumn(odt);
+ assertEquals(odt.toInstant(), converter.convertToEntityAttribute(ts).toInstant());
+ }
+}