Package siena.base.test

Source Code of siena.base.test.BaseModelTest

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);
  }
 

}
TOP

Related Classes of siena.base.test.BaseModelTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.