+/**\r
+ * \r
+ */\r
+package eu.etaxonomy.cdm.persistence.dao.hibernate.taxon.tmp;\r
+\r
+import java.util.List;\r
+import java.util.UUID;\r
+\r
+import org.junit.Assert;\r
+import org.junit.Before;\r
+import org.junit.Test;\r
+import org.unitils.spring.annotation.SpringBeanByType;\r
+\r
+import eu.etaxonomy.cdm.model.reference.Reference;\r
+import eu.etaxonomy.cdm.model.taxon.Classification;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonNode;\r
+import eu.etaxonomy.cdm.persistence.dao.taxon.IClassificationDao;\r
+import eu.etaxonomy.cdm.persistence.dao.taxon.ITaxonNodeDao;\r
+import eu.etaxonomy.cdm.persistence.dao.taxon.tmp.TaxonNodeFilter;\r
+import eu.etaxonomy.cdm.persistence.dao.taxon.tmp.TaxonNodeFilterDaoHibernateImpl;\r
+import eu.etaxonomy.cdm.test.integration.CdmTransactionalIntegrationTest;\r
+\r
+/**\r
+ * @author a.mueller\r
+ * @date 2014/06/13\r
+ *\r
+ */\r
+public class TaxonNodeFilterDaoHibernateImplTest extends CdmTransactionalIntegrationTest {\r
+\r
+ @SpringBeanByType\r
+ private ITaxonNodeDao taxonNodeDao;\r
+ \r
+ @SpringBeanByType\r
+ private IClassificationDao classificationDao;\r
+ \r
+ @SpringBeanByType\r
+ private TaxonNodeFilterDaoHibernateImpl filterDao;\r
+ \r
+ \r
+\r
+\r
+ \r
+ private Classification classification1;\r
+ private TaxonNode node1;\r
+ private TaxonNode node2;\r
+ private TaxonNode node3;\r
+ private TaxonNode node4;\r
+ private TaxonNode node5;\r
+ \r
+ /**\r
+ * @throws java.lang.Exception\r
+ */\r
+ @Before\r
+ public void setUp() throws Exception {\r
+ classification1 = Classification.NewInstance("TestClassification");\r
+ Reference<?> citation = null;\r
+ String microCitation = null;\r
+ Taxon taxon1 = Taxon.NewInstance(null, null);\r
+ Taxon taxon2 = Taxon.NewInstance(null, null);\r
+ Taxon taxon3 = Taxon.NewInstance(null, null);\r
+ Taxon taxon4 = Taxon.NewInstance(null, null);\r
+ Taxon taxon5 = Taxon.NewInstance(null, null);\r
+ node1 = classification1.addChildTaxon(taxon1, citation, microCitation);\r
+ node2 = classification1.addChildTaxon(taxon2, citation, microCitation);\r
+ node3 = node1.addChildTaxon(taxon3, citation, microCitation);\r
+ node4 = node3.addChildTaxon(taxon4, citation, microCitation);\r
+ node5 = node3.addChildTaxon(taxon5, citation, microCitation);\r
+ classificationDao.save(classification1);\r
+ \r
+ }\r
+\r
+ /**\r
+ * Test method for {@link eu.etaxonomy.cdm.persistence.dao.taxon.tmp.TaxonNodeFilterDaoHibernateImpl#listUuids(eu.etaxonomy.cdm.persistence.dao.taxon.tmp.TaxonNodeFilter)}.\r
+ */\r
+ @Test\r
+ public void testListUuids() {\r
+ Classification classification = classificationDao.findByUuid(classification1.getUuid());\r
+ TaxonNodeFilter filter = new TaxonNodeFilter(node1);\r
+ List<UUID> listUuid = filterDao.listUuids(filter);\r
+ Assert.assertEquals("All 4 children should be returned", 4, listUuid.size());\r
+ Assert.assertTrue(listUuid.contains(node4.getUuid()));\r
+ Assert.assertFalse(listUuid.contains(node2.getUuid()));\r
+ Assert.assertFalse(listUuid.contains(classification.getRootNode().getUuid()));\r
+ \r
+ \r
+ filter = new TaxonNodeFilter(classification.getRootNode());\r
+ listUuid = filterDao.listUuids(filter);\r
+ //FIXME still unclear if (empty) root node should be part of the result\r
+ Assert.assertEquals("All 6 children should be returned", 6, listUuid.size());\r
+ \r
+ filter = new TaxonNodeFilter(node3);\r
+ listUuid = filterDao.listUuids(filter);\r
+ Assert.assertEquals("All 3 children should be returned", 3, listUuid.size());\r
+\r
+ filter.or(node2);\r
+ listUuid = filterDao.listUuids(filter);\r
+ Assert.assertEquals("All 3 children and node 2 should be returned", 4, listUuid.size());\r
+ Assert.assertTrue(listUuid.contains(node2.getUuid()));\r
+ \r
+ filter = new TaxonNodeFilter(node1).not(node4);\r
+ listUuid = filterDao.listUuids(filter);\r
+ Assert.assertEquals("Node and 2 children but not node4 should be returned", 3, listUuid.size());\r
+ Assert.assertFalse(listUuid.contains(node4.getUuid()));\r
+\r
+ \r
+\r
+ \r
+ \r
+ }\r
+\r
+}\r