package org.tests.types;
import io.ebean.BaseTestCase;
import io.ebean.Ebean;
import org.tests.model.types.SomeNewTypesBean;
import org.junit.Test;
import java.io.File;
import java.io.IOException;
import java.nio.file.Paths;
import java.time.DayOfWeek;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.Month;
import java.time.OffsetDateTime;
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.*;
public class TestNewTypes extends BaseTestCase {
private static final String TEMP_PATH = new File("/tmp").getAbsolutePath();
@Test
public void testInsertUpdate() throws IOException, InterruptedException {
SomeNewTypesBean bean = new SomeNewTypesBean();
bean.setLocalDate(LocalDate.now());
bean.setLocalDateTime(LocalDateTime.now());
bean.setOffsetDateTime(OffsetDateTime.now());
bean.setZonedDateTime(ZonedDateTime.now());
bean.setInstant(Instant.now());
bean.setYear(Year.now());
bean.setMonth(Month.APRIL);
bean.setDayOfWeek(DayOfWeek.WEDNESDAY);
bean.setZoneId(ZoneId.systemDefault());
bean.setZoneOffset(ZonedDateTime.now().getOffset());
bean.setYearMonth(YearMonth.of(2014, 9));
bean.setPath(Paths.get(TEMP_PATH));
Ebean.save(bean);
bean.setYear(Year.now().minusYears(2));
bean.setMonth(Month.SEPTEMBER);
Ebean.save(bean);
Thread.sleep(10); // wait, to ensure that instant < Instant.now()
List<SomeNewTypesBean> list = Ebean.find(SomeNewTypesBean.class).where().lt("instant", Instant.now()).findList();
assertTrue(!list.isEmpty());
list = Ebean.find(SomeNewTypesBean.class).where().le("localDate", LocalDate.now()).findList();
assertTrue(!list.isEmpty());
list = Ebean.find(SomeNewTypesBean.class).where().lt("localDateTime", LocalDateTime.now()).findList();
assertTrue(!list.isEmpty());
list = Ebean.find(SomeNewTypesBean.class).where().lt("offsetDateTime", OffsetDateTime.now()).findList();
assertTrue(!list.isEmpty());
list = Ebean.find(SomeNewTypesBean.class).where().lt("zonedDateTime", ZonedDateTime.now()).findList();
assertTrue(!list.isEmpty());
list = Ebean.find(SomeNewTypesBean.class).where().eq("zoneId", ZoneId.systemDefault().getId()).findList();
assertTrue(!list.isEmpty());
list = Ebean.find(SomeNewTypesBean.class).where().eq("zoneOffset", ZonedDateTime.now().getOffset()).findList();
assertTrue(!list.isEmpty());
list = Ebean.find(SomeNewTypesBean.class).where().le("yearMonth", YearMonth.of(2014, 9)).findList();
assertTrue(!list.isEmpty());
list = Ebean.find(SomeNewTypesBean.class).where().le("year", Year.now()).findList();
assertTrue(!list.isEmpty());
list = Ebean.find(SomeNewTypesBean.class).where().le("month", Month.SEPTEMBER).findList();
assertTrue(!list.isEmpty());
list = Ebean.find(SomeNewTypesBean.class).where().eq("path", Paths.get(TEMP_PATH)).findList();
assertTrue(!list.isEmpty());
SomeNewTypesBean fetched = Ebean.find(SomeNewTypesBean.class, bean.getId());
assertEquals(bean.getZoneId(), fetched.getZoneId());
assertEquals(bean.getZoneOffset(), fetched.getZoneOffset());
assertEquals(bean.getMonth(), fetched.getMonth());
assertEquals(bean.getYear(), fetched.getYear());
assertEquals(bean.getYearMonth(), fetched.getYearMonth());
assertEquals(bean.getLocalDate(), fetched.getLocalDate());
assertEquals(bean.getLocalDateTime(), fetched.getLocalDateTime());
assertEquals(bean.getOffsetDateTime(), fetched.getOffsetDateTime());
assertEquals(bean.getInstant(), fetched.getInstant());
assertEquals(bean.getPath(), fetched.getPath());
String asJson = Ebean.json().toJson(fetched);
SomeNewTypesBean toBean = Ebean.json().toBean(SomeNewTypesBean.class, asJson);
assertEquals(bean.getZoneId(), toBean.getZoneId());
assertEquals(bean.getZoneOffset(), toBean.getZoneOffset());
assertEquals(bean.getMonth(), toBean.getMonth());
assertEquals(bean.getYear(), toBean.getYear());
assertEquals(bean.getYearMonth(), toBean.getYearMonth());
assertEquals(bean.getLocalDate(), toBean.getLocalDate());
assertEquals(bean.getLocalDateTime(), toBean.getLocalDateTime());
assertEquals(bean.getOffsetDateTime(), toBean.getOffsetDateTime());
assertEquals(bean.getInstant(), toBean.getInstant());
// FIXME: This test fails on Windows with: expected:<\tmp> but was:<C:\tmp>
assertEquals(bean.getPath(), toBean.getPath());
}
@Test
public void testInsertNull() {
SomeNewTypesBean bean = new SomeNewTypesBean();
Ebean.save(bean);
SomeNewTypesBean fetched = Ebean.find(SomeNewTypesBean.class, bean.getId());
assertNull(fetched.getZoneId());
assertNull(fetched.getZoneOffset());
assertNull(fetched.getMonth());
assertNull(fetched.getYear());
assertNull(fetched.getYearMonth());
assertNull(fetched.getLocalDate());
assertNull(fetched.getLocalDateTime());
assertNull(fetched.getOffsetDateTime());
assertNull(fetched.getInstant());
assertNull(fetched.getPath());
}
}