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
@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
*/\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
@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
@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