package org.simpleflatmapper.datastax.test;
import com.datastax.driver.core.*;
import com.datastax.driver.core.ResultSet;
import org.junit.Test;
import org.simpleflatmapper.datastax.DatastaxMapper;
import org.simpleflatmapper.datastax.DatastaxMapperFactory;
import org.simpleflatmapper.test.beans.DbObject;
import org.simpleflatmapper.test.beans.TestAffinityObject;
import java.text.SimpleDateFormat;
import java.util.Iterator;
import static org.junit.Assert.*;
public class DatastaxMapperFactoryTest extends AbstractDatastaxTest {
@Test
public void testDynamicMapper() throws Exception {
testInSession(new Callback() {
@Override
public void call(Session session) throws Exception {
final DatastaxMapper<DbObject> mapper = DatastaxMapperFactory.newInstance().mapTo(DbObject.class);
ResultSet rs = session.execute("select id, name, email, creation_time, type_ordinal, type_name from dbobjects");
final Iterator<DbObject> iterator = mapper.iterator(rs);
DbObject next = iterator.next();
assertEquals(1, next.getId());
assertEquals("Arnaud Roger", next.getName());
assertEquals("arnaud.roger@gmail.com", next.getEmail());
assertEquals(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2012-10-02 12:10:10"), next.getCreationTime());
assertEquals(DbObject.Type.type2, next.getTypeOrdinal());
assertEquals(DbObject.Type.type3, next.getTypeName());
assertFalse(iterator.hasNext());
rs = session.execute("select id, name from dbobjects");
next = mapper.iterator(rs).next();
assertEquals(1, next.getId());
assertEquals("Arnaud Roger", next.getName());
assertNull(next.getEmail());
assertNull(next.getCreationTime());
assertNull(next.getTypeOrdinal());
assertNull(next.getTypeName());
rs = session.execute("select id, email from dbobjects");
next = mapper.iterator(rs).next();
assertEquals(1, next.getId());
assertNull(next.getName());
assertEquals("arnaud.roger@gmail.com", next.getEmail());
assertNull(next.getCreationTime());
assertNull(next.getTypeOrdinal());
assertNull(next.getTypeName());
rs = session.execute("select id, type_ordinal from dbobjects");
next = mapper.iterator(rs).next();
assertEquals(1, next.getId());
assertNull(next.getName());
assertNull(next.getEmail());
assertNull(next.getCreationTime());
assertEquals(DbObject.Type.type2, next.getTypeOrdinal());
assertNull(next.getTypeName());
}
});
}
@Test
public void testAlias() throws Exception {
testInSession(new Callback() {
@Override
public void call(Session session) throws Exception {
final DatastaxMapper<DbObject> mapper = DatastaxMapperFactory.newInstance().addAlias("firstname", "name").mapTo(DbObject.class);
ResultSet rs = session.execute("select id, email as firstname from dbobjects");
final Iterator<DbObject> iterator = mapper.iterator(rs);
DbObject o = iterator.next();
assertEquals(1, o.getId());
assertEquals("arnaud.roger@gmail.com", o.getName());
}
});
}
@Test
public void testTypeAffinity() throws Exception {
testInSession(new Callback() {
@Override
public void call(Session session) throws Exception {
final DatastaxMapper<TestAffinityObject> mapper = DatastaxMapperFactory.newInstance().mapTo(TestAffinityObject.class);
ResultSet rs = session.execute("select id as fromInt, email as fromString from dbobjects");
final Iterator<TestAffinityObject> iterator = mapper.iterator(rs);
TestAffinityObject o = iterator.next();
assertEquals(1, o.fromInt.i);
assertNull(o.fromInt.str);
assertEquals("arnaud.roger@gmail.com", o.fromString.str);
assertEquals(0, o.fromString.i);
}
});
}
}