#1272 - ENH: Add built in support for Joda Period and java time Period

This commit is contained in:
Rob Bygrave
2018-02-23 17:54:02 +13:00
parent 265bda8cf2
commit 75462e7410
5 changed files with 107 additions and 5 deletions
@@ -0,0 +1,42 @@
package io.ebeaninternal.server.type;
import org.junit.Test;
import java.time.Period;
import static org.assertj.core.api.Assertions.assertThat;
public class ScalarTypePeriodTest {
private ScalarTypePeriod scalarType = new ScalarTypePeriod();
@Test
public void getLength() {
assertThat(scalarType.getLength()).isEqualTo(20);
}
@Test
public void formatAndParse() {
Period original = Period.of(1,2, 4);
String value = scalarType.formatValue(original);
assertThat(value).isEqualTo("P1Y2M4D");
Period period = scalarType.parse(value);
assertThat(period).isEqualTo(original);
}
@Test
public void convertFromDbString() {
Period original = Period.of(1, 2, 4);
String stringVal = scalarType.convertToDbString(original);
Period period = scalarType.convertFromDbString(stringVal);
assertThat(period).isEqualTo(original);
}
}
@@ -11,6 +11,7 @@ import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.Month;
import java.time.OffsetDateTime;
import java.time.Period;
import java.time.Year;
import java.time.YearMonth;
import java.time.ZoneId;
@@ -54,6 +55,8 @@ public class SomeNewTypesBean {
Path path;
Period period;
public Long getId() {
return id;
}
@@ -165,4 +168,12 @@ public class SomeNewTypesBean {
public void setPath(Path path) {
this.path = path;
}
public Period getPeriod() {
return period;
}
public void setPeriod(Period period) {
this.period = period;
}
}
@@ -2,11 +2,10 @@ package org.tests.types;
import io.ebean.BaseTestCase;
import io.ebean.Ebean;
import org.tests.model.types.SomeNewTypesBean;
import org.junit.Test;
import org.tests.model.types.SomeNewTypesBean;
import java.io.File;
import java.io.IOException;
import java.nio.file.Paths;
import java.time.DayOfWeek;
import java.time.Instant;
@@ -14,20 +13,23 @@ import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.Month;
import java.time.OffsetDateTime;
import java.time.Period;
import java.time.Year;
import java.time.YearMonth;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.List;
import static org.junit.Assert.*;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
public class TestNewTypes extends BaseTestCase {
private static final String TEMP_PATH = new File("/tmp").getAbsolutePath();
@Test
public void testInsertUpdate() throws IOException, InterruptedException {
public void testInsertUpdate() throws InterruptedException {
SomeNewTypesBean bean = new SomeNewTypesBean();
bean.setLocalDate(LocalDate.now());
bean.setLocalDateTime(LocalDateTime.now());
@@ -41,6 +43,7 @@ public class TestNewTypes extends BaseTestCase {
bean.setZoneOffset(ZonedDateTime.now().getOffset());
bean.setYearMonth(YearMonth.of(2014, 9));
bean.setPath(Paths.get(TEMP_PATH));
bean.setPeriod(Period.of(4,3,2));
Ebean.save(bean);
@@ -83,6 +86,9 @@ public class TestNewTypes extends BaseTestCase {
list = Ebean.find(SomeNewTypesBean.class).where().eq("path", Paths.get(TEMP_PATH)).findList();
assertTrue(!list.isEmpty());
list = Ebean.find(SomeNewTypesBean.class).where().eq("period", Period.of(4,3,2)).findList();
assertTrue(!list.isEmpty());
SomeNewTypesBean fetched = Ebean.find(SomeNewTypesBean.class, bean.getId());
assertEquals(bean.getZoneId(), fetched.getZoneId());
@@ -95,6 +101,8 @@ public class TestNewTypes extends BaseTestCase {
assertEquals(bean.getOffsetDateTime(), fetched.getOffsetDateTime());
assertEquals(bean.getInstant(), fetched.getInstant());
assertEquals(bean.getPath(), fetched.getPath());
assertEquals(bean.getPeriod(), fetched.getPeriod());
String asJson = Ebean.json().toJson(fetched);
@@ -111,6 +119,7 @@ public class TestNewTypes extends BaseTestCase {
assertEquals(bean.getInstant(), toBean.getInstant());
// FIXME: This test fails on Windows with: expected:<\tmp> but was:<C:\tmp>
assertEquals(bean.getPath(), toBean.getPath());
assertEquals(bean.getPeriod(), toBean.getPeriod());
}
@@ -133,6 +142,6 @@ public class TestNewTypes extends BaseTestCase {
assertNull(fetched.getOffsetDateTime());
assertNull(fetched.getInstant());
assertNull(fetched.getPath());
assertNull(fetched.getPeriod());
}
}