Implemented new methods required for CATE in ITaxonDao and implementation, including...
[cdmlib.git] / cdmlib-persistence / src / test / java / eu / etaxonomy / cdm / persistence / dao / hibernate / taxon / TaxonDaoHibernateImplTest.java
index 38cd47a2aa0ca3b9f330ef4bdaad1d7116f51ce9..69c753768848769519bc338e76dad47e383ff3d9 100644 (file)
@@ -1,21 +1,26 @@
 package eu.etaxonomy.cdm.persistence.dao.hibernate.taxon;\r
 \r
-import java.util.List;\r
+import static junit.framework.Assert.assertEquals;\r
+import static junit.framework.Assert.assertFalse;\r
+import static junit.framework.Assert.assertNotNull;\r
+import static junit.framework.Assert.assertTrue;\r
 \r
-import junit.framework.Assert;\r
+import java.util.List;\r
+import java.util.UUID;\r
 \r
+import org.hibernate.Hibernate;\r
 import org.junit.Before;\r
 import org.junit.Test;\r
 import org.unitils.dbunit.annotation.DataSet;\r
-import org.unitils.dbunit.annotation.ExpectedDataSet;\r
-import org.unitils.spring.annotation.SpringApplicationContext;\r
 import org.unitils.spring.annotation.SpringBeanByType;\r
 \r
-import eu.etaxonomy.cdm.model.name.BotanicalName;\r
-import eu.etaxonomy.cdm.model.name.Rank;\r
 import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
+import eu.etaxonomy.cdm.model.taxon.SynonymRelationship;\r
+import eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType;\r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
 import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;\r
 import eu.etaxonomy.cdm.persistence.dao.reference.IReferenceDao;\r
 import eu.etaxonomy.cdm.persistence.dao.taxon.ITaxonDao;\r
 import eu.etaxonomy.cdm.test.integration.CdmIntegrationTest;\r
