package org.sql2o.converters;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.sql2o.*;
import org.sql2o.quirks.NoQuirks;
import org.sql2o.quirks.Quirks;
import java.util.*;
import static org.junit.Assert.*;
/**
* @author aldenquimby@gmail.com
* @since 4/6/14
*/
public class BidirectionalConverterTest {
private Sql2o sql2o;
private List<UUIDWrapper> wrappers;
@Before
public void setUp()
{
Quirks quirks = new NoQuirks(){
{
this.converters.put(UUID.class, new CustomUUIDConverter());
}
};
this.sql2o = new Sql2o("jdbc:h2:mem:test;DB_CLOSE_DELAY=-1", "sa", "", quirks);
this.wrappers = randomWrappers();
this.createAndFillTable(this.wrappers);
}
@After
public void tearDown()
{
deleteTable();
}
@Test
public void toDatabase_fromDatabase_doExecute()
{
List<String> notConverted = sql2o.createQuery("select text from uuid_wrapper")
.executeAndFetch(String.class);
// if conversion to database worked, all "-" from UUID were replaced with "!"
for (String s : notConverted) {
assertNotNull(UUID.fromString(s.replace('!', '-')));
}
List<UUIDWrapper> converted = sql2o.createQuery("select * from uuid_wrapper")
.executeAndFetch(UUIDWrapper.class);
// if conversion from database worked, should have the list we inserted
assertEquals(wrappers, converted);
}
/************** Helper stuff ******************/
private List<UUIDWrapper> randomWrappers() {
List<UUIDWrapper> wrappers = new ArrayList<UUIDWrapper>();
for (int i = 0; i < 10; i++) {
wrappers.add(new UUIDWrapper(UUID.randomUUID()));
}
return wrappers;
}
private void createAndFillTable(List<UUIDWrapper> wrappers) {
sql2o.createQuery("create table uuid_wrapper(\n" +
"text varchar(100) primary key)").executeUpdate();
Query insQuery = sql2o.createQuery("insert into uuid_wrapper(text) values (:text)");
for (UUIDWrapper wrapper : wrappers) {
insQuery.addParameter("text", wrapper.getText()).addToBatch();
}
insQuery.executeBatch();
}
private void deleteTable(){
try {
sql2o.createQuery("drop table uuid_wrapper").executeUpdate();
}
catch(Sql2oException e) {
// if it fails, its because the User table doesn't exists. Just ignore this.
}
}
}