package io.dropwizard.jdbi.args; import com.codahale.metrics.MetricRegistry; import io.dropwizard.db.DataSourceFactory; import io.dropwizard.jackson.Jackson; import io.dropwizard.jdbi.DBIFactory; import io.dropwizard.jersey.validation.Validators; import io.dropwizard.setup.Environment; import org.eclipse.jetty.util.component.LifeCycle; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.skife.jdbi.v2.DBI; import org.skife.jdbi.v2.Handle; import org.skife.jdbi.v2.sqlobject.Bind; import org.skife.jdbi.v2.sqlobject.SqlQuery; import org.skife.jdbi.v2.sqlobject.SqlUpdate; import java.io.IOException; import java.util.OptionalDouble; import java.util.UUID; import static org.assertj.core.api.Assertions.assertThat; public class OptionalDoubleTest { private final Environment env = new Environment("test-optional-double", Jackson.newObjectMapper(), Validators.newValidator(), new MetricRegistry(), null); private TestDao dao; @Before public void setupTests() throws IOException { final DataSourceFactory dataSourceFactory = new DataSourceFactory(); dataSourceFactory.setDriverClass("org.h2.Driver"); dataSourceFactory.setUrl("jdbc:h2:mem:optional-double-" + UUID.randomUUID() + "?user=sa"); dataSourceFactory.setInitialSize(1); final DBI dbi = new DBIFactory().build(env, dataSourceFactory, "test"); try (Handle h = dbi.open()) { h.execute("CREATE TABLE test (id INT PRIMARY KEY, optional DOUBLE)"); } dao = dbi.onDemand(TestDao.class); } @After public void tearDown() throws Exception { for (LifeCycle managedObject : env.lifecycle().getManagedObjects()) { managedObject.stop(); } } @Test public void testPresent() { dao.insert(1, OptionalDouble.of(123.456D)); assertThat(dao.findOptionalDoubleById(1).getAsDouble()).isEqualTo(123.456D); } @Test public void testAbsent() { dao.insert(2, OptionalDouble.empty()); assertThat(dao.findOptionalDoubleById(2).isPresent()).isFalse(); } interface TestDao { @SqlUpdate("INSERT INTO test(id, optional) VALUES (:id, :optional)") void insert(@Bind("id") int id, @Bind("optional") OptionalDouble optional); @SqlQuery("SELECT optional FROM test WHERE id = :id") OptionalDouble findOptionalDoubleById(@Bind("id") int id); } }