2 * Copyright (C) 2009 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
10 package eu
.etaxonomy
.cdm
.api
.service
;
12 import java
.io
.FileNotFoundException
;
13 import java
.util
.UUID
;
15 import org
.apache
.log4j
.Logger
;
16 import org
.junit
.Assert
;
17 import org
.junit
.Test
;
18 import org
.unitils
.database
.annotations
.Transactional
;
19 import org
.unitils
.database
.util
.TransactionMode
;
20 import org
.unitils
.dbunit
.annotation
.DataSet
;
21 import org
.unitils
.dbunit
.annotation
.ExpectedDataSet
;
22 import org
.unitils
.spring
.annotation
.SpringBeanByType
;
24 import eu
.etaxonomy
.cdm
.api
.service
.dto
.FindByIdentifierDTO
;
25 import eu
.etaxonomy
.cdm
.api
.service
.pager
.Pager
;
26 import eu
.etaxonomy
.cdm
.model
.common
.CdmBase
;
27 import eu
.etaxonomy
.cdm
.model
.common
.DefinedTerm
;
28 import eu
.etaxonomy
.cdm
.model
.common
.Identifier
;
29 import eu
.etaxonomy
.cdm
.model
.common
.TermVocabulary
;
30 import eu
.etaxonomy
.cdm
.model
.common
.VocabularyEnum
;
31 import eu
.etaxonomy
.cdm
.model
.name
.BotanicalName
;
32 import eu
.etaxonomy
.cdm
.model
.name
.Rank
;
33 import eu
.etaxonomy
.cdm
.model
.name
.TaxonNameBase
;
34 import eu
.etaxonomy
.cdm
.model
.taxon
.Classification
;
35 import eu
.etaxonomy
.cdm
.model
.taxon
.Synonym
;
36 import eu
.etaxonomy
.cdm
.model
.taxon
.SynonymRelationshipType
;
37 import eu
.etaxonomy
.cdm
.model
.taxon
.Taxon
;
38 import eu
.etaxonomy
.cdm
.model
.taxon
.TaxonBase
;
39 import eu
.etaxonomy
.cdm
.model
.taxon
.TaxonNode
;
40 import eu
.etaxonomy
.cdm
.persistence
.query
.MatchMode
;
41 import eu
.etaxonomy
.cdm
.test
.integration
.CdmTransactionalIntegrationTest
;
47 @Transactional(TransactionMode
.DISABLED
)
48 public class IdentifiableServiceBaseTest
extends CdmTransactionalIntegrationTest
{
49 @SuppressWarnings("unused")
50 private static final Logger logger
= Logger
.getLogger(IdentifiableServiceBaseTest
.class);
54 private INameService nameService
;
57 private ITermService termService
;
60 private IVocabularyService vocService
;
63 private ITaxonService taxonService
;
66 private IClassificationService classificationService
;
68 /****************** TESTS *****************************/
71 public final void voidTestSeriveExists(){
72 Assert
.assertNotNull("Service shoulb be initialized", nameService
);
79 public final void testUpdateTitleCache() {
80 Assert
.assertEquals("There should be 5 TaxonNames in the data set", 5, nameService
.count(TaxonNameBase
.class));
81 Class clazz
= TaxonNameBase
.class;
83 nameService
.updateTitleCache(clazz
, stepSize
, null, null);
85 // commitAndStartNewTransaction(new String[]{"TaxonNameBase","TaxonNameBase_AUD"});
90 @DataSet(value
="IdentifiableServiceBaseTest.testFindByIdentifier.xml")
91 public final void testListByIdentifier(){
92 UUID uuidIdentifierType1
= UUID
.fromString("02bb62db-a229-4eeb-83e6-a9a093943d5e");
93 UUID uuidIdentifierType2
= UUID
.fromString("ef6e960f-5289-456c-b25c-cff7f4de2f63");
96 DefinedTerm it1
= (DefinedTerm
)termService
.find(uuidIdentifierType1
);
97 Assert
.assertNotNull("identifier type must not be null", it1
);
99 boolean includeEntity
= true;
100 Pager
<FindByIdentifierDTO
<Taxon
>> taxonPager
= taxonService
.findByIdentifier(Taxon
.class, "ext-1234", it1
, null, includeEntity
, null, null, null);
101 Assert
.assertTrue("Result should not be empty", taxonPager
.getCount() == 1);
102 FindByIdentifierDTO
<Taxon
>.CdmEntity entity
= taxonPager
.getRecords().get(0).getCdmEntity();
103 Taxon taxon
= entity
.getEntity();
104 Assert
.assertEquals(UUID
.fromString("888cded1-cadc-48de-8629-e32927919879"), taxon
.getUuid());
105 Assert
.assertEquals(UUID
.fromString("888cded1-cadc-48de-8629-e32927919879"), entity
.getCdmUuid());
106 Assert
.assertEquals("Taxon should have 1 identifier", 1, taxon
.getIdentifiers().size());
107 Identifier
<?
> identifier
= taxon
.getIdentifiers().get(0);
108 DefinedTerm type
= CdmBase
.deproxy(identifier
.getType(), DefinedTerm
.class);
109 Assert
.assertEquals(uuidIdentifierType1
, type
.getUuid());
111 Pager
<FindByIdentifierDTO
<TaxonNameBase
>> names
= nameService
.findByIdentifier(
112 TaxonNameBase
.class, "ext-1234", null, null, includeEntity
, null, null, null);
113 Assert
.assertTrue("Identifier does not exist for TaxonName", names
.getCount() == 0);
115 taxonPager
= taxonService
.findByIdentifier(null, "ext-1234", null, null, includeEntity
, null, null, null);
116 Assert
.assertEquals("Result size for 'ext-1234' should be 1", 1, taxonPager
.getRecords().size());
118 taxonPager
= taxonService
.findByIdentifier(Taxon
.class, null, null, null, includeEntity
, null, null, null);
119 Assert
.assertEquals("Result should not be empty", 2 , taxonPager
.getRecords().size());
122 includeEntity
= false;
123 taxonPager
= taxonService
.findByIdentifier(Taxon
.class, "ext-1234", it1
, null, includeEntity
, null, null, null);
124 entity
= taxonPager
.getRecords().get(0).getCdmEntity();
125 Assert
.assertNull("Taxon must not be returned with includeEntity = false", entity
.getEntity());
130 includeEntity
= false;
131 MatchMode matchmode
= null;
132 taxonPager
= taxonService
.findByIdentifier(Taxon
.class, "123", null, matchmode
, includeEntity
, null, null, null);
133 Assert
.assertTrue("Result size for '123' should be 0", taxonPager
.getCount() == 0);
135 taxonPager
= taxonService
.findByIdentifier(Taxon
.class, "123", null, MatchMode
.EXACT
, includeEntity
, null, null, null);
136 Assert
.assertTrue("Result size for '123' should be 0", taxonPager
.getCount() == 0);
138 taxonPager
= taxonService
.findByIdentifier(Taxon
.class, "123", null, MatchMode
.ANYWHERE
, includeEntity
, null, null, null);
139 Assert
.assertTrue("Result size for '123' should be 1", taxonPager
.getCount() == 1);
141 taxonPager
= taxonService
.findByIdentifier(Taxon
.class, "123", null, MatchMode
.BEGINNING
, includeEntity
, null, null, null);
142 Assert
.assertTrue("Result size for '123' should be 0", taxonPager
.getCount() == 0);
144 taxonPager
= taxonService
.findByIdentifier(Taxon
.class, "ext", null, MatchMode
.BEGINNING
, includeEntity
, null, null, null);
145 Assert
.assertTrue("Result size for 'ext' should be 1", taxonPager
.getCount() == 2);
148 taxonPager
= taxonService
.findByIdentifier(null, "ext", null, MatchMode
.BEGINNING
, includeEntity
, null, null, null);
149 Assert
.assertEquals("Total result size for starts with 'ext' should be 4", 4, taxonPager
.getRecords().size());
150 taxonPager
= taxonService
.findByIdentifier(null, "ext", null, MatchMode
.BEGINNING
, includeEntity
, 2, 1, null);
151 Assert
.assertEquals("Total result size for starts with 'ext' should be 4", Integer
.valueOf(4), taxonPager
.getCount());
152 Assert
.assertEquals("Result size for starts with 'ext' second page should be 2", Integer
.valueOf(2), taxonPager
.getPageSize());
153 Assert
.assertEquals("The third taxon (first on second page) should be ext-syn1", "ext-syn1", taxonPager
.getRecords().get(0).getIdentifier().getIdentifier());
155 taxonPager
= taxonService
.findByIdentifier(Taxon
.class, "ext", null, MatchMode
.BEGINNING
, includeEntity
, null, null, null);
156 Assert
.assertTrue("Result size for 'ext' should be 2", taxonPager
.getCount() == 2);
161 @DataSet(value
="IdentifiableServiceBaseTest.testFindByIdentifier.xml")
162 public final void testListByIdentifierClassification(){
163 //classification Filter
164 Classification classification
= classificationService
.find(5000);
165 TaxonNode rootNode
= classification
.getRootNode();
166 Pager
<FindByIdentifierDTO
<Taxon
>> taxonPager
= taxonService
.findByIdentifier(Taxon
.class, "ext-1234", null, rootNode
, MatchMode
.EXACT
, false, null, null, null);
167 Assert
.assertEquals("Result size for 'ext' should be 1", Integer
.valueOf(1), taxonPager
.getCount());
168 Assert
.assertEquals("Result size for 'ext' should be 1", Integer
.valueOf(1), (Integer
)taxonPager
.getRecords().size());
170 Pager
<FindByIdentifierDTO
<Taxon
>> taxPager
= taxonService
.findByIdentifier(Taxon
.class, "ext-cache1", null, rootNode
, MatchMode
.EXACT
, false, null, null, null);
171 Assert
.assertEquals("Result size for 'ext' should be 0", Integer
.valueOf(0), taxPager
.getCount());
172 Assert
.assertEquals("Result size for 'ext' should be 0", 0, taxPager
.getRecords().size());
174 rootNode
= null; //check against missing filter
175 taxPager
= taxonService
.findByIdentifier(Taxon
.class, "ext-cache1", null, rootNode
, MatchMode
.EXACT
, false, null, null, null);
176 Assert
.assertEquals("Result size for 'ext-cache1' without filter should be 1", Integer
.valueOf(1), taxPager
.getCount());
177 Assert
.assertEquals("Result size for 'ext-cache1' without filter should be 1", 1, taxPager
.getRecords().size());
180 rootNode
= classification
.getRootNode();
181 Pager
<FindByIdentifierDTO
<TaxonBase
>> tbPager
= taxonService
.findByIdentifier(TaxonBase
.class, "ext-1234", null, rootNode
, MatchMode
.EXACT
, false, null, null, null);
182 Assert
.assertEquals("Result size for 'ext' should be 1", Integer
.valueOf(1), tbPager
.getCount());
183 Assert
.assertEquals("Result size for 'ext' should be 1", Integer
.valueOf(1), (Integer
)tbPager
.getRecords().size());
185 tbPager
= taxonService
.findByIdentifier(TaxonBase
.class, "ext-cache1", null, rootNode
, MatchMode
.EXACT
, false, null, null, null);
186 Assert
.assertEquals("Result size for 'ext' should be 0", Integer
.valueOf(0), tbPager
.getCount());
187 Assert
.assertEquals("Result size for 'ext' should be 0", 0, tbPager
.getRecords().size());
190 Pager
<FindByIdentifierDTO
<Synonym
>> synPager
= taxonService
.findByIdentifier(Synonym
.class, "ext-syn", null, rootNode
, MatchMode
.BEGINNING
, false, null, null, null);
191 Assert
.assertEquals("1 Synonym should be linked to the according classification", Integer
.valueOf(1), synPager
.getCount());
192 Assert
.assertEquals("1 Synonym should be linked to the according classification", 1, synPager
.getRecords().size());
199 * @see eu.etaxonomy.cdm.test.integration.CdmIntegrationTest#createTestData()
203 public void createTestDataSet() throws FileNotFoundException
{
204 TermVocabulary
<DefinedTerm
> voc
= vocService
.find(VocabularyEnum
.IdentifierType
.getUuid());
206 DefinedTerm identifierType1
= DefinedTerm
.NewIdentifierTypeInstance(null, "identifierType1", null);
207 voc
.addTerm(identifierType1
);
208 termService
.save(identifierType1
);
209 DefinedTerm identifierType2
= DefinedTerm
.NewIdentifierTypeInstance(null, "identifierType2", null);
210 voc
.addTerm(identifierType2
);
211 termService
.save(identifierType2
);
214 BotanicalName name
= BotanicalName
.NewInstance(Rank
.SPECIES());
215 Taxon tb
= Taxon
.NewInstance(name
, null);
216 Identifier
.NewInstance(tb
, "ext-1234", identifierType1
);
217 Identifier
.NewInstance(name
, "ext-name12", identifierType2
);
218 taxonService
.saveOrUpdate(tb
);
220 Taxon tb2
= Taxon
.NewInstance(null, null);
221 tb2
.setTitleCache("Cached taxon", true);
222 Identifier
.NewInstance(tb2
, "ext-cache1", identifierType2
);
223 taxonService
.saveOrUpdate(tb2
);
225 Classification classification
= Classification
.NewInstance("My classification");
226 classification
.addChildTaxon(tb
, null, null);
227 classificationService
.saveOrUpdate(classification
);
229 tb2
.addSynonymName(null, SynonymRelationshipType
.HOMOTYPIC_SYNONYM_OF());
231 commitAndStartNewTransaction(null);
233 // this will write flat xml file to the same package in the test resources
234 // the test file is named after the test class like: TestClassName.xml
235 writeDbUnitDataSetFile(new String
[] {
236 "TAXONBASE", "TAXONNAMEBASE","IDENTIFIER","TAXONBASE_IDENTIFIER",
237 "TAXONNAMEBASE_IDENTIFIER",
239 "CLASSIFICATION", "TAXONNODE",
242 "SYNONYMRELATIONSHIP"