package nebula.data.impl; import java.sql.Date; import java.util.ArrayList; import java.util.List; import junit.framework.TestCase; import nebula.data.DataStore; import nebula.data.Entity; import nebula.data.db.DbConfiguration; import nebula.lang.SystemTypeLoader; public class DbEntityDataPersisterTest extends TestCase { DbDataRepos p; DataStore<Entity> store; DbConfiguration dbconfig; protected void setUp() throws Exception { String driverclass = "org.apache.derby.jdbc.EmbeddedDriver"; String url = "jdbc:derby:memory:eh;create = true"; String username = "user"; String password = "password"; dbconfig = DbConfiguration.getEngine(driverclass, url, username, password); p = new DbDataRepos(new TypeDatastore(new SystemTypeLoader()), dbconfig); store = p.define(String.class, Entity.class, "Person"); store.clearChanges(); } protected void tearDown() throws Exception { p.unload(); dbconfig.shutdown(); super.tearDown(); } public final void testDefine() { assertNotNull(store); // assertEquals("Person", store.getID()); Entity v = new EditableEntity(); assertNotNull(v); v.put("Name", "wangshilian"); assertEquals(true, v.isDirty()); assertEquals("wangshilian", v.get("Name")); assertEquals(null, ((EditableEntity) v).source); p.flush(); assertEquals(true, v.isDirty()); // assertEquals("wangshilian", v.get("ID")); assertEquals("wangshilian", v.get("Name")); assertEquals(null, ((EditableEntity) v).source); store.add(v); p.flush(); assertEquals(false, v.isDirty()); assertEquals("wangshilian", v.get("Name")); assertEquals("wangshilian", store.get("wangshilian").getID()); v.put("Height", 120L); assertEquals(true, v.isDirty()); assertEquals(120L, v.get("Height")); assertEquals(null, store.get("wangshilian").get("Height")); store.flush(); assertEquals(false, v.isDirty()); assertEquals(120L, v.get("Height")); assertEquals(120L, store.get("wangshilian").get("Height")); v.put("Height", 180L); assertEquals(true, v.isDirty()); assertEquals(180L, v.get("Height")); assertEquals(120L, store.get("wangshilian").get("Height")); p.clearChanges(); p.flush(); assertEquals(true, v.isDirty()); assertEquals(180L, v.get("Height")); assertEquals(120L, store.get("wangshilian").get("Height")); store.add(v); store.flush(); assertEquals(false, v.isDirty()); assertEquals(180L, v.get("Height")); assertEquals(180L, store.get("wangshilian").get("Height")); } public final void testEntityList() { assertNotNull(store); // assertEquals("Person", store.getID()); Entity v = new EditableEntity(); assertNotNull(v); v.put("Name", "wangshilian"); /** * Education[..5]{ DateFrom Date; DateTo Date; School Text; }; */ List<EditableEntity> entities = new ArrayList<EditableEntity>(); EditableEntity education = new EditableEntity(); education.put("School", "kunming"); education.put("DateFrom",Date.valueOf("1996-09-01")); education.put("DateTo", Date.valueOf("2000-07-01")); entities.add(education); education = new EditableEntity(); education.put("School", "fuyang"); education.put("DateFrom",Date.valueOf("1993-09-01")); education.put("DateTo", Date.valueOf("1996-07-01")); entities.add(education); v.put("Education", entities); assertEquals(true, v.isDirty()); assertEquals("wangshilian", v.get("Name")); assertEquals(null, ((EditableEntity) v).source); p.flush(); assertEquals(true, v.isDirty()); // assertEquals("wangshilian", v.get("ID")); assertEquals("wangshilian", v.get("Name")); assertEquals(null, ((EditableEntity) v).source); store.add(v); p.flush(); assertEquals(false, v.isDirty()); assertEquals("wangshilian", v.get("Name")); assertEquals("wangshilian", store.get("wangshilian").get(Entity.PRIMARY_KEY)); @SuppressWarnings("unchecked") List<Entity> educationList = (List<Entity>)v.get("Education"); assertEquals(2, educationList.size()); int i = 0; Entity edu =educationList.get(i); assertEquals("kunming" ,edu.get("School")); assertEquals(Date.valueOf("1996-09-01"), edu.get("DateFrom")); assertEquals(Date.valueOf("2000-07-01"), edu.get("DateTo") ); i++; edu =educationList.get(i); assertEquals("fuyang" ,edu.get("School")); assertEquals(Date.valueOf("1993-09-01"), edu.get("DateFrom")); assertEquals(Date.valueOf("1996-07-01"), edu.get("DateTo") ); education = new EditableEntity(); education.put("School", "fuyang"); education.put("DateFrom",Date.valueOf("1993-09-01")); education.put("DateFrom", Date.valueOf("1996-07-01")); } }