package io.ebeaninternal.server.deploy.generatedproperty;

import io.ebean.config.ClassLoadConfig;
import io.ebeaninternal.server.deploy.meta.DeployBeanProperty;
import org.junit.jupiter.api.Test;

import java.sql.Timestamp;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.OffsetDateTime;

import static org.junit.jupiter.api.Assertions.assertTrue;

public class InsertTimestampFactoryTest {

  InsertTimestampFactory factory = new InsertTimestampFactory(new ClassLoadConfig());

  @Test
  public void test_createdTimestamp_Instant() {

    DeployBeanProperty prop = new DeployBeanProperty(null, Instant.class, null, null);

    GeneratedProperty insertTimestamp = factory.createInsertTimestamp(prop);
    Object value = insertTimestamp.getInsertValue(null, null, System.currentTimeMillis());
    assertTrue(value instanceof Instant);
  }

  @Test
  public void test_createdTimestamp_LocalDateTime() {

    DeployBeanProperty prop = new DeployBeanProperty(null, LocalDateTime.class, null, null);

    GeneratedProperty insertTimestamp = factory.createInsertTimestamp(prop);
    Object value = insertTimestamp.getInsertValue(null, null, System.currentTimeMillis());
    assertTrue(value instanceof LocalDateTime);
  }

  @Test
  public void test_createdTimestamp_OffsetDateTime() {

    DeployBeanProperty prop = new DeployBeanProperty(null, OffsetDateTime.class, null, null);

    GeneratedProperty insertTimestamp = factory.createInsertTimestamp(prop);
    Object value = insertTimestamp.getInsertValue(null, null, System.currentTimeMillis());
    assertTrue(value instanceof OffsetDateTime);
  }

  @Test
  public void test_createdTimestamp_Timestamp() {

    DeployBeanProperty prop = new DeployBeanProperty(null, Timestamp.class, null, null);

    GeneratedProperty insertTimestamp = factory.createInsertTimestamp(prop);
    Object value = insertTimestamp.getInsertValue(null, null, System.currentTimeMillis());
    assertTrue(value instanceof Timestamp);
  }

  @Test
  public void test_createdTimestamp_utilDate() {

    DeployBeanProperty prop = new DeployBeanProperty(null, java.util.Date.class, null, null);

    GeneratedProperty insertTimestamp = factory.createInsertTimestamp(prop);
    Object value = insertTimestamp.getInsertValue(null, null, System.currentTimeMillis());
    assertTrue(value instanceof java.util.Date);
  }

}
