package siena.base.test; import java.lang.reflect.Modifier; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import junit.framework.TestCase; import siena.Model; import siena.PersistenceManager; import siena.PersistenceManagerFactory; import siena.Query; import siena.SienaException; import siena.base.test.model.AggregateChildModel; import siena.base.test.model.AggregateParentModel; import siena.base.test.model.DiscoveryModel; import siena.base.test.model.PersonLongAutoIDAbstract; import siena.base.test.model.PersonLongAutoIDExtended; import siena.base.test.model.PersonLongAutoIDExtended2; import siena.base.test.model.PersonLongAutoIDExtended2.MyEnum; import siena.base.test.model.PersonLongAutoIDExtendedAbstract; import siena.base.test.model.PersonLongAutoIDExtendedFilter; import siena.base.test.model.PersonLongAutoIDModel; import siena.base.test.model.SampleModel; import siena.base.test.model.SampleModel2; import siena.base.test.model.TransactionAccountFrom; import siena.base.test.model.TransactionAccountFromModel; import siena.base.test.model.TransactionAccountTo; import siena.base.test.model.TransactionAccountToModel; import siena.core.async.QueryAsync; import siena.core.async.SienaFuture; import siena.core.batch.Batch; public abstract class BaseModelTest extends TestCase { protected PersistenceManager pm; public abstract PersistenceManager createPersistenceManager(List<Class<?>> classes) throws Exception; private static PersonLongAutoIDModel PERSON_LONGAUTOID_TESLA = new PersonLongAutoIDModel("Nikola", "Tesla", "Smiljam", 1); private static PersonLongAutoIDModel PERSON_LONGAUTOID_CURIE = new PersonLongAutoIDModel("Marie", "Curie", "Warsaw", 2); private static PersonLongAutoIDModel PERSON_LONGAUTOID_EINSTEIN = new PersonLongAutoIDModel("Albert", "Einstein", "Ulm", 3); private static DiscoveryModel[] discs = new DiscoveryModel[200]; @Override protected void setUp() throws Exception { super.setUp(); List<Class<?>> classes = new ArrayList<Class<?>>(); classes.add(PersonLongAutoIDModel.class); classes.add(DiscoveryModel.class); classes.add(SampleModel.class); classes.add(SampleModel2.class); classes.add(PersonLongAutoIDExtended.class); classes.add(PersonLongAutoIDExtended2.class); classes.add(PersonLongAutoIDAbstract.class); classes.add(PersonLongAutoIDExtendedAbstract.class); classes.add(PersonLongAutoIDExtendedFilter.class); classes.add(TransactionAccountFromModel.class); classes.add(TransactionAccountToModel.class); // classes.add(AggregateChildModel.class); // classes.add(AggregateParentModel.class); pm = createPersistenceManager(classes); PersistenceManagerFactory.install(pm, classes); for (Class<?> clazz : classes) { if(!Modifier.isAbstract(clazz.getModifiers())){ pm.createQuery(clazz).delete(); } } Batch<PersonLongAutoIDModel> batch = PersonLongAutoIDModel.batch(); batch.insert(PERSON_LONGAUTOID_TESLA, PERSON_LONGAUTOID_CURIE, PERSON_LONGAUTOID_EINSTEIN); for(int i=0; i<200;i++){ discs[i] = new DiscoveryModel("Disc_"+i, PERSON_LONGAUTOID_CURIE); } Batch<DiscoveryModel> batch2 = DiscoveryModel.batch(); batch2.insert(discs); } public void testGet() { PersonLongAutoIDModel person = PersonLongAutoIDModel.all().filter("lastName", "Tesla").get(); assertEquals(PERSON_LONGAUTOID_TESLA, person); } public void testFetch() { List<PersonLongAutoIDModel> persons = PersonLongAutoIDModel.all().fetch(); assertEquals(3, persons.size()); assertEquals(PERSON_LONGAUTOID_TESLA, persons.get(0)); assertEquals(PERSON_LONGAUTOID_CURIE, persons.get(1)); assertEquals(PERSON_LONGAUTOID_EINSTEIN, persons.get(2)); } public void testFetchAsync() { QueryAsync<PersonLongAutoIDModel> q = PersonLongAutoIDModel.all().async(); SienaFuture<List<PersonLongAutoIDModel>> future = q.fetch(); List<PersonLongAutoIDModel> persons = future.get(); assertEquals(3, persons.size()); assertEquals(PERSON_LONGAUTOID_TESLA, persons.get(0)); assertEquals(PERSON_LONGAUTOID_CURIE, persons.get(1)); assertEquals(PERSON_LONGAUTOID_EINSTEIN, persons.get(2)); } public void testFetchAsync2Models() { QueryAsync<PersonLongAutoIDModel> q = PersonLongAutoIDModel.all().async(); QueryAsync<DiscoveryModel> q2 = DiscoveryModel.all().async(); SienaFuture<List<PersonLongAutoIDModel>> future = q.fetch(); SienaFuture<List<DiscoveryModel>> future2 = q2.fetch(); List<PersonLongAutoIDModel> persons = future.get(); assertEquals(3, persons.size()); assertEquals(PERSON_LONGAUTOID_TESLA, persons.get(0)); assertEquals(PERSON_LONGAUTOID_CURIE, persons.get(1)); assertEquals(PERSON_LONGAUTOID_EINSTEIN, persons.get(2)); List<DiscoveryModel> res = future2.get(); assertEquals(200, res.size()); for(int i=0; i<200; i++){ assertEquals(discs[i], res.get(i)); } } public void testFetchAsyncAndGetAndResetAsync2Models() { QueryAsync<DiscoveryModel> qd = DiscoveryModel.all().async(); QueryAsync<PersonLongAutoIDModel> qp = PersonLongAutoIDModel.all().async(); SienaFuture<List<DiscoveryModel>> futured = qd.fetch(); SienaFuture<PersonLongAutoIDModel> futurep1 = qp.filter("lastName", "Tesla").get(); SienaFuture<PersonLongAutoIDModel> futurep2 = qp.resetData().filter("lastName", "Curie").get(); List<DiscoveryModel> res = futured.get(); assertEquals(200, res.size()); for(int i=0; i<200; i++){ assertEquals(discs[i], res.get(i)); } PersonLongAutoIDModel person = futurep1.get(); assertEquals(PERSON_LONGAUTOID_TESLA, person); PersonLongAutoIDModel person2 = futurep2.get(); assertEquals(PERSON_LONGAUTOID_CURIE, person2); } public void testFetchPaginateSyncAndGetAndResetAsync2Models() { Query<DiscoveryModel> qd = DiscoveryModel.all(); QueryAsync<PersonLongAutoIDModel> qp = PersonLongAutoIDModel.all().async(); SienaFuture<PersonLongAutoIDModel> futurep1 = qp.filter("lastName", "Tesla").get(); SienaFuture<PersonLongAutoIDModel> futurep2 = qp.resetData().filter("lastName", "Curie").get(); List<DiscoveryModel> res = qd.fetch(); assertEquals(200, res.size()); for(int i=0; i<200; i++){ assertEquals(discs[i], res.get(i)); } PersonLongAutoIDModel person = futurep1.get(); assertEquals(PERSON_LONGAUTOID_TESLA, person); PersonLongAutoIDModel person2 = futurep2.get(); assertEquals(PERSON_LONGAUTOID_CURIE, person2); } public void testFetchAsyncAndGetAndResetSync2Models() { QueryAsync<DiscoveryModel> qd = DiscoveryModel.all().async(); Query<PersonLongAutoIDModel> qp = PersonLongAutoIDModel.all(); SienaFuture<List<DiscoveryModel>> futured = qd.fetch(); PersonLongAutoIDModel person = qp.filter("lastName", "Tesla").get(); assertEquals(PERSON_LONGAUTOID_TESLA, person); PersonLongAutoIDModel person2 = qp.resetData().filter("lastName", "Curie").get(); assertEquals(PERSON_LONGAUTOID_CURIE, person2); List<DiscoveryModel> res = futured.get(); assertEquals(200, res.size()); for(int i=0; i<200; i++){ assertEquals(discs[i], res.get(i)); } } public void testFetchPaginateAsyncAndGetAndResetAsync2Models() { QueryAsync<DiscoveryModel> qd = DiscoveryModel.all().async(); QueryAsync<PersonLongAutoIDModel> qp = PersonLongAutoIDModel.all().async(); SienaFuture<List<DiscoveryModel>> futured = qd.paginate(50).fetch(); SienaFuture<PersonLongAutoIDModel> futurep1 = qp.filter("lastName", "Tesla").get(); PersonLongAutoIDModel person = futurep1.get(); assertEquals(PERSON_LONGAUTOID_TESLA, person); List<DiscoveryModel> res = futured.get(); assertEquals(50, res.size()); for(int i=0; i<50; i++){ assertEquals(discs[i], res.get(i)); } futured = qd.nextPage().fetch(); SienaFuture<PersonLongAutoIDModel> futurep2 = qp.resetData().filter("lastName", "Curie").get(); PersonLongAutoIDModel person2 = futurep2.get(); assertEquals(PERSON_LONGAUTOID_CURIE, person2); res = futured.get(); assertEquals(50, res.size()); for(int i=0; i<50; i++){ assertEquals(discs[i+50], res.get(i)); } } public void testFetchPaginateAsyncStatefulAndGetAndResetAsync2Models() { QueryAsync<DiscoveryModel> qd = DiscoveryModel.all().async().stateful(); QueryAsync<PersonLongAutoIDModel> qp = PersonLongAutoIDModel.all().async(); SienaFuture<List<DiscoveryModel>> futured = qd.paginate(50).fetch(); SienaFuture<PersonLongAutoIDModel> futurep1 = qp.filter("lastName", "Tesla").get(); PersonLongAutoIDModel person = futurep1.get(); assertEquals(PERSON_LONGAUTOID_TESLA, person); List<DiscoveryModel> res = futured.get(); assertEquals(50, res.size()); for(int i=0; i<50; i++){ assertEquals(discs[i], res.get(i)); } futured = qd.nextPage().fetch(); SienaFuture<PersonLongAutoIDModel> futurep2 = qp.resetData().filter("lastName", "Curie").get(); PersonLongAutoIDModel person2 = futurep2.get(); assertEquals(PERSON_LONGAUTOID_CURIE, person2); res = futured.get(); assertEquals(50, res.size()); for(int i=0; i<50; i++){ assertEquals(discs[i+50], res.get(i)); } } public void testFetchPaginateStatefulAsyncAndGetAndResetAsync2Models() { QueryAsync<DiscoveryModel> qd = DiscoveryModel.all().stateful().async(); QueryAsync<PersonLongAutoIDModel> qp = PersonLongAutoIDModel.all().async(); SienaFuture<List<DiscoveryModel>> futured = qd.paginate(50).fetch(); SienaFuture<PersonLongAutoIDModel> futurep1 = qp.filter("lastName", "Tesla").get(); PersonLongAutoIDModel person = futurep1.get(); assertEquals(PERSON_LONGAUTOID_TESLA, person); List<DiscoveryModel> res = futured.get(); assertEquals(50, res.size()); for(int i=0; i<50; i++){ assertEquals(discs[i], res.get(i)); } futured = qd.nextPage().fetch(); SienaFuture<PersonLongAutoIDModel> futurep2 = qp.resetData().filter("lastName", "Curie").get(); PersonLongAutoIDModel person2 = futurep2.get(); assertEquals(PERSON_LONGAUTOID_CURIE, person2); res = futured.get(); assertEquals(50, res.size()); for(int i=0; i<50; i++){ assertEquals(discs[i+50], res.get(i)); } } public void testFetchPaginateStatefulAsyncAndGetAndResetSync2Models() { QueryAsync<DiscoveryModel> qd = DiscoveryModel.all().stateful().async(); Query<PersonLongAutoIDModel> qp = PersonLongAutoIDModel.all(); SienaFuture<List<DiscoveryModel>> futured = qd.paginate(50).fetch(); PersonLongAutoIDModel person = qp.filter("lastName", "Tesla").get(); assertEquals(PERSON_LONGAUTOID_TESLA, person); List<DiscoveryModel> res = futured.get(); assertEquals(50, res.size()); for(int i=0; i<50; i++){ assertEquals(discs[i], res.get(i)); } futured = qd.nextPage().fetch(); PersonLongAutoIDModel person2 = qp.resetData().filter("lastName", "Curie").get(); assertEquals(PERSON_LONGAUTOID_CURIE, person2); res = futured.get(); assertEquals(50, res.size()); for(int i=0; i<50; i++){ assertEquals(discs[i+50], res.get(i)); } } public void testFetchPaginateAsync2Sync2AsyncAndGetAndResetSync2Models() { QueryAsync<DiscoveryModel> qd = DiscoveryModel.all().async(); Query<PersonLongAutoIDModel> qp = PersonLongAutoIDModel.all(); SienaFuture<List<DiscoveryModel>> futured = qd.paginate(50).fetch(); PersonLongAutoIDModel person = qp.filter("lastName", "Tesla").get(); assertEquals(PERSON_LONGAUTOID_TESLA, person); List<DiscoveryModel> res = futured.get(); assertEquals(50, res.size()); for(int i=0; i<50; i++){ assertEquals(discs[i], res.get(i)); } PersonLongAutoIDModel person2 = qp.resetData().filter("lastName", "Curie").get(); assertEquals(PERSON_LONGAUTOID_CURIE, person2); res = qd.sync().nextPage().fetch(); assertEquals(50, res.size()); for(int i=0; i<50; i++){ assertEquals(discs[i+50], res.get(i)); } PersonLongAutoIDModel person3 = qp.resetData().filter("lastName", "Einstein").get(); assertEquals(PERSON_LONGAUTOID_EINSTEIN, person3); futured = qd.nextPage().fetch(); res = futured.get(); assertEquals(50, res.size()); for(int i=0; i<50; i++){ assertEquals(discs[i+100], res.get(i)); } person2 = qp.resetData().filter("lastName", "Curie").get(); assertEquals(PERSON_LONGAUTOID_CURIE, person2); res = qd.sync().nextPage().fetch(); assertEquals(50, res.size()); for(int i=0; i<50; i++){ assertEquals(discs[i+150], res.get(i)); } futured = qd.nextPage().fetch(); res = futured.get(); assertEquals(0, res.size()); futured = qd.nextPage().fetch(); res = futured.get(); assertEquals(0, res.size()); person3 = qp.resetData().filter("lastName", "Einstein").get(); assertEquals(PERSON_LONGAUTOID_EINSTEIN, person3); res = qd.sync().previousPage().fetch(); assertEquals(50, res.size()); for(int i=0; i<50; i++){ assertEquals(discs[i+150], res.get(i)); } futured = qd.previousPage().fetch(); res = futured.get(); assertEquals(50, res.size()); for(int i=0; i<50; i++){ assertEquals(discs[i+100], res.get(i)); } res = qd.sync().previousPage().fetch(); assertEquals(50, res.size()); for(int i=0; i<50; i++){ assertEquals(discs[i+50], res.get(i)); } futured = qd.previousPage().fetch(); res = futured.get(); assertEquals(50, res.size()); for(int i=0; i<50; i++){ assertEquals(discs[i], res.get(i)); } res = qd.sync().previousPage().fetch(); assertEquals(0, res.size()); futured = qd.nextPage().fetch(); res = futured.get(); assertEquals(50, res.size()); for(int i=0; i<50; i++){ assertEquals(discs[i], res.get(i)); } res = qd.sync().fetch(); assertEquals(50, res.size()); for(int i=0; i<50; i++){ assertEquals(discs[i], res.get(i)); } res = qd.sync().previousPage().fetch(); assertEquals(0, res.size()); futured = qd.previousPage().fetch(); res = futured.get(); assertEquals(0, res.size()); } public void testFetchPaginateStatefulUpdateData() { Query<DiscoveryModel> qd = DiscoveryModel.all().stateful(); List<DiscoveryModel> res = qd.paginate(200).fetch(); assertEquals(200, res.size()); for(int i=0; i<200; i++){ assertEquals(discs[i], res.get(i)); } res = qd.nextPage().fetch(); assertEquals(0, res.size()); DiscoveryModel disc = new DiscoveryModel("Disc_201", PERSON_LONGAUTOID_CURIE); disc.insert(); res = qd.fetch(); assertEquals(1, res.size()); assertEquals(disc, res.get(0)); res = qd.nextPage().fetch(); assertEquals(0, res.size()); res = qd.previousPage().fetch(); assertEquals(1, res.size()); assertEquals(disc, res.get(0)); } public void testFetchPaginateStatelessUpdateData() { Query<DiscoveryModel> qd = DiscoveryModel.all(); List<DiscoveryModel> res = qd.paginate(200).fetch(); assertEquals(200, res.size()); for(int i=0; i<200; i++){ assertEquals(discs[i], res.get(i)); } res = qd.nextPage().fetch(); assertEquals(0, res.size()); DiscoveryModel disc = new DiscoveryModel("Disc_201", PERSON_LONGAUTOID_CURIE); disc.insert(); res = qd.fetch(); assertEquals(1, res.size()); assertEquals(disc, res.get(0)); res = qd.nextPage().fetch(); assertEquals(0, res.size()); res = qd.previousPage().fetch(); assertEquals(1, res.size()); assertEquals(disc, res.get(0)); } public void testFetchPaginateStatefulAsyncUpdateData() { QueryAsync<DiscoveryModel> qd = DiscoveryModel.all().stateful().async(); SienaFuture<List<DiscoveryModel>> future = qd.paginate(200).fetch(); List<DiscoveryModel> res = future.get(); assertEquals(200, res.size()); for(int i=0; i<200; i++){ assertEquals(discs[i], res.get(i)); } future = qd.nextPage().fetch(); res = future.get(); assertEquals(0, res.size()); DiscoveryModel disc = new DiscoveryModel("Disc_201", PERSON_LONGAUTOID_CURIE); disc.insert(); future = qd.fetch(); res = future.get(); assertEquals(1, res.size()); assertEquals(disc, res.get(0)); future = qd.nextPage().fetch(); res = future.get(); assertEquals(0, res.size()); future = qd.previousPage().fetch(); res = future.get(); assertEquals(1, res.size()); assertEquals(disc, res.get(0)); } public void testFetchPaginateStatelessAsyncUpdateData() { QueryAsync<DiscoveryModel> qd = DiscoveryModel.all().async(); SienaFuture<List<DiscoveryModel>> future = qd.paginate(200).fetch(); List<DiscoveryModel> res = future.get(); assertEquals(200, res.size()); for(int i=0; i<200; i++){ assertEquals(discs[i], res.get(i)); } future = qd.nextPage().fetch(); res = future.get(); assertEquals(0, res.size()); DiscoveryModel disc = new DiscoveryModel("Disc_201", PERSON_LONGAUTOID_CURIE); disc.insert(); future = qd.fetch(); res = future.get(); assertEquals(1, res.size()); assertEquals(disc, res.get(0)); future = qd.nextPage().fetch(); res = future.get(); assertEquals(0, res.size()); future = qd.previousPage().fetch(); res = future.get(); assertEquals(1, res.size()); assertEquals(disc, res.get(0)); } public void testFetchPaginateStatefulRealAsyncUpdateData() { QueryAsync<DiscoveryModel> qd = DiscoveryModel.all().stateful().async(); SienaFuture<List<DiscoveryModel>> future = qd.paginate(200).fetch(); DiscoveryModel disc = new DiscoveryModel("Disc_201", PERSON_LONGAUTOID_CURIE); SienaFuture<Void> futureDisc = disc.async().insert(); List<DiscoveryModel> res = future.get(); assertEquals(200, res.size()); for(int i=0; i<200; i++){ assertEquals(discs[i], res.get(i)); } futureDisc.get(); SienaFuture<List<DiscoveryModel>> future2 = qd.nextPage().fetch(); res = future2.get(); assertEquals(1, res.size()); assertEquals(disc, res.get(0)); future = qd.nextPage().fetch(); res = future.get(); assertEquals(0, res.size()); future = qd.previousPage().fetch(); res = future.get(); assertEquals(1, res.size()); assertEquals(disc, res.get(0)); } public void testInsert() { SampleModel mod = new SampleModel(); mod.clazz = String.class; mod.foobar = "FOOBAR"; mod.publicField = "PUBLIC_FIELD"; mod.setPrivateField("PRIVATE_FIELD"); mod.type = SampleModel.Type.FOO; mod.insert(); List<SampleModel> res = SampleModel.all().fetch(); for(SampleModel m: res){ assertEquals(mod, m); } } public void testInsertAsync() { SampleModel mod = new SampleModel(); mod.clazz = String.class; mod.foobar = "FOOBAR"; mod.publicField = "PUBLIC_FIELD"; mod.setPrivateField("PRIVATE_FIELD"); mod.type = SampleModel.Type.FOO; SienaFuture<Void> future = mod.async().insert(); future.get(); List<SampleModel> res = SampleModel.all().fetch(); for(SampleModel m: res){ assertEquals(mod, m); } } public void testInsertMany() { SampleModel mods[] = new SampleModel[100]; for(int i=0; i<100; i++){ SampleModel mod = new SampleModel(); mod.clazz = String.class; mod.foobar = "FOOBAR"; mod.publicField = "PUBLIC_FIELD"; mod.setPrivateField("PRIVATE_FIELD"); mod.type = SampleModel.Type.FOO; mods[i] = mod; mods[i].insert(); } List<SampleModel> res = SampleModel.all().fetch(); assertEquals(100, res.size()); for(int i=0; i<100; i++){ assertEquals(mods[i], res.get(i)); } } public void testInsertManyAsync() { SampleModel mods[] = new SampleModel[100]; for(int i=0; i<100; i++){ SampleModel mod = new SampleModel(); mod.clazz = String.class; mod.foobar = "FOOBAR"; mod.publicField = "PUBLIC_FIELD"; mod.setPrivateField("PRIVATE_FIELD"); mod.type = SampleModel.Type.FOO; mods[i] = mod; mods[i].async().insert().get(); } List<SampleModel> res = SampleModel.all().fetch(); assertEquals(100, res.size()); for(int i=0; i<100; i++){ assertEquals(mods[i], res.get(i)); } } public void testInsertAutoQuery() { SampleModel mod = new SampleModel(); mod.clazz = String.class; mod.foobar = "FOOBAR"; mod.publicField = "PUBLIC_FIELD"; mod.setPrivateField("PRIVATE_FIELD"); mod.type = SampleModel.Type.FOO; mod.insert(); SampleModel2 mod2 = new SampleModel2(); mod2.relationship = mod; mod2.insert(); List<SampleModel> res = SampleModel.all().fetch(); for(SampleModel m: res){ assertEquals(mod, m); List<SampleModel2> res2 = mod.links.fetch(); assertEquals(1, res2.size()); assertEquals(mod2, res2.get(0)); } } public void testInsertAutoQueryAsyncFetchSync() { SampleModel mod = new SampleModel(); mod.clazz = String.class; mod.foobar = "FOOBAR"; mod.publicField = "PUBLIC_FIELD"; mod.setPrivateField("PRIVATE_FIELD"); mod.type = SampleModel.Type.FOO; mod.async().insert().get(); SampleModel2 mod2 = new SampleModel2(); mod2.relationship = mod; mod2.async().insert().get(); List<SampleModel> res = SampleModel.all().fetch(); for(SampleModel m: res){ assertEquals(mod, m); List<SampleModel2> res2 = mod.links.fetch(); assertEquals(1, res2.size()); assertEquals(mod2, res2.get(0)); } } public void testInsertAutoQueryAsyncFetchAsync() { SampleModel mod = new SampleModel(); mod.clazz = String.class; mod.foobar = "FOOBAR"; mod.publicField = "PUBLIC_FIELD"; mod.setPrivateField("PRIVATE_FIELD"); mod.type = SampleModel.Type.FOO; mod.async().insert().get(); SampleModel2 mod2 = new SampleModel2(); mod2.relationship = mod; mod2.async().insert().get(); SienaFuture<List<SampleModel>> future = SampleModel.all().async().fetch(); List<SampleModel> res = future.get(); for(SampleModel m: res){ assertEquals(mod, m); List<SampleModel2> res2 = mod.links.fetch(); assertEquals(1, res2.size()); assertEquals(mod2, res2.get(0)); } } public void testInsertAutoQueryAsyncFetchAsyncQueryAsync() { SampleModel mod = new SampleModel(); mod.clazz = String.class; mod.foobar = "FOOBAR"; mod.publicField = "PUBLIC_FIELD"; mod.setPrivateField("PRIVATE_FIELD"); mod.type = SampleModel.Type.FOO; mod.async().insert().get(); SampleModel2 mod2 = new SampleModel2(); mod2.relationship = mod; mod2.async().insert().get(); SienaFuture<List<SampleModel>> future = SampleModel.all().async().fetch(); List<SampleModel> res = future.get(); for(SampleModel m: res){ assertEquals(mod, m); SienaFuture<List<SampleModel2>> future2 = mod.links.async().fetch(); List<SampleModel2> res2 = future2.get(); assertEquals(1, res2.size()); assertEquals(mod2, res2.get(0)); } } public void testInsertAutoQueryMany() { SampleModel mod = new SampleModel(); mod.clazz = String.class; mod.foobar = "FOOBAR"; mod.publicField = "PUBLIC_FIELD"; mod.setPrivateField("PRIVATE_FIELD"); mod.type = SampleModel.Type.FOO; mod.insert(); SampleModel2 mods2[] = new SampleModel2[100]; for(int i=0; i<100; i++){ SampleModel2 mod2 = new SampleModel2(); mod2.relationship = mod; mods2[i] = mod2; mod2.insert(); } List<SampleModel> res = SampleModel.all().fetch(); for(SampleModel m: res){ assertEquals(mod, m); List<SampleModel2> res2 = mod.links.fetch(); assertEquals(100, res2.size()); for(int i=0; i<100; i++){ assertEquals(mods2[i], res2.get(i)); } } } public void testInsertBatchAsync() { SampleModel mods[] = new SampleModel[100]; for(int i=0; i<100; i++){ SampleModel mod = new SampleModel(); mod.clazz = String.class; mod.foobar = "FOOBAR"; mod.publicField = "PUBLIC_FIELD"; mod.setPrivateField("PRIVATE_FIELD"); mod.type = SampleModel.Type.FOO; mods[i] = mod; mods[i].async().insert().get(); } List<SampleModel> res = SampleModel.all().fetch(); assertEquals(100, res.size()); for(int i=0; i<100; i++){ assertEquals(mods[i], res.get(i)); } } public void testSimpleInheritance() { PersonLongAutoIDExtended bob = new PersonLongAutoIDExtended("Bob", "Doe", "Oklahoma", 1, "the_dog1"); PersonLongAutoIDExtended ben = new PersonLongAutoIDExtended("Ben", "Smith", "Wichita", 2, "the_dog2"); PersonLongAutoIDExtended john = new PersonLongAutoIDExtended("John", "Wells", "Buffalo", 3, "the_dog3"); final PersonLongAutoIDExtended.Image img1 = new PersonLongAutoIDExtended.Image(); img1.filename = "test.file"; img1.title = "title"; final PersonLongAutoIDExtended.Image img2 = new PersonLongAutoIDExtended.Image(); img2.filename = "test.file"; img2.title = "title"; final PersonLongAutoIDExtended.Image img3 = new PersonLongAutoIDExtended.Image(); img3.filename = "test.file"; img3.title = "title"; List<PersonLongAutoIDExtended.Image> imgList = new ArrayList<PersonLongAutoIDExtended.Image>() {{ add(img1); add(img2); add(img3); }}; Map<String, PersonLongAutoIDExtended.Image> imgMap = new HashMap<String, PersonLongAutoIDExtended.Image>() {{ put("img1", img1); put("img2", img2); put("img3", img3); }}; bob.boss = john; bob.profileImage = img1; bob.otherImages = imgList; bob.stillImages = imgMap; ben.boss = john; ben.profileImage = img2; ben.otherImages = imgList; ben.stillImages = imgMap; john.profileImage = img3; john.otherImages = imgList; john.stillImages = imgMap; pm.save(john); pm.save(bob); pm.save(ben); PersonLongAutoIDExtended bob1 = pm.getByKey(PersonLongAutoIDExtended.class, bob.id); PersonLongAutoIDExtended ben1 = pm.getByKey(PersonLongAutoIDExtended.class, ben.id); PersonLongAutoIDExtended john1 = pm.getByKey(PersonLongAutoIDExtended.class, john.id); assertEquals(bob, bob1); assertEquals(john.id, bob1.boss.id); assertEquals(ben, ben1); assertEquals(john.id, ben1.boss.id); assertEquals(john, john1); List<PersonLongAutoIDExtended> emps = john1.employees.order("id").fetch(); assertEquals(bob, emps.get(0)); assertEquals(ben, emps.get(1)); } public void testDoubleInheritance() { PersonLongAutoIDExtended2 bob = new PersonLongAutoIDExtended2("Bob", "Doe", "Oklahoma", 1, "the_dog1", MyEnum.VAL1); pm.save(bob); PersonLongAutoIDExtended2 bob1 = pm.getByKey(PersonLongAutoIDExtended2.class, bob.id); assertEquals(bob, bob1); } public void testAbstractInheritance() { PersonLongAutoIDExtendedAbstract bob = new PersonLongAutoIDExtendedAbstract("Bob", "Doe", "Oklahoma", 1, "the_dog1"); pm.save(bob); PersonLongAutoIDExtendedAbstract bob1 = pm.getByKey(PersonLongAutoIDExtendedAbstract.class, bob.id); assertEquals(bob, bob1); } public void testFilterInheritance() { PersonLongAutoIDExtendedFilter bob = new PersonLongAutoIDExtendedFilter("Bob", "Doe", "Oklahoma", 1, "the_dog1"); pm.save(bob); PersonLongAutoIDExtendedFilter bob1 = pm.getByKey(PersonLongAutoIDExtendedFilter.class, bob.id); assertNotSame(bob, bob1); assertEquals(bob.firstName, bob1.firstName); assertEquals(bob.lastName, bob1.lastName); assertEquals(bob.dogName, bob1.dogName); assertEquals(bob.boss, bob1.boss); assertEquals(bob.profileImage, bob1.profileImage); assertEquals(bob.stillImages, bob1.stillImages); assertEquals(bob.otherImages, bob1.otherImages); assertTrue(bob1.city == null); assertTrue(bob1.n == 0); } public void testTransactionSave() { TransactionAccountFromModel accFrom = new TransactionAccountFromModel(1000L); TransactionAccountToModel accTo = new TransactionAccountToModel(1000L); accFrom.insert(); accTo.insert(); try { accFrom.getPersistenceManager().beginTransaction(); accFrom.amount-=100L; accFrom.save(); accTo.amount+=100L; accTo.save(); accFrom.getPersistenceManager().commitTransaction(); }catch(SienaException e){ accFrom.getPersistenceManager().rollbackTransaction(); fail(); }finally{ accFrom.getPersistenceManager().closeConnection(); } TransactionAccountFrom accFromAfter = pm.getByKey(TransactionAccountFrom.class, accFrom.id); assertTrue(900L == accFromAfter.amount); TransactionAccountTo accToAfter = pm.getByKey(TransactionAccountTo.class, accTo.id); assertTrue(1100L == accToAfter.amount); } public void testTransactionSaveFailure() { TransactionAccountFromModel accFrom = new TransactionAccountFromModel(1000L); TransactionAccountToModel accTo = new TransactionAccountToModel(1000L); accFrom.insert(); accTo.insert(); try { accFrom.getPersistenceManager().beginTransaction(); accFrom.amount-=100L; accFrom.save(); accTo.amount+=100L; accTo.save(); throw new SienaException("test"); }catch(SienaException e){ accFrom.getPersistenceManager().rollbackTransaction(); }finally{ accFrom.getPersistenceManager().closeConnection(); } TransactionAccountFrom accFromAfter = pm.getByKey(TransactionAccountFrom.class, accFrom.id); assertTrue(1000L == accFromAfter.amount); TransactionAccountTo accToAfter = pm.getByKey(TransactionAccountTo.class, accTo.id); assertTrue(1000L == accToAfter.amount); } }