/** * */ package org.activejpa.entity; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertFalse; import static org.testng.Assert.assertNotNull; import static org.testng.Assert.assertNull; import static org.testng.Assert.assertTrue; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.persistence.EntityTransaction; import javax.persistence.NoResultException; import javax.persistence.NonUniqueResultException; import org.activejpa.entity.testng.BaseModelTest; import org.activejpa.entity.testng.DomainClassObjectFactory; import org.activejpa.jpa.JPA; import org.testng.IObjectFactory; import org.testng.ITestContext; import org.testng.annotations.BeforeClass; import org.testng.annotations.ObjectFactory; import org.testng.annotations.Test; /** * @author ganeshs * */ public class ModelTest extends BaseModelTest { /** * 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 */ @ObjectFactory public IObjectFactory getObjectFactory(ITestContext context) throws Exception { return new DomainClassObjectFactory(); } @BeforeClass public void beforeClass() { JPA.instance.addPersistenceUnit("test"); } @Test public void shouldCreateModel() { createModel("column1", "column2"); assertEquals(DummyModel.count(), 1); } @Test public void shouldFindById() { DummyModel model = createModel("column1", "column2");; assertEquals(DummyModel.findById(model.getId()), model); } @Test public void shouldFindAll() { DummyModel model = createModel("column1", "column2"); DummyModel model1 = createModel("column1", "column2"); assertEquals(DummyModel.all(), Arrays.asList(model, model1)); } @Test public void shouldDeleteAll() { createModel("column1", "column2"); createModel("column1", "column2"); DummyModel.deleteAll(); assertEquals(DummyModel.count(), 0); } @Test public void shouldDeleteAllByFilter() { createModel("test234", "test"); createModel("test123", "test"); DummyModel.deleteAll(new Filter(new Condition("column1", "test123"))); assertEquals(DummyModel.count(), 1); } @Test public void shouldSearchByKeyValue() { DummyModel model = createModel("test123", "test"); createModel("test1234", "test"); assertEquals(DummyModel.where(new Object[]{"column1", "test123"}), Arrays.asList(model)); } @Test public void shouldSearchByMultipleKeyValues() { DummyModel model = createModel("test123", "test125"); createModel("test1234", "test125"); assertEquals(DummyModel.where(new Object[]{"column1", "test123", "column2", "test125"}), Arrays.asList(model)); } @Test public void shouldSearchUsingFilter() { DummyModel model = createModel("test123", "test125"); createModel("test1234", "test125"); assertEquals(DummyModel.where(new Filter(new Condition("column1", "test123"), new Condition("column2", "test125"))), Arrays.asList(model)); } @Test public void shouldCheckExists() { DummyModel model = new DummyModel(); model.persist(); assertTrue(DummyModel.exists(model.getId())); } @Test public void shouldSearchAndReturnFirst() { DummyModel model = createModel("test123", "test125"); createModel("test123", "test125"); assertEquals(DummyModel.first(new Object[]{"column1", "test123", "column2", "test125"}), model); } @Test public void shouldSearchAndReturnTheOnlyMatch() { DummyModel model = createModel("test123", "test125"); createModel("test124", "test125"); assertEquals(DummyModel.one(new Object[]{"column1", "test123", "column2", "test125"}), model); } @Test(expectedExceptions=NonUniqueResultException.class) public void shouldThrowExceptionIfMoreThanOneMatches() { createModel("test123", "test125"); createModel("test123", "test125"); DummyModel.one(new Object[]{"column1", "test123", "column2", "test125"}); } @Test(expectedExceptions=NoResultException.class) public void shouldThrowExceptionIfNoMatcheFound() { DummyModel.one(new Object[]{"column1", "test123", "column2", "test125"}); } @Test public void shouldBeginTransaction() { EntityTransaction txn = JPA.instance.getDefaultConfig().getContext().getEntityManager().getTransaction(); txn.commit(); assertFalse(txn.isActive()); DummyModel.beginTxn(); assertTrue(txn.isActive()); } @Test public void shouldMergeWithEntity() { DummyModel model = createModel("test", "test123"); DummyModel model1 = new DummyModel(); model1.setId(model.getId()); model1.setColumn1("test123"); model1.setColumn2("test"); model1.merge(); model = DummyModel.findById(model.getId()); assertEquals(model1.getColumn1(), model.getColumn1()); assertEquals(model1.getColumn2(), model.getColumn2()); } @Test public void shouldDeleteEntity() { DummyModel model = createModel("test", "test123"); model.delete(); assertNull(DummyModel.findById(model.getId())); } @Test public void shouldCountByFilter() { createModel("test", "test123"); createModel("test1", "test124"); createModel("test1", "test124"); assertEquals(DummyModel.count(new Filter(new Condition("column2", "test124"))), 2); } @Test public void shouldSearchByFilterJoin() { DummyModel parent = createModel("test", "test123"); DummyModel child1 = createModel("test1", "test124"); DummyModel child2 = createModel("test1", "test124"); parent.addChild(child1); parent.addChild(child2); parent.persist(); List<DummyModel> list = DummyModel.where(new Filter(new Condition("children.column1", "test1"), new Condition("column1", "test"))); assertEquals(list.size(), 2); } @Test public void shouldGetCollection() { DummyModel parent = createModel("test", "test123"); DummyModel child1 = createModel("test1", "test124"); DummyModel child2 = createModel("test2", "test123"); parent.addChild(child1); parent.addChild(child2); parent.persist(); EntityCollection<DummyModel> collection = parent.collection("children"); assertNotNull(collection); } @Test public void shouldUpdateAttributes() { DummyModel parent = createModel("test", "test123"); Map<String, Object> map = new HashMap<String, Object>(); map.put("column1", "test1"); map.put("column2", "test2"); parent.updateAttributes(map); assertEquals(parent.getColumn1(), "test1"); assertEquals(parent.getColumn2(), "test2"); } private DummyModel createModel(String column1, String column2) { DummyModel model = new DummyModel(); model.setColumn1(column1); model.setColumn2(column2); model.persist(); return model; } @Test public void shouldOrderByFieldAsc() { DummyModel model = createModel("column1", "column2"); DummyModel model1 = createModel("column1", "column2"); Filter filter = new Filter(); filter.addSortField("id", true); List<DummyModel> models = DummyModel.where(filter); assertEquals(models.get(0), model); assertEquals(models.get(1), model1); } @Test public void shouldOrderByFieldDesc() { DummyModel model = createModel("column1", "column2"); DummyModel model1 = createModel("column1", "column2"); Filter filter = new Filter(); filter.addSortField("id", false); List<DummyModel> models = DummyModel.where(filter); assertEquals(models.get(1), model); assertEquals(models.get(0), model1); } @Test public void shouldOrderByMultipleFields() { DummyModel model = createModel("column1", "column2"); DummyModel model1 = createModel("column1", "column2"); Filter filter = new Filter(); filter.addSortField("column1", false); filter.addSortField("id", false); List<DummyModel> models = DummyModel.where(filter); assertEquals(models.get(0), model1); assertEquals(models.get(1), model); } }