Package siena.base.test

Source Code of siena.base.test.BaseRelatedTest

package siena.base.test;

import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.List;

import junit.framework.TestCase;
import siena.Model;
import siena.PersistenceManager;
import siena.PersistenceManagerFactory;
import siena.Query;
import siena.base.test.model.RelatedManyChild;
import siena.base.test.model.RelatedSeveralQueryChild;
import siena.base.test.model.RelatedSeveralQueryNoAsChild;
import siena.base.test.model.RelatedManyParent;
import siena.base.test.model.RelatedSeveralQueryParent;
import siena.base.test.model.RelatedSeveralQueryNoAsParent;
import siena.base.test.model.RelatedSimpleOwnedParent;
import siena.base.test.model.RelatedSimpleOwnedChild;
import siena.base.test.model.RelatedSimpleReferencedChild;
import siena.base.test.model.RelatedSimpleReferencedParent;

public abstract class BaseRelatedTest extends TestCase {
 
  protected PersistenceManager pm;

  public abstract PersistenceManager createPersistenceManager(List<Class<?>> classes) throws Exception;
 

  @Override
  protected void setUp() throws Exception {
    super.setUp();
    List<Class<?>> classes = new ArrayList<Class<?>>();
    classes.add(RelatedSimpleReferencedParent.class);
    classes.add(RelatedSimpleReferencedChild.class);
   
    pm = createPersistenceManager(classes);
    PersistenceManagerFactory.install(pm, classes);
     
    for (Class<?> clazz : classes) {
      if(!Modifier.isAbstract(clazz.getModifiers())){
        pm.createQuery(clazz).delete();     
      }
    }

  }

  public void testRelatedSimpleReference() {

    RelatedSimpleReferencedChild adam1 = new RelatedSimpleReferencedChild("adam1");
    adam1.insert();

    RelatedSimpleReferencedParent god = new RelatedSimpleReferencedParent("god");
    god.child = adam1;       
    god.insert();
   
    assertNotNull(god.id);
    assertNotNull(god.child.id);
   
    RelatedSimpleReferencedParent godbis = Model.getByKey(RelatedSimpleReferencedParent.class, god.id);
    RelatedSimpleReferencedChild adam1bis = Model.getByKey(RelatedSimpleReferencedChild.class, godbis.child.id);
   
    assertEquals(god, godbis);
    assertEquals(adam1, adam1bis);
  }
   
  public void testRelatedSimpleOwned() {
    RelatedSimpleOwnedChild adam1 = new RelatedSimpleOwnedChild("adam1");
   
    RelatedSimpleOwnedParent god = new RelatedSimpleOwnedParent("god");
    god.child.set(adam1);
    god.insert();

    assertNotNull(god.id);
    assertEquals(god.id, adam1.owner.id);
   
    RelatedSimpleOwnedParent godbis = Model.getByKey(RelatedSimpleOwnedParent.class, god.id);
   
    assertEquals(god, godbis);
    assertEquals(adam1, godbis.child.get());
  }
 
  public void testRelatedSimpleOwnedNull() {
    RelatedSimpleOwnedChild adam1 = new RelatedSimpleOwnedChild("adam1");
   
    RelatedSimpleOwnedParent god = new RelatedSimpleOwnedParent("god");
    god.child.set(null);
    god.insert();

    assertNotNull(god.id);
    assertNull(adam1.owner);
   
    RelatedSimpleOwnedParent godbis = Model.getByKey(RelatedSimpleOwnedParent.class, god.id);
   
    assertEquals(god, godbis);
    assertNull(godbis.child.get());
  }
 
  public void testRelatedSimpleOwnedUpdate() {
    RelatedSimpleOwnedChild adam1 = new RelatedSimpleOwnedChild("adam1");
    RelatedSimpleOwnedChild adam2 = new RelatedSimpleOwnedChild("adam2");
    RelatedSimpleOwnedParent god = new RelatedSimpleOwnedParent("god");
    god.child.set(adam1);
    god.insert();

    assertNotNull(god.id);
    assertEquals(god.id, adam1.owner.id);
   
    RelatedSimpleOwnedParent godbis = Model.getByKey(RelatedSimpleOwnedParent.class, god.id);
   
    adam2.insert();
    god.child.set(adam2);
    god.update();

    RelatedSimpleOwnedParent godbis2 = Model.getByKey(RelatedSimpleOwnedParent.class, godbis.id);

    assertEquals(god, godbis2);
    assertEquals(adam2, godbis2.child.get());
    adam1.get();
    assertNull(adam1.owner);
  }
 
