package org.jooby.jdbi;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.sql.PreparedStatement;
import java.sql.Types;
import java.util.Optional;
import org.jooby.test.MockUnit;
import org.junit.Test;
import org.skife.jdbi.v2.OptionalArgumentFactory;
import org.skife.jdbi.v2.StatementContext;
import org.skife.jdbi.v2.tweak.Argument;
public class OptionaArgumentFactoryTest {
@Test
public void accepts() {
assertTrue(new OptionalArgumentFactory().accepts(Optional.class, Optional.empty(), null));
assertFalse(new OptionalArgumentFactory().accepts(Optional.class, new Object(), null));
}
@Test
public void empty() throws Exception {
new MockUnit(StatementContext.class, PreparedStatement.class)
.expect(unit -> {
PreparedStatement stmt = unit.get(PreparedStatement.class);
stmt.setNull(1, Types.OTHER);
})
.run(unit -> {
Argument arg = new OptionalArgumentFactory()
.build(Optional.class, Optional.empty(), unit.get(StatementContext.class));
assertNotNull(arg);
arg.apply(1, unit.get(PreparedStatement.class), unit.get(StatementContext.class));
});
}
@Test
public void value() throws Exception {
new MockUnit(StatementContext.class, PreparedStatement.class)
.expect(unit -> {
PreparedStatement stmt = unit.get(PreparedStatement.class);
stmt.setObject(1, "x");
})
.run(unit -> {
Argument arg = new OptionalArgumentFactory()
.build(Optional.class, Optional.of("x"), unit.get(StatementContext.class));
assertNotNull(arg);
arg.apply(1, unit.get(PreparedStatement.class), unit.get(StatementContext.class));
});
}
}