package noc.frame.db.entity;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
import junit.framework.TestCase;
import nebula.entity.Person;
import nebula.entity.PersonImp;
import nebula.entity.PersonDbPersistor;
import nebula.persistor.NebulaContext;
import nebula.persistor.db.ConnectionProvider;
import nebula.persistor.db.DbConfiguration;
import nebula.persistor.db.DerbyConfiguration;
import util.PrintObejct;
import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Injector;
public class PersonDbPersistorTest extends TestCase {
Injector injector;
PersonDbPersistor persistor;
public PersonDbPersistorTest() {
injector = Guice.createInjector(new AbstractModule() {
@Override
protected void configure() {
DerbyConfiguration cfg = new DerbyConfiguration("debula-test", "user", "password");
this.bind(DbConfiguration.class).toInstance(cfg);
this.bind(Connection.class).toProvider(ConnectionProvider.class);
this.bind(PersonDbPersistor.class);
this.bind(NebulaContext.class);
}
});
persistor = injector.getInstance(PersonDbPersistor.class);
Connection conn = injector.getInstance(Connection.class);
boolean done = false;
// try {
// conn.createStatement().execute("drop table person");
// done = true;
// } catch (Exception e) {
// }
try {
conn.createStatement().execute("select * from person");
conn.createStatement().execute("select * from WorkExperience");
done = true;
} catch (Exception e) {
}
if (!done) {
try {
conn.createStatement().execute("drop table person");
} catch (Exception e) {
}
try {
conn.createStatement().execute("drop table WorkExperience");
} catch (Exception e) {
}
try {
conn.createStatement().execute(
"create table person (" + " name varchar(40) NOT NULL"
+ ",sex varchar(40) "
+ ",birthday varchar(40)"
+ ",height BIGINT"
+ ",company_name varchar(40)"
+ ",lastModified BIGINT"
+ ",PRIMARY KEY(name) " + ")");
conn.createStatement().execute(
"create table WorkExperience (" + " person_name varchar(40) NOT NULL"
+ ",index BIGINT NOT NULL" + ",from_ varchar(40)"
+ ",to_ varchar(40) " + ",company_name varchar(40)"
+ ",lastModified BIGINT" + ",PRIMARY KEY(person_name,index) " + ")");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
@Override
protected void setUp() throws Exception {
}
public void testNop() {
}
public void testInsert() {
PersonImp person = new PersonImp();
person.setName("wangshilian");
PersonImp.WorkExperienceImp w = person.new WorkExperienceImp();
w.setIndex(10L);
w.setFrom("from_value");
w.setTo("to_value");
person.getWorkExperiences().add(w);
w = person.new WorkExperienceImp();
w.setIndex(20L);
w.setFrom("from_value");
w.setTo("to_value");
person.getWorkExperiences().add(w);
persistor.persist(person);
person = persistor.get("wangshilian");
assertNotNull(person);
}
public void testGetPerson() {
Person person = persistor.get("wangshilian");
assertNotNull(person);
// PrintObejct.print(person.getClass(), person);
}
public void testListPerson() {
PersonImp person = new PersonImp();
person.setName("houyihong");
PersonImp.WorkExperienceImp w = person.new WorkExperienceImp();
w.setIndex(10L);
w.setFrom("from_value");
w.setTo("to_value");
person.getWorkExperiences().add(w);
w = person.new WorkExperienceImp();
w.setIndex(20L);
w.setFrom("from_value");
w.setTo("to_value");
person.getWorkExperiences().add(w);
persistor.persist(person);
person = new PersonImp();
person.setName("wangsl");
w = person.new WorkExperienceImp();
w.setIndex(10L);
w.setFrom("from_value");
w.setTo("to_value");
person.getWorkExperiences().add(w);
w = person.new WorkExperienceImp();
w.setIndex(20L);
w.setFrom("from_value");
w.setTo("to_value");
person.getWorkExperiences().add(w);
persistor.persist(person);
List<PersonImp> ps = persistor.list();
assertEquals(3, ps.size());
assertNotNull(ps.get(0));
PrintObejct.print(ps.getClass(), ps);
}
public void testRemove() {
PersonImp person = persistor.get("wangshilian");
persistor.remove(person);
}
public void testRemoveAll() {
persistor.removeAll();
}
@Override
public void tearDown() {
}
}