  public void testRelatedSimpleOwnedUpdate2null() {
    RelatedSimpleOwnedChild adam1 = new RelatedSimpleOwnedChild("adam1");
   
    RelatedSimpleOwnedParent god = new RelatedSimpleOwnedParent("god");
    god.child.set(adam1);
    god.insert();

    assertNotNull(god.id);
    assertEquals(god.id, adam1.owner.id);
   
    RelatedSimpleOwnedParent godbis = Model.getByKey(RelatedSimpleOwnedParent.class, god.id);
   
    god.child.set(null);
    god.update();

    RelatedSimpleOwnedParent godbis2 = Model.getByKey(RelatedSimpleOwnedParent.class, godbis.id);

    assertEquals(god, godbis2);
    assertNull(godbis2.child.get());
  }
 
  public void testRelatedSeveralQuery() {
    RelatedSeveralQueryParent god = new RelatedSeveralQueryParent("god");
    god.insert();

    RelatedSeveralQueryChild adam1 = new RelatedSeveralQueryChild("adam1");
    adam1.owner = god;
    adam1.insert();
   
    RelatedSeveralQueryChild adam2 = new RelatedSeveralQueryChild("adam2");
    adam2.owner = god;
    adam2.insert();


    assertNotNull(god.id);
    assertEquals(god.id, adam1.owner.id);
    assertEquals(god.id, adam2.owner.id);
   
    RelatedSeveralQueryParent godbis = Model.getByKey(RelatedSeveralQueryParent.class, god.id);
    List<RelatedSeveralQueryChild> children = godbis.children.fetch();
   
    assertEquals(god, godbis);
    assertEquals(adam1, children.get(0));
    assertEquals(adam2, children.get(1));
  }
 
  public void testRelatedSeveralQueryLotsPaginate() {
    RelatedSeveralQueryParent god = new RelatedSeveralQueryParent("god");
    god.insert();

    List<RelatedSeveralQueryChild> adams = new ArrayList<RelatedSeveralQueryChild>();
    for(int i=0; i<100; i++){
      RelatedSeveralQueryChild adam = new RelatedSeveralQueryChild("adam"+i);
      adam.owner = god;
      adam.insert();
      adams.add(adam);
    }
     
    RelatedSeveralQueryParent godbis = Model.getByKey(RelatedSeveralQueryParent.class, god.id);
    assertEquals(god, godbis);
    Query<RelatedSeveralQueryChild> q = godbis.children.paginate(10);
    List<RelatedSeveralQueryChild> children = q.fetch();
    for(int i=0; i<10; i++){
      assertEquals(adams.get(i), children.get(i));
    }
   
    children = q.nextPage().fetch();
    for(int i=0; i<10; i++){
      assertEquals(adams.get(i+10), children.get(i));
    }

    children = q.nextPage().fetch();
    for(int i=0; i<10; i++){
      assertEquals(adams.get(i+20), children.get(i));
    }

    children = q.previousPage().fetch();
    for(int i=0; i<10; i++){
      assertEquals(adams.get(i+10), children.get(i));
    }
  }
 
  public void testRelatedSeveralQueryNoAs() {
    RelatedSeveralQueryNoAsParent god = new RelatedSeveralQueryNoAsParent("god");
    god.insert();

    RelatedSeveralQueryNoAsChild adam1 = new RelatedSeveralQueryNoAsChild("adam1");
    adam1.owner = god;
    adam1.insert();
   
    RelatedSeveralQueryNoAsChild adam2 = new RelatedSeveralQueryNoAsChild("adam2");
    adam2.owner = god;
    adam2.insert();


    assertNotNull(god.id);
    assertEquals(god.id, adam1.owner.id);
    assertEquals(god.id, adam2.owner.id);
   
    RelatedSeveralQueryNoAsParent godbis = Model.getByKey(RelatedSeveralQueryNoAsParent.class, god.id);
    List<RelatedSeveralQueryNoAsChild> children = godbis.children.fetch();
   
    assertEquals(god, godbis);
    assertEquals(adam1, children.get(0));
    assertEquals(adam2, children.get(1));
  }
 
