/** * */ package org.activejpa.entity; import static org.testng.Assert.assertEquals; import java.io.Serializable; import java.util.Arrays; import java.util.HashSet; import java.util.Set; import org.activejpa.entity.testng.BaseModelTest; import org.activejpa.jpa.JPA; import org.testng.IObjectFactory; import org.testng.ITestContext; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; import org.testng.internal.ObjectFactoryImpl; /** * @author ganeshs * */ public class EntityCollectionTest extends BaseModelTest { private DummyModel model; private DummyModel child1; private DummyModel child2; private DummyModel child3; /** * HACK. `mvn test` will be run before the package is created. javaagent can be loaded only from a jar. Since the * jar is not yet created, it will throw agent not found exception. This is a hack to get rid of that exception */ @Override public IObjectFactory getObjectFactory(ITestContext context) throws Exception { return new ObjectFactoryImpl(); } @BeforeClass public void beforeClass() { JPA.instance.addPersistenceUnit("test"); } public void setup() throws Exception { super.setup(); model = createModel("testColumn1", "testColumn2"); child1 = createModel("testChildColumn0", "testChildColumn2"); child2 = createModel("testChildColumn1", "testChildColumn3"); child3 = createModel("testChildColumn1", "testChildColumn3"); model.addChild(child1); model.addChild(child2); model.addChild(child3); model.persist(); } @Test public void shouldGetCount() { assertEquals(model.collection("children").count(new Filter()), 3); } @Test public void shouldFindById() { assertEquals(model.collection("children").findById(child2.getId()), child2); } @Test public void should1SearchAndReturnFirst() { assertEquals(model.collection("children").first("children.column1", "testChildColumn1"), child2); } @Test public void shouldSearchAndReturnTheOnlyMatch() { assertEquals(model.collection("children").one("children.column1", "testChildColumn0", "children.column2", "testChildColumn2"), child1); } @Test public void shouldSearchByKeyValue() { assertEquals(model.collection("children").where("children.column1", "testChildColumn0"), Arrays.asList(child1)); } @Test public void shouldSearchByMultipleKeyValues() { assertEquals(model.collection("children").where("children.column1", "testChildColumn0", "children.column2", "testChildColumn2"), Arrays.asList(child1)); } @Test public void shouldSearchUsingFilter() { assertEquals(model.collection("children").where(new Filter(new Condition("children.column1", "testChildColumn0"), new Condition("children.column2", "testChildColumn2"))), Arrays.asList(child1)); } @Test public void shouldAddItemToCollectionUsingAddMethod() { ParentWithAddMethod parent = new ParentWithAddMethod(); EntityCollection<DummyModel> collection = new EntityCollection<DummyModel>(parent, "models", DummyModel.class); collection.add(model); assertEquals(parent.models.size(), 1); } @Test public void shouldAddItemToCollectionUsingGetter() { ParentWithGetter parent = new ParentWithGetter(); EntityCollection<DummyModel> collection = new EntityCollection<DummyModel>(parent, "models", DummyModel.class); collection.add(model); assertEquals(parent.models.size(), 1); } @Test public void shouldAddItemToCollectionUsingField() { ParentWithField parent = new ParentWithField(); EntityCollection<DummyModel> collection = new EntityCollection<DummyModel>(parent, "models", DummyModel.class); collection.add(model); assertEquals(parent.models.size(), 1); } @Test public void shouldRemoveItemFromCollectionUsingRemoveMethod() { ParentWithAddMethod parent = new ParentWithAddMethod(); EntityCollection<DummyModel> collection = new EntityCollection<DummyModel>(parent, "models", DummyModel.class); collection.add(model); assertEquals(parent.models.size(), 1); collection.remove(model); assertEquals(parent.models.size(), 0); } @Test public void shouldRemoveItemFromCollectionUsingGetter() { ParentWithGetter parent = new ParentWithGetter(); EntityCollection<DummyModel> collection = new EntityCollection<DummyModel>(parent, "models", DummyModel.class); collection.add(model); assertEquals(parent.models.size(), 1); collection.remove(model); assertEquals(parent.models.size(), 0); } @Test public void shouldRemoveItemFromCollectionUsingField() { ParentWithField parent = new ParentWithField(); EntityCollection<DummyModel> collection = new EntityCollection<DummyModel>(parent, "models", DummyModel.class); collection.add(model); assertEquals(parent.models.size(), 1); collection.remove(model); assertEquals(parent.models.size(), 0); } private DummyModel createModel(String column1, String column2) { DummyModel model = new DummyModel(); model.setColumn1(column1); model.setColumn2(column2); model.persist(); return model; } public static class ParentWithAddMethod extends Model { private Set<DummyModel> models = new HashSet<DummyModel>(); public void addModel(DummyModel model) { models.add(model); } public void removeModel(DummyModel model) { models.remove(model); } @Override public Serializable getId() { return null; } } public static class ParentWithGetter extends Model { private Set<DummyModel> models = new HashSet<DummyModel>(); @Override public Serializable getId() { return null; } /** * @return the models */ public Set<DummyModel> getModels() { return models; } /** * @param models the models to set */ public void setModels(Set<DummyModel> models) { this.models = models; } } public static class ParentWithField extends Model { private Set<DummyModel> models = new HashSet<DummyModel>(); @Override public Serializable getId() { return null; } } }