package dbfit.util;
import static dbfit.util.Direction.*;
import org.junit.Test;
import static org.junit.Assert.assertThat;
import static org.hamcrest.Matchers.*;
public class DbParameterAccessorsMapBuilderTest {
private int sqlType = java.sql.Types.VARCHAR;
private Class<?> javaType = String.class;
private TypeTransformerFactory dbfitToJdbcTransformerFactory = new TypeTransformerFactory();
private DbParameterAccessorsMapBuilder params =
new DbParameterAccessorsMapBuilder(dbfitToJdbcTransformerFactory);
@Test
public void normalParametersAreCreatedOnProperPositions() {
createParameterAccessor("p1", INPUT);
createParameterAccessor("p2", OUTPUT);
assertThat(getPositionOf("p1"), is(0));
assertThat(getPositionOf("p2"), is(1));
}
@Test
public void returnValueIsCreatedOnSpecialPosition() {
createMixOfParametersAndReturnValues();
assertThat(getPositionOf("r1"), is(-1));
assertThat(getPositionOf("r2"), is(-1));
}
@Test
public void positionIsNotAdvancedOnReturnValue() {
createMixOfParametersAndReturnValues();
assertThat(getPositionOf("p2"), is(1));
}
@Test
public void includesAllAddedParameters() {
createMixOfParametersAndReturnValues();
assertThat(params.toMap().keySet(),
containsInAnyOrder("r1", "p1", "r2", "p2"));
}
@Test
public void normalisesMapKey() {
createParameterAccessor("param 1", INPUT);
DbParameterAccessor paramAccessor = params.toMap().get("param1");
assertThat(paramAccessor, is(not(nullValue())));
assertThat(paramAccessor.getName(), is("param 1"));
}
/* Helpers */
private void createMixOfParametersAndReturnValues() {
createParameterAccessor("r1", RETURN_VALUE);
createParameterAccessor("p1", INPUT);
createParameterAccessor("r2", RETURN_VALUE);
createParameterAccessor("p2", OUTPUT);
}
private void createParameterAccessor(String name, Direction direction) {
params.add(name, direction, sqlType, javaType);
}
private int getPositionOf(String name) {
return params.toMap().get(name).getPosition();
}
}