package dbfit.util;
import dbfit.fixture.StatementExecution;
import static dbfit.util.Direction.INPUT_OUTPUT;
import org.junit.*;
import static org.mockito.Mockito.*;
import static java.sql.Types.*;
public class DbParameterAccessorTest {
int sqlType = VARCHAR;
String inputValue = "The input value";
int position = 1;
String userDefinedTypeName = "whatever";
TypeTransformerFactory inputTransformerFactory;
StatementExecution statement;
DbParameterAccessor dbpa;
@Before
public void initialise() throws Exception {
Class<?> javaType = String.class;
inputTransformerFactory = mock(TypeTransformerFactory.class);
statement = mock(StatementExecution.class);
dbpa = new DbParameterAccessor("dummy", INPUT_OUTPUT, sqlType,
userDefinedTypeName, javaType, position, inputTransformerFactory);
dbpa.bindTo(statement, position);
}
@Test
public void inputObjectIsTransformedBeforeJdbcBindingWhenTransformerSpecifierTest() throws Exception {
TypeTransformer inputTransformer = mock(TypeTransformer.class);
Integer outputValue = 5;
when(inputTransformer.transform(inputValue)).thenReturn(outputValue);
when(inputTransformerFactory.getTransformer(inputValue.getClass())).thenReturn(inputTransformer);
dbpa.set(inputValue);
verify(statement).setObject(position, outputValue, sqlType, userDefinedTypeName);
}
@Test
public void inputObjectIsNotTransformedBeforeJdbcBindingWhenNoTransformerSpecifierTest() throws Exception {
when(inputTransformerFactory.getTransformer(inputValue.getClass())).thenReturn(null);
dbpa.set(inputValue);
verify(statement).setObject(position, inputValue, sqlType, userDefinedTypeName);
}
}