tests for getXXXSynonymByGroup #2552
authorAndreas Müller <a.mueller@bgbm.org>
Tue, 6 Sep 2011 12:04:36 +0000 (12:04 +0000)
committerAndreas Müller <a.mueller@bgbm.org>
Tue, 6 Sep 2011 12:04:36 +0000 (12:04 +0000)
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/ITaxonService.java
cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/service/TaxonServiceImplTest.java

index 1f8090d5e4645edfe57a7004be1287325b59b115..5bf8e0bef05fda7bcf4185f6d4366927114ba7ed 100644 (file)
@@ -320,13 +320,15 @@ public interface ITaxonService extends IIdentifiableEntityService<TaxonBase>{
        
        /**
         * Returns the ordered list of all {@link eu.etaxonomy.cdm.model.name.HomotypicalGroup homotypical groups} 
-        * that contain {@link Synonym synonyms} that are heterotypic to <i>this</i> taxon.
+        * that contain {@link Synonym synonyms} that are heterotypic to the given taxon.
         * {@link eu.etaxonomy.cdm.model.name.TaxonNameBase Taxon names} of heterotypic synonyms 
         * belong to a homotypical group which cannot be the homotypical group to which the
-        * taxon name of <i>this</i> taxon belongs. This method returns the same
-        * list as the {@link #getHomotypicSynonymyGroups() getHomotypicSynonymyGroups} method
-        * but without the homotypical group to which the taxon name of <i>this</i> taxon
-        * belongs.<BR>
+        * taxon name of the given taxon belongs. This method does not return the homotypic group the given
+        * taxon belongs to.<BR>
+        * This method does neglect the type of synonym relationship that is defined between the given taxon
+        * and the synonym. So the synonym relationship may be homotypic however a synonym is returned
+        * in one of the result lists as long as the synonym does not belong to the same homotypic group as
+        * the given taxon.<BR>
         * The list returned is ordered according to the date of publication of the
         * first published name within each homotypical group.
         * 
index c5ace4111e273b85f8c4e25c619f3f5836eb3959..8d1de12e4bd01ba35df425d42c315cede01d7605 100644 (file)
@@ -12,6 +12,7 @@ package eu.etaxonomy.cdm.api.service;
 import static org.junit.Assert.assertEquals;\r
 import static org.junit.Assert.assertNull;\r
 \r
+import java.util.List;\r
 import java.util.UUID;\r
 \r
 import org.apache.log4j.Logger;\r
@@ -22,6 +23,8 @@ import org.unitils.spring.annotation.SpringBeanByType;
 import eu.etaxonomy.cdm.model.name.BotanicalName;\r
 import eu.etaxonomy.cdm.model.name.HomotypicalGroup;\r
 import eu.etaxonomy.cdm.model.name.Rank;\r
+import eu.etaxonomy.cdm.model.reference.Reference;\r
+import eu.etaxonomy.cdm.model.reference.ReferenceFactory;\r
 import eu.etaxonomy.cdm.model.taxon.Synonym;\r
 import eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType;\r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
@@ -135,28 +138,91 @@ public class TaxonServiceImplTest extends CdmIntegrationTest {
        public final void testChangeSynonymToAcceptedTaxon(){\r
                Rank rank = Rank.SPECIES();\r
                //HomotypicalGroup group = HomotypicalGroup.NewInstance();\r
-               Taxon tax1 = Taxon.NewInstance(BotanicalName.NewInstance(rank, "Test1", null, null, null, null, null, null, null), null);\r
-               Taxon tax2 = Taxon.NewInstance(BotanicalName.NewInstance(rank, "Test3", null, null, null, null, null, null, null), null);\r
+               Taxon taxWithoutSyn = Taxon.NewInstance(BotanicalName.NewInstance(rank, "Test1", null, null, null, null, null, null, null), null);\r
+               Taxon taxWithSyn = Taxon.NewInstance(BotanicalName.NewInstance(rank, "Test3", null, null, null, null, null, null, null), null);\r
                Synonym synonym = Synonym.NewInstance(BotanicalName.NewInstance(rank, "Test2", null, null, null, null, null, null, null), null);\r
                Synonym synonym2 = Synonym.NewInstance(BotanicalName.NewInstance(rank, "Test4", null, null, null, null, null, null, null), null);\r
                synonym2.getName().setHomotypicalGroup(synonym.getHomotypicGroup());\r
                //tax2.addHeterotypicSynonymName(synonym.getName());\r
-               tax2.addSynonym(synonym, SynonymRelationshipType.HETEROTYPIC_SYNONYM_OF());\r
-               tax2.addSynonym(synonym2, SynonymRelationshipType.HETEROTYPIC_SYNONYM_OF());\r
+               taxWithSyn.addSynonym(synonym, SynonymRelationshipType.HETEROTYPIC_SYNONYM_OF());\r
+               taxWithSyn.addSynonym(synonym2, SynonymRelationshipType.HETEROTYPIC_SYNONYM_OF());\r
                \r
-               service.save(tax1);\r
+               service.save(taxWithoutSyn);\r
                UUID uuidSyn = service.save(synonym);\r
                service.save(synonym2);\r
-               service.save(tax2);\r
+               service.save(taxWithSyn);\r
                \r
-               Taxon taxon = service.changeSynonymToAcceptedTaxon(synonym, tax2, true, true, null, null);\r
+               Taxon taxon = service.changeSynonymToAcceptedTaxon(synonym, taxWithSyn, true, true, null, null);\r
                //test flush (resave deleted object)\r
                TaxonBase<?> syn = service.find(uuidSyn);\r
                assertNull(syn);\r
                Assert.assertEquals("New taxon should have 1 synonym relationship (the old homotypic synonym)", 1, taxon.getSynonymRelations().size());\r
+       }\r
+\r
+       @Test\r
+       public final void testGetHeterotypicSynonymyGroups(){\r
+               Rank rank = Rank.SPECIES();\r
+               Reference<?> ref1 = ReferenceFactory.newGeneric();\r
+               //HomotypicalGroup group = HomotypicalGroup.NewInstance();\r
+               Taxon taxon1 = Taxon.NewInstance(BotanicalName.NewInstance(rank, "Test3", null, null, null, null, null, null, null), null);\r
+               Synonym synonym0 = Synonym.NewInstance(BotanicalName.NewInstance(rank, "Test2", null, null, null, null, null, null, null), null);\r
+               Synonym synonym1 = Synonym.NewInstance(BotanicalName.NewInstance(rank, "Test2", null, null, null, null, null, null, null), null);\r
+               Synonym synonym2 = Synonym.NewInstance(BotanicalName.NewInstance(rank, "Test4", null, null, null, null, null, null, null), null);\r
+               synonym0.getName().setHomotypicalGroup(taxon1.getHomotypicGroup());\r
+               synonym2.getName().setHomotypicalGroup(synonym1.getHomotypicGroup());\r
+               //tax2.addHeterotypicSynonymName(synonym.getName());\r
+               taxon1.addSynonym(synonym1, SynonymRelationshipType.HETEROTYPIC_SYNONYM_OF());\r
+               taxon1.addSynonym(synonym2, SynonymRelationshipType.HETEROTYPIC_SYNONYM_OF());\r
+               \r
+               service.save(synonym1);\r
+               service.save(synonym2);\r
+               service.save(taxon1);\r
                \r
+               List<List<Synonym>> heteroSyns = service.getHeterotypicSynonymyGroups(taxon1, null);\r
+               Assert.assertEquals("There should be 1 heterotypic group", 1, heteroSyns.size());\r
+               List<Synonym> synList = heteroSyns.get(0);\r
+               Assert.assertEquals("There should be 2 heterotypic syns in group 1", 2, synList.size());\r
                \r
+               //test sec\r
+               synonym2.setSec(ref1); \r
+               heteroSyns = service.getHeterotypicSynonymyGroups(taxon1, null);\r
+               Assert.assertEquals("There should be 1 heterotypic group", 1, heteroSyns.size());\r
+               synList = heteroSyns.get(0);\r
+               Assert.assertEquals("getHeterotypicSynonymyGroups should be independent of sec reference", 2, synList.size());\r
        \r
        }\r
+       \r
 \r
+       @Test\r
+       public final void testGetHomotypicSynonymsByHomotypicGroup(){\r
+               Rank rank = Rank.SPECIES();\r
+               Reference<?> ref1 = ReferenceFactory.newGeneric();\r
+               //HomotypicalGroup group = HomotypicalGroup.NewInstance();\r
+               Taxon taxon1 = Taxon.NewInstance(BotanicalName.NewInstance(rank, "Test3", null, null, null, null, null, null, null), null);\r
+               Synonym synonym0 = Synonym.NewInstance(BotanicalName.NewInstance(rank, "Test2", null, null, null, null, null, null, null), null);\r
+               Synonym synonym1 = Synonym.NewInstance(BotanicalName.NewInstance(rank, "Test2", null, null, null, null, null, null, null), null);\r
+               Synonym synonym2 = Synonym.NewInstance(BotanicalName.NewInstance(rank, "Test4", null, null, null, null, null, null, null), null);\r
+               synonym0.getName().setHomotypicalGroup(taxon1.getHomotypicGroup());\r
+               synonym2.getName().setHomotypicalGroup(synonym1.getHomotypicGroup());\r
+               //tax2.addHeterotypicSynonymName(synonym.getName());\r
+               taxon1.addSynonym(synonym0, SynonymRelationshipType.HOMOTYPIC_SYNONYM_OF());\r
+               taxon1.addSynonym(synonym1, SynonymRelationshipType.HETEROTYPIC_SYNONYM_OF());\r
+               taxon1.addSynonym(synonym2, SynonymRelationshipType.HETEROTYPIC_SYNONYM_OF());\r
+               \r
+               service.save(synonym1);\r
+               service.save(synonym2);\r
+               service.save(taxon1);\r
+               \r
+               List<Synonym> homoSyns = service.getHomotypicSynonymsByHomotypicGroup(taxon1, null);\r
+               Assert.assertEquals("There should be 1 heterotypic group", 1, homoSyns.size());\r
+               Assert.assertSame("The homotypic synonym should be synonym0", synonym0, homoSyns.get(0));\r
+               \r
+               //test sec\r
+               synonym0.setSec(ref1); \r
+               homoSyns = service.getHomotypicSynonymsByHomotypicGroup(taxon1, null);\r
+               Assert.assertEquals("getHeterotypicSynonymyGroups should be independent of sec reference", 1, homoSyns.size());\r
+       \r
+       }\r
+       \r
+       \r
 }\r