@@ -33,13 +38,15 @@ public class TaxonDaoHibernateImplTest extends CdmIntegrationTest {
        @SpringBeanByType       \r
        private IReferenceDao referenceDao;\r
        \r
-       private Taxon taxon;\r
-       private ReferenceBase sec;\r
+       private UUID uuid;\r
+       private UUID sphingidae;\r
+       private UUID acherontia;\r
 \r
        @Before\r
        public void setUp() {\r
-               sec = referenceDao.findById(1);\r
-               taxon = Taxon.NewInstance(BotanicalName.NewInstance(Rank.SPECIES()), sec);\r
+               uuid = UUID.fromString("496b1325-be50-4b0a-9aa2-3ecd610215f2");\r
+               sphingidae = UUID.fromString("54e767ee-894e-4540-a758-f906ecb4e2d9");\r
+               acherontia = UUID.fromString("c5cc8674-4242-49a4-aada-72d63194f5fa");\r
        }\r
        \r
        /**\r
@@ -47,7 +54,7 @@ public class TaxonDaoHibernateImplTest extends CdmIntegrationTest {
         */\r
        @Test\r
        public void testInit() {\r
-               Assert.assertNotNull("Instance of ITaxonDao expected",taxonDao);\r
+               assertNotNull("Instance of ITaxonDao expected",taxonDao);\r
        }\r
        \r
        /**\r
@@ -56,10 +63,13 @@ public class TaxonDaoHibernateImplTest extends CdmIntegrationTest {
        @Test\r
        @DataSet\r
        public void testGetRootTaxa() { \r
+               ReferenceBase sec = referenceDao.findById(1);\r
+               assert sec != null : "sec must exist";\r
+               \r
                List<Taxon> rootTaxa = taxonDao.getRootTaxa(sec);\r
-               Assert.assertNotNull("getRootTaxa should return a List",rootTaxa);\r
-               Assert.assertFalse("The list should not be empty",rootTaxa.isEmpty());\r
-               Assert.assertEquals("There should be one root taxon",1, rootTaxa.size());\r
+               assertNotNull("getRootTaxa should return a List",rootTaxa);\r
+               assertFalse("The list should not be empty",rootTaxa.isEmpty());\r
+               assertEquals("There should be one root taxon",1, rootTaxa.size());\r
        }\r
        \r
        /**\r
@@ -68,18 +78,158 @@ public class TaxonDaoHibernateImplTest extends CdmIntegrationTest {
        @Test\r
        @DataSet\r
        public void testGetTaxaByName() {\r
+               ReferenceBase sec = referenceDao.findById(1);\r
+               assert sec != null : "sec must exist";\r
+               \r
                List<TaxonBase> results = taxonDao.getTaxaByName("Aus", sec);\r
-               Assert.assertNotNull("getTaxaByName should return a List",results);\r
-               Assert.assertFalse("The list should not be empty",results.isEmpty());\r
+               assertNotNull("getTaxaByName should return a List",results);\r
+               assertFalse("The list should not be empty",results.isEmpty());\r
+       }       \r
+       \r
+       @Test\r
+       public void testFindByUuid() {\r
+               Taxon taxon = (Taxon)taxonDao.findByUuid(uuid);\r
+               assertNotNull("findByUuid should return a taxon",taxon);\r
+               assertTrue("findByUuid should return a taxon with it's name initialized",Hibernate.isInitialized(taxon.getName()));\r
        }\r
-\r
-       /**\r
-        * Test method for {@link eu.etaxonomy.cdm.persistence.dao.hibernate.taxon.TaxonDaoHibernateImpl#save(eu.etaxonomy.cdm.model.taxon.TaxonBase)}.\r
-        */\r
+       \r
        @Test\r
-       @DataSet\r
-       @ExpectedDataSet\r
-       public void testSaveTaxon() {\r
-               taxonDao.save(taxon);\r
+       public void testCountRelatedTaxa()      {\r
+               Taxon taxon = (Taxon)taxonDao.findByUuid(sphingidae);\r
+               assert taxon != null : "taxon must exist"; \r
+               \r
+               int numberOfRelatedTaxa = taxonDao.countRelatedTaxa(taxon,TaxonRelationshipType.TAXONOMICALLY_INCLUDED_IN());\r
+               assertEquals("countRelatedTaxa should return 23", 23, numberOfRelatedTaxa);\r
+       }\r
+       \r
+       @Test\r
+       public void testRelatedTaxa() {\r
+               Taxon taxon = (Taxon)taxonDao.findByUuid(sphingidae);\r
+               assert taxon != null : "taxon must exist"; \r
+               \r
+               List<TaxonRelationship> relatedTaxa = taxonDao.getRelatedTaxa(taxon, TaxonRelationshipType.TAXONOMICALLY_INCLUDED_IN(), null, null);\r
+               assertNotNull("getRelatedTaxa should return a List",relatedTaxa);\r
+               assertEquals("getRelatedTaxa should return all 23 related taxa",relatedTaxa.size(),23);\r
+               assertTrue("getRelatedTaxa should return TaxonRelationship objects with the relatedFrom taxon initialized",Hibernate.isInitialized(relatedTaxa.get(0).getFromTaxon()));\r
+       }\r
+       \r
+       @Test\r
+       public void testGetRelatedTaxaPaged()   {\r
+               Taxon taxon = (Taxon)taxonDao.findByUuid(sphingidae);\r
+               assert taxon != null : "taxon must exist";\r
+               \r
+               List<TaxonRelationship> firstPage = taxonDao.getRelatedTaxa(taxon,TaxonRelationshipType.TAXONOMICALLY_INCLUDED_IN(), 10, 0);\r
+               List<TaxonRelationship> secondPage = taxonDao.getRelatedTaxa(taxon,TaxonRelationshipType.TAXONOMICALLY_INCLUDED_IN(),10, 1);\r
+               List<TaxonRelationship> thirdPage = taxonDao.getRelatedTaxa(taxon,TaxonRelationshipType.TAXONOMICALLY_INCLUDED_IN(), 10, 2);\r
+               \r
+               assertNotNull("getRelatedTaxa: 10, 0 should return a List",firstPage);\r
+               assertEquals("getRelatedTaxa: 10, 0 should return a List with 10 elements",10,firstPage.size());\r
+               assertNotNull("getRelatedTaxa: 10, 1 should return a List",secondPage);\r
+               assertEquals("getRelatedTaxa: 10, 1 should return a List with 10 elements",secondPage.size(),10);\r
+               assertNotNull("getRelatedTaxa: 10, 2 should return a List",thirdPage);\r
+               assertEquals("getRelatedTaxa: 10, 2 should return a List with 3 elements",thirdPage.size(),3);\r
+       }\r
+       \r
+       @Test\r
+       public void testCountSynonymRelationships() {\r
+               Taxon taxon = (Taxon)taxonDao.findByUuid(acherontia);\r
+               assert taxon != null : "taxon must exist";\r
+               \r
+               int numberOfSynonymRelationships = taxonDao.countSynonyms(taxon,null);\r
+               assertEquals("countSynonymRelationships should return 5",5,numberOfSynonymRelationships);\r
+       }\r
+       \r
+       @Test\r
+       public void testSynonymRelationships()  {\r
+               Taxon taxon = (Taxon)taxonDao.findByUuid(acherontia);\r
+               assert taxon != null : "taxon must exist";\r
+               \r
+               List<SynonymRelationship> synonyms = taxonDao.getSynonyms(taxon, null, null, null);\r
+               \r
+               assertNotNull("getSynonyms should return a List",synonyms);\r
+               assertEquals("getSynonyms should return 5 SynonymRelationship entities",synonyms.size(),5);\r
+               assertTrue("getSynonyms should return SynonymRelationship objects with the synonym initialized",Hibernate.isInitialized(synonyms.get(0).getSynonym()));\r
+       }\r
+       \r
+       @Test\r
+       public void testCountSynonymRelationshipsByType()       {\r
+               Taxon taxon = (Taxon)taxonDao.findByUuid(acherontia);\r
+               assert taxon != null : "taxon must exist";\r
+               \r
+               int numberOfTaxonomicSynonyms = taxonDao.countSynonyms(taxon, SynonymRelationshipType.HETEROTYPIC_SYNONYM_OF());\r
+               assertEquals("countSynonyms should return 4",numberOfTaxonomicSynonyms, 4);\r
+       }\r
+       \r
+       @Test\r
+       public void testSynonymRelationshipsByType() {\r
+               Taxon taxon = (Taxon)taxonDao.findByUuid(acherontia);\r
+               assert taxon != null : "taxon must exist";\r
+               \r
+        List<SynonymRelationship> synonyms = taxonDao.getSynonyms(taxon, SynonymRelationshipType.HETEROTYPIC_SYNONYM_OF(), null, null);\r
+               \r
+        assertNotNull("getSynonyms should return a List",synonyms);\r
+               assertEquals("getSynonyms should return 4 SynonymRelationship entities",synonyms.size(),4);\r
+       }\r
+       \r
+       @Test\r
+       public void testPageSynonymRelationships(){\r
+               Taxon taxon = (Taxon)taxonDao.findByUuid(acherontia);\r
+               assert taxon != null : "taxon must exist";\r
+               \r
+               List<SynonymRelationship> firstPage = taxonDao.getSynonyms(taxon, null, 4, 0);\r
+               List<SynonymRelationship> secondPage = taxonDao.getSynonyms(taxon, null, 4, 1);\r
+               \r
+               assertNotNull("getSynonyms: 4, 0 should return a List",firstPage);\r
+               assertEquals("getSynonyms: 4, 0 should return 4 SynonymRelationships", firstPage.size(),4);\r
+               assertNotNull("getSynonyms: 4, 1 should return a List",secondPage);\r
+               assertEquals("getSynonyms: 4, 1 should return 1 SynonymRelationship",secondPage.size(),1);\r
+       }\r
+       \r
+       @Test\r
+       public void testGetTaxonMatchingUninomial() {\r
+               List<TaxonBase> result = taxonDao.findTaxaByName(true, "Smerinthus", null, null, null,null,null,null);\r
+               \r
+               assertNotNull("findTaxaByName should return a List", result);\r
+               assertEquals("findTaxaByName should return two Taxa",2,result.size());\r
+               assertEquals("findTaxaByName should return a Taxon with id 5",5,result.get(0).getId());\r
+       }\r
+       \r
+       @Test\r
+       public void testGetTaxonMatchingSpeciesBinomial() {\r
+               List<TaxonBase> result = taxonDao.findTaxaByName(true,"Smerinthus", null, "kindermannii", null,null,null,null);\r
+               \r
+               assertNotNull("findTaxaByName should return a List", result);\r
+               assertEquals("findTaxaByName should return one Taxon",1,result.size());\r
+               assertEquals("findTaxaByName should return a Taxon with id 8",8,result.get(0).getId());\r
+       }\r
+         \r
+       @Test\r
+       public void testGetTaxonMatchingTrinomial() {\r
+               List<TaxonBase> result = taxonDao.findTaxaByName(true,"Cryptocoryne", null,"purpurea","borneoensis",null,null,null);\r
+               \r
+               assertNotNull("findTaxaByName should return a List", result);\r
+               assertEquals("findTaxaByName should return one Taxon",1,result.size());\r
+               assertEquals("findTaxaByName should return a Taxon with id 38",38,result.get(0).getId());\r
+       }\r
+       \r
+       @Test\r
+       public void testNegativeMatch() {\r
+               List<TaxonBase> result = taxonDao.findTaxaByName(true,"Acherontia", null,"atropos","dehli",null,null,null);\r
+               \r
+               assertNotNull("findTaxaByName should return a List", result);\r
+               assertTrue("findTaxaByName should return an empty List",result.isEmpty());\r
+       }\r
+       \r
+       @Test\r
+       public void testCountAllTaxa() {\r
+               int numberOfTaxa = taxonDao.count(Taxon.class);\r
+               assertEquals("count should return 33 taxa",33, numberOfTaxa);\r
+       }\r
+       \r
+       @Test\r
+       public void testListAllTaxa() {\r
+               List<Taxon> taxa = taxonDao.list(Taxon.class,100, 0);\r
+               assertNotNull("list should return a List",taxa);\r
+               assertEquals("list should return 33 taxa",33, taxa.size());\r
        }\r
 }\r