package org.simpleflatmapper.jdbc.test;
import org.junit.Test;
import org.simpleflatmapper.jdbc.JdbcMapper;
import org.simpleflatmapper.jdbc.JdbcMapperBuilder;
import org.simpleflatmapper.test.beans.DbConstructorObject;
import java.sql.ResultSet;
import java.sql.Timestamp;
import static org.junit.Assert.*;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class JdbcMapperConstructorInjectionTest {
@Test
public void testChooseSmallestMatchingConstructor() throws Exception {
JdbcMapperBuilder<DbConstructorObject> builder = JdbcMapperFactoryHelper.asm().newBuilder(DbConstructorObject.class);
builder.addMapping("prop1");
JdbcMapper<DbConstructorObject> mapper = builder.mapper();
ResultSet rs = mock(ResultSet.class);
when(rs.getString(1)).thenReturn("propValue");
DbConstructorObject o = mapper.map(rs);
assertEquals("propValue", o.getProp1());
assertNull(o.getProp2());
assertNull(o.getProp3());
assertEquals(0, o.getC());
}
@Test
public void testConstructorProp1Prop2() throws Exception {
JdbcMapperBuilder<DbConstructorObject> builder = JdbcMapperFactoryHelper.asm().newBuilder(DbConstructorObject.class);
builder.addMapping("prop1");
builder.addMapping("prop2");
JdbcMapper<DbConstructorObject> mapper = builder.mapper();
ResultSet rs = mock(ResultSet.class);
when(rs.getString(1)).thenReturn("propValue1");
when(rs.getString(2)).thenReturn("propValue2");
DbConstructorObject o = mapper.map(rs);
assertEquals("propValue1", o.getProp1());
assertEquals("propValue2", o.getProp2());
assertNull(o.getProp3());
assertEquals(1, o.getC());
}
@Test
public void testConstructorProp1Prop3() throws Exception {
JdbcMapperBuilder<DbConstructorObject> builder = JdbcMapperFactoryHelper.asm().newBuilder(DbConstructorObject.class);
builder.addMapping("prop1");
builder.addMapping("prop3");
JdbcMapper<DbConstructorObject> mapper = builder.mapper();
Timestamp ts = new Timestamp(System.currentTimeMillis());
ResultSet rs = mock(ResultSet.class);
when(rs.getString(1)).thenReturn("propValue1");
when(rs.getTimestamp(2)).thenReturn(ts);
when(rs.getObject(2)).thenReturn(ts);
DbConstructorObject o = mapper.map(rs);
assertEquals("propValue1", o.getProp1());
assertNull(o.getProp2());
assertEquals(ts, o.getProp3());
assertEquals(2, o.getC());
}
@Test
public void testConstructorProp3() throws Exception {
JdbcMapperBuilder<DbConstructorObject> builder = JdbcMapperFactoryHelper.asm().newBuilder(DbConstructorObject.class);
builder.addMapping("prop3");
JdbcMapper<DbConstructorObject> mapper = builder.mapper();
Timestamp ts = new Timestamp(System.currentTimeMillis());
ResultSet rs = mock(ResultSet.class);
when(rs.getTimestamp(1)).thenReturn(ts);
when(rs.getObject(1)).thenReturn(ts);
DbConstructorObject o = mapper.map(rs);
assertNull(o.getProp1());
assertNull(o.getProp2());
assertEquals(ts, o.getProp3());
assertEquals(2, o.getC());
}
@Test
public void testConstructorProp1Prop2Prop3() throws Exception {
JdbcMapperBuilder<DbConstructorObject> builder = JdbcMapperFactoryHelper.asm().newBuilder(DbConstructorObject.class);
builder.addMapping("prop1");
builder.addMapping("prop2");
try {
builder.addMapping("prop3");
fail("Expect exception");
} catch(Exception e) {
// expected
}
}
@Test
public void testChooseSmallestMatchingConstructorNoAsm() throws Exception {
JdbcMapperBuilder<DbConstructorObject> builder = JdbcMapperFactoryHelper.noAsm().newBuilder(DbConstructorObject.class);
builder.addMapping("prop1");
JdbcMapper<DbConstructorObject> mapper = builder.mapper();
ResultSet rs = mock(ResultSet.class);
when(rs.getString(1)).thenReturn("propValue");
DbConstructorObject o = mapper.map(rs);
assertEquals("propValue", o.getProp1());
assertNull(o.getProp2());
assertNull(o.getProp3());
assertEquals(0, o.getC());
}
@Test
public void testConstructorProp1Prop2NoAsm() throws Exception {
JdbcMapperBuilder<DbConstructorObject> builder = JdbcMapperFactoryHelper.noAsm().newBuilder(DbConstructorObject.class);
builder.addMapping("prop1");
builder.addMapping("prop2");
JdbcMapper<DbConstructorObject> mapper = builder.mapper();
ResultSet rs = mock(ResultSet.class);
when(rs.getString(1)).thenReturn("propValue1");
when(rs.getString(2)).thenReturn("propValue2");
DbConstructorObject o = mapper.map(rs);
assertEquals("propValue1", o.getProp1());
assertEquals("propValue2", o.getProp2());
assertNull(o.getProp3());
assertEquals(1, o.getC());
}
@Test
public void testConstructorProp1Prop3NoAsm() throws Exception {
JdbcMapperBuilder<DbConstructorObject> builder = JdbcMapperFactoryHelper.noAsm().newBuilder(DbConstructorObject.class);
builder.addMapping("prop1");
builder.addMapping("prop3");
JdbcMapper<DbConstructorObject> mapper = builder.mapper();
Timestamp ts = new Timestamp(System.currentTimeMillis());
ResultSet rs = mock(ResultSet.class);
when(rs.getString(1)).thenReturn("propValue1");
when(rs.getTimestamp(2)).thenReturn(ts);
when(rs.getObject(2)).thenReturn(ts);
DbConstructorObject o = mapper.map(rs);
assertEquals("propValue1", o.getProp1());
assertNull(o.getProp2());
assertEquals(ts, o.getProp3());
assertEquals(2, o.getC());
}
@Test
public void testConstructorProp3NoAsm() throws Exception {
JdbcMapperBuilder<DbConstructorObject> builder = JdbcMapperFactoryHelper.noAsm().newBuilder(DbConstructorObject.class);
builder.addMapping("prop3");
JdbcMapper<DbConstructorObject> mapper = builder.mapper();
Timestamp ts = new Timestamp(System.currentTimeMillis());
ResultSet rs = mock(ResultSet.class);
when(rs.getTimestamp(1)).thenReturn(ts);
when(rs.getObject(1)).thenReturn(ts);
DbConstructorObject o = mapper.map(rs);
assertNull(o.getProp1());
assertNull(o.getProp2());
assertEquals(ts, o.getProp3());
assertEquals(2, o.getC());
}
}