package org.simpleflatmapper.jdbc.test;
import org.junit.Test;
import org.simpleflatmapper.jdbc.JdbcColumnKey;
import org.simpleflatmapper.jdbc.JdbcMapperBuilder;
import org.simpleflatmapper.map.MappingContext;
import org.simpleflatmapper.reflect.BiInstantiator;
import org.simpleflatmapper.test.beans.DbObject;
import org.simpleflatmapper.test.beans.Foo;
import org.simpleflatmapper.map.MapperBuilderErrorHandler;
import org.simpleflatmapper.map.error.LogFieldMapperErrorHandler;
import org.simpleflatmapper.map.mapper.MapperImpl;
import org.simpleflatmapper.reflect.Instantiator;
import java.io.IOException;
import java.sql.ResultSet;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import static org.mockito.Mockito.*;
public class JdbcMapperErrorTest {
@Test
public void testHandleMapperErrorSetterNotFound() throws NoSuchMethodException, SecurityException, IOException {
MapperBuilderErrorHandler errorHandler = mock(MapperBuilderErrorHandler.class);
JdbcMapperBuilder<DbObject> builder = JdbcMapperFactoryHelper.asm().mapperBuilderErrorHandler(errorHandler).newBuilder(DbObject.class);
builder.addMapping("id", 1);
builder.addMapping("notthere1", 2);
verify(errorHandler).propertyNotFound(DbObject.class, "notthere1");
builder.addMapping("notthere3");
verify(errorHandler).propertyNotFound(DbObject.class, "notthere3");
}
public static class MyClass {
public Foo prop;
}
@Test
public void testHandleMapperErrorGetterNotFound() throws NoSuchMethodException, SecurityException, IOException {
MapperBuilderErrorHandler errorHandler = mock(MapperBuilderErrorHandler.class);
JdbcMapperBuilder<MyClass> builder = JdbcMapperFactoryHelper.asm().mapperBuilderErrorHandler(errorHandler).newBuilder(MyClass.class);
builder.addMapping("prop", 1);
builder.mapper();
verify(errorHandler).accessorNotFound("Could not find getter for ColumnKey [columnName=prop, columnIndex=1, sqlType=-99999] type class org.simpleflatmapper.test.beans.Foo path prop See https://github.com/arnaudroger/SimpleFlatMapper/wiki/Errors_CSFM_GETTER_NOT_FOUND");
}
@Test
public void setChangeFieldMapperErrorHandler() throws NoSuchMethodException, SecurityException, IOException {
JdbcMapperBuilder<DbObject> builder =
JdbcMapperFactoryHelper
.asm()
.fieldMapperErrorHandler(new LogFieldMapperErrorHandler<JdbcColumnKey>())
.newBuilder(DbObject.class);
builder.addMapping("id");
}
@Test
public void testInstantiatorError() {
MapperImpl<ResultSet, DbObject> mapper = new MapperImpl<ResultSet, DbObject>(null, null,
new BiInstantiator<ResultSet, MappingContext<? super ResultSet>, DbObject>() {
@Override
public DbObject newInstance(ResultSet s, MappingContext<? super ResultSet> context) throws Exception {
throw new IOException();
}
});
try {
mapper.map(null);
fail("Expected error");
} catch(Exception e) {
assertTrue(e instanceof IOException);
}
}
}