  public void testRelatedManyOldInsertWay() {
    RelatedManyParent god = new RelatedManyParent("god");
    god.insert();

    RelatedManyChild adam1 = new RelatedManyChild("adam1");
    adam1.owner = god;
    adam1.insert();
   
    RelatedManyChild adam2 = new RelatedManyChild("adam2");
    adam2.owner = god;
    adam2.insert();

    assertNotNull(god.id);
    assertEquals(god.id, adam1.owner.id);
    assertEquals(god.id, adam2.owner.id);
   
    // tries to forcesync on god
    god.children.asList().forceSync();
    assertEquals(adam1, god.children.asList().get(0));
    assertEquals(adam2, god.children.asList().get(1));
   
    RelatedManyParent godbis = Model.getByKey(RelatedManyParent.class, god.id);
    List<RelatedManyChild> children = godbis.children.asQuery().fetch();
   
    assertEquals(god, godbis);
    assertEquals(adam1, children.get(0));
    assertEquals(adam2, children.get(1));
   
    children = godbis.children.asList();
    assertEquals(adam1, children.get(0));
    assertEquals(adam2, children.get(1));
  }
 
  public void testRelatedManyCascadeInsert() {
    RelatedManyParent god = new RelatedManyParent("god");
    RelatedManyChild adam1 = new RelatedManyChild("adam1");
    RelatedManyChild adam2 = new RelatedManyChild("adam2");
    god.children.asList().add(adam1);
    god.children.asList().add(adam2);
    god.insert();

    assertNotNull(god.id);
    assertNotNull(adam1.id);
    assertNotNull(adam2.id);
    assertEquals(god.id, adam1.owner.id);
    assertEquals(god.id, adam2.owner.id);
   
    RelatedManyParent godbis = Model.getByKey(RelatedManyParent.class, god.id);
    List<RelatedManyChild> children = godbis.children.asQuery().fetch();
   
    assertEquals(god, godbis);
    assertEquals(adam1, children.get(0));
    assertEquals(adam2, children.get(1));
   
    children = godbis.children.asList();
    assertEquals(adam1, children.get(0));
    assertEquals(adam2, children.get(1));
  }
 
  public void testRelatedManyCascadeInsertFetch() {
    RelatedManyParent god = new RelatedManyParent("god");
    RelatedManyChild adam1 = new RelatedManyChild("adam1");
    RelatedManyChild adam2 = new RelatedManyChild("adam2");
    god.children.asList().add(adam1);
    god.children.asList().add(adam2);
    god.insert();

    assertNotNull(god.id);
    assertNotNull(adam1.id);
    assertNotNull(adam2.id);
    assertEquals(god.id, adam1.owner.id);
    assertEquals(god.id, adam2.owner.id);
   
    RelatedManyParent godbis = Model.all(RelatedManyParent.class).filter("name", god.name).get();
    List<RelatedManyChild> children = godbis.children.asQuery().fetch();
   
    assertEquals(god, godbis);
    assertEquals(adam1, children.get(0));
    assertEquals(adam2, children.get(1));
   
    children = godbis.children.asList();
    assertEquals(adam1, children.get(0));
    assertEquals(adam2, children.get(1));
  }
 
  public void testRelatedManyCascadeInsertMany() {
    RelatedManyParent god = new RelatedManyParent("god");   
    List<RelatedManyChild> adams = new ArrayList<RelatedManyChild>();
    for(int i=0; i<100; i++){
      RelatedManyChild adam = new RelatedManyChild("adam"+i);
      god.children.asList().add(adam);
      adams.add(adam);
    }
    god.insert();

    assertNotNull(god.id);
    for(int i=0; i<100; i++){
      assertNotNull(adams.get(i).id);
      assertEquals(god.id, adams.get(i).owner.id);
    }
   
    RelatedManyParent godbis = Model.all(RelatedManyParent.class).filter("name", god.name).get();
   
    List<RelatedManyChild> children = godbis.children.asList();
    for(int i=0; i<100; i++){
      assertEquals(adams.get(i), children.get(i));
    }
   
    children = godbis.children.asQuery().fetch();
   
    assertEquals(god, godbis);
    for(int i=0; i<100; i++){
      assertEquals(adams.get(i), children.get(i));
    }

  }
 
  public void testRelatedManyCascadeUpdateMany() {
    RelatedManyParent god = new RelatedManyParent("god");   
    List<RelatedManyChild> adams = new ArrayList<RelatedManyChild>();
    for(int i=0; i<100; i++){
      RelatedManyChild adam = new RelatedManyChild("adam"+i);
      god.children.asList().add(adam);
      adams.add(adam);
    }
    god.insert();

    assertNotNull(god.id);
    for(int i=0; i<100; i++){
      assertNotNull(adams.get(i).id);
      assertEquals(god.id, adams.get(i).owner.id);
    }
   
    // update
    adams.get(57).name = "adam57_modified";
    adams.get(57).update();
   
    RelatedManyParent godbis = Model.all(RelatedManyParent.class).filter("name", god.name).get();
   
    List<RelatedManyChild> children = godbis.children.asList();
    for(int i=0; i<100; i++){
      if(i!=57){
        assertEquals(adams.get(i), children.get(i));
      }else {
        assertEquals("adam57_modified", children.get(i).name);
      }
    }
   
    RelatedManyChild child57 = godbis.children.asQuery().filter("id", adams.get(57).id).get();   
    assertEquals("adam57_modified", child57.name);

    children = god.children.asList().forceSync();
    assertEquals(adams.get(57), children.get(57));

  }
 
  public void testRelatedManyCascadeUpdateManyRemove() {
    RelatedManyParent god = new RelatedManyParent("god");   
    List<RelatedManyChild> adams = new ArrayList<RelatedManyChild>();
    for(int i=0; i<100; i++){
      RelatedManyChild adam = new RelatedManyChild("adam"+i);
      god.children.asList().add(adam);
      adams.add(adam);
    }
    god.insert();

    assertNotNull(god.id);
    for(int i=0; i<100; i++){
      assertNotNull(adams.get(i).id);
      assertEquals(god.id, adams.get(i).owner.id);
    }
   
    // update
    god.children.asList().remove(57);
    god.update();
   
    RelatedManyParent godbis = Model.all(RelatedManyParent.class).filter("name", god.name).get();
   
    List<RelatedManyChild> children = godbis.children.asList();
    for(int i=0; i<99; i++){
      if(i<57){
        assertEquals(adams.get(i), children.get(i));
      }else {
        assertEquals(adams.get(i+1), children.get(i));
      }
    }
   
    RelatedManyChild child57 = RelatedManyChild.all().filter("id", adams.get(57).id).get();   
    assertNull(child57.owner);
  }
 
  public void testRelatedManyCascadeUpdateManyAddEnd() {
    RelatedManyParent god = new RelatedManyParent("god");   
    List<RelatedManyChild> adams = new ArrayList<RelatedManyChild>();
    for(int i=0; i<100; i++){
      RelatedManyChild adam = new RelatedManyChild("adam"+i);
      god.children.asList().add(adam);
      adams.add(adam);
    }
    god.insert();

    assertNotNull(god.id);
    for(int i=0; i<100; i++){
      assertNotNull(adams.get(i).id);
      assertEquals(god.id, adams.get(i).owner.id);
    }
   
    // add
    RelatedManyChild adam100 = new RelatedManyChild("adam100");
    god.children.asList().add(adam100);
    god.update();
   
    RelatedManyParent godbis = Model.all(RelatedManyParent.class).filter("name", god.name).get();
   
    List<RelatedManyChild> children = godbis.children.asList();
    for(int i=0; i<101; i++){
      if(i<100){
        assertEquals(adams.get(i), children.get(i));
      }else {
        assertEquals(adam100, children.get(i));
      }
    }
   
    RelatedManyChild child100 = RelatedManyChild.all().filter("id", adam100.id).get();   
    assertEquals(god.id, child100.owner.id);

  }
 
  public void testRelatedManyCascadeUpdateManyAddMiddle() {
    // THIS TEST IS WEIRD...
    // if you add a item in the middle of the list, it will go at the end when you fetch it
    // due to the ordering by ID when calling asList()
    RelatedManyParent god = new RelatedManyParent("god");   
    List<RelatedManyChild> adams = new ArrayList<RelatedManyChild>();
    for(int i=0; i<100; i++){
      RelatedManyChild adam = new RelatedManyChild("adam"+i);
      god.children.asList().add(adam);
      adams.add(adam);
    }
    god.insert();

    assertNotNull(god.id);
    for(int i=0; i<100; i++){
      assertNotNull(adams.get(i).id);
      assertEquals(god.id, adams.get(i).owner.id);
    }
   
    // add
    RelatedManyChild adam_chboing = new RelatedManyChild("adam_chboing");
    god.children.asList().add(57, adam_chboing);
    god.update();
   
    RelatedManyParent godbis = Model.all(RelatedManyParent.class).filter("name", god.name).get();
   
    List<RelatedManyChild> children = godbis.children.asList();
    for(int i=0; i<101; i++){
      if(i<100){
        assertEquals(adams.get(i), children.get(i));
      }else {
        assertEquals(adam_chboing, children.get(i));
      }
    }
   
    RelatedManyChild adam_chboing_bis = RelatedManyChild.all().filter("id", adam_chboing.id).get();   
    assertEquals(god.id, adam_chboing_bis.owner.id);

  }
}
TOP

Related Classes of siena.base.test.BaseRelatedTest

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.