a30f1675f399cb2bc6f29c32ec8c384070b74564
[cdmlib.git] / cdmlib-model / src / test / java / eu / etaxonomy / cdm / format / taxon / TaxonRelationshipFormatterTest.java
1 /**
2 * Copyright (C) 2018 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
5 *
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.
8 */
9 package eu.etaxonomy.cdm.format.taxon;
10
11 import java.util.List;
12
13 import org.junit.Assert;
14 import org.junit.Before;
15 import org.junit.Test;
16
17 import eu.etaxonomy.cdm.model.agent.Person;
18 import eu.etaxonomy.cdm.model.agent.Team;
19 import eu.etaxonomy.cdm.model.common.Language;
20 import eu.etaxonomy.cdm.model.common.VerbatimTimePeriod;
21 import eu.etaxonomy.cdm.model.name.Rank;
22 import eu.etaxonomy.cdm.model.name.TaxonName;
23 import eu.etaxonomy.cdm.model.name.TaxonNameFactory;
24 import eu.etaxonomy.cdm.model.reference.Reference;
25 import eu.etaxonomy.cdm.model.reference.ReferenceFactory;
26 import eu.etaxonomy.cdm.model.taxon.Taxon;
27 import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;
28 import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;
29 import eu.etaxonomy.cdm.strategy.cache.TaggedCacheHelper;
30 import eu.etaxonomy.cdm.strategy.cache.TaggedText;
31 import eu.etaxonomy.cdm.test.TermTestBase;
32
33 /**
34 * Test to test the {@link TaxonRelationshipFormatter}.
35 *
36 * @author a.mueller
37 * @since 14.08.2018
38 */
39 public class TaxonRelationshipFormatterTest extends TermTestBase{
40
41 private static boolean WITHOUT_NAME = true;
42
43 private TaxonRelationship taxonRel;
44 private Reference relSec;
45
46 private Taxon fromTaxon;
47 private TaxonName fromName;
48 private Reference fromSec;
49
50 private Taxon toTaxon;
51 private TaxonName toName;
52 private Reference toSec;
53
54 private TaxonRelationshipFormatter formatter;
55 private boolean inverse;
56
57 private Person toNameAuthor;
58 private Person macFarlane;
59 private Person cheek;
60 private Person toSecAuthor;
61 private List<Language> languages;
62
63 @Before
64 public void setUp() throws Exception {
65 fromName = TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES());
66 fromName.setGenusOrUninomial("Abies");
67 fromName.setSpecificEpithet("alba");
68
69 toName = TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES());
70 toName.setGenusOrUninomial("Pinus");
71 toName.setSpecificEpithet("pinova");
72 toNameAuthor = Person.NewInstance("Mill.", "Miller", "A.", "Andrew");
73 toName.setCombinationAuthorship(toNameAuthor);
74
75 fromSec = ReferenceFactory.newGeneric();
76 fromSec.setTitle("From Sec");
77 String initials = "J.M.";
78 macFarlane = Person.NewInstance(null, "Macfarlane", initials, null);
79 fromSec.setAuthorship(macFarlane);
80 fromSec.setDatePublished(VerbatimTimePeriod.NewVerbatimInstance(1918));
81
82 relSec = ReferenceFactory.newGeneric();
83 relSec.setTitle("From rel reference");
84 initials = null; //"M.R.";
85 cheek = Person.NewInstance(null, "Cheek", initials, null);
86 relSec.setAuthorship(cheek);
87 relSec.setDatePublished(VerbatimTimePeriod.NewVerbatimInstance(1919));
88
89 toSec = ReferenceFactory.newGeneric();
90 toSec.setTitle("To Sec");
91 toSecAuthor = Person.NewTitledInstance("ToSecAuthor");
92 toSec.setAuthorship(toSecAuthor);
93 toSec.setDatePublished(VerbatimTimePeriod.NewVerbatimInstance(1928));
94
95 fromTaxon = Taxon.NewInstance(fromName, fromSec);
96 toTaxon = Taxon.NewInstance(toName, toSec);
97
98 TaxonRelationshipType type = TaxonRelationshipType.MISAPPLIED_NAME_FOR();
99 taxonRel = fromTaxon.addTaxonRelation(toTaxon, type, relSec, "123");
100 inverse = false;
101
102 formatter = TaxonRelationshipFormatter.INSTANCE();
103
104 languages = null;
105 }
106
107 @Test
108 public void testGetTaggedTextMisappliedName() {
109
110 inverse = true;
111 String inverseSymbol = TaxonRelationshipType.MISAPPLIED_NAME_FOR().getInverseSymbol();
112 String symbol = TaxonRelationshipType.MISAPPLIED_NAME_FOR().getSymbol();
113
114 List<TaggedText> tags = formatter.getTaggedText(taxonRel, inverse, languages);
115 String str = TaggedCacheHelper.createString(tags);
116 Assert.assertEquals(inverseSymbol + " \"Abies alba\" sensu Macfarlane 1918, err. sec. Cheek 1919: 123", str);
117
118 //inverse
119 tags = formatter.getTaggedText(taxonRel, !inverse, languages);
120 str = TaggedCacheHelper.createString(tags);
121 Assert.assertEquals(symbol + " Pinus pinova Mill. sec. ToSecAuthor 1928, rel. sec. Cheek 1919: 123", str);
122
123 //auctores
124 fromTaxon.setAppendedPhrase("auctores");
125 tags = formatter.getTaggedText(taxonRel, inverse, languages);
126 str = TaggedCacheHelper.createString(tags);
127 Assert.assertEquals(inverseSymbol + " \"Abies alba\" auctores sensu Macfarlane 1918, err. sec. Cheek 1919: 123", str);
128
129 fromTaxon.setSec(null);
130 tags = formatter.getTaggedText(taxonRel, inverse, languages);
131 str = TaggedCacheHelper.createString(tags);
132 Assert.assertEquals(inverseSymbol + " \"Abies alba\" auctores, err. sec. Cheek 1919: 123", str);
133
134 fromTaxon.setAppendedPhrase("");
135 tags = formatter.getTaggedText(taxonRel, inverse, languages);
136 str = TaggedCacheHelper.createString(tags);
137 Assert.assertEquals(inverseSymbol + " \"Abies alba\" auct., err. sec. Cheek 1919: 123", str);
138
139 fromTaxon.setDoubtful(true);
140 tags = formatter.getTaggedText(taxonRel, inverse, languages);
141 str = TaggedCacheHelper.createString(tags);
142 // System.out.println(str);
143 Assert.assertEquals(inverseSymbol + " ?\u202F\"Abies alba\" auct., err. sec. Cheek 1919: 123", str);
144 }
145
146 @Test
147 public void testGetTaggedTextMisappliedNameProParte() {
148
149 inverse = true; //this is the default visible on taxon pages
150 TaxonRelationshipType type = TaxonRelationshipType.PRO_PARTE_MISAPPLIED_NAME_FOR();
151 String manInverseSymbol = TaxonRelationshipType.MISAPPLIED_NAME_FOR().getInverseSymbol();
152 String symbol = type.getSymbol();
153 taxonRel.setType(type);
154
155 List<TaggedText> tags = formatter.getTaggedText(taxonRel, inverse, languages);
156 String str = TaggedCacheHelper.createString(tags);
157 //#10082
158 Assert.assertEquals("We split the inverse symbol here", manInverseSymbol + " \"Abies alba\" sensu Macfarlane 1918, p.p., err. sec. Cheek 1919: 123", str);
159
160 //direct (we do not (yet) split the symbol
161 tags = formatter.getTaggedText(taxonRel, !inverse, languages);
162 str = TaggedCacheHelper.createString(tags);
163 Assert.assertEquals(symbol + " Pinus pinova Mill. sec. ToSecAuthor 1928, rel. sec. Cheek 1919: 123", str);
164
165 //partial
166 type = TaxonRelationshipType.PARTIAL_MISAPPLIED_NAME_FOR();
167 symbol = type.getSymbol();
168 taxonRel.setType(type);
169
170 tags = formatter.getTaggedText(taxonRel, inverse, languages);
171 str = TaggedCacheHelper.createString(tags);
172 //#10082
173 Assert.assertEquals("We split the inverse symbol here", manInverseSymbol + " \"Abies alba\" sensu Macfarlane 1918, part., err. sec. Cheek 1919: 123", str);
174
175
176 }
177
178 @Test
179 public void testGetTaggedTextConceptRelations() {
180
181 inverse = false;
182
183 TaxonRelationshipType relType = TaxonRelationshipType.INCLUDES();
184
185 final String SYMBOL = relType.getSymbol();
186
187 taxonRel.setType(relType);
188 List<TaggedText> tags = formatter.getTaggedText(taxonRel, inverse, languages);
189 String str = TaggedCacheHelper.createString(tags);
190 Assert.assertEquals(SYMBOL + " Pinus pinova Mill. sec. ToSecAuthor 1928, rel. sec. Cheek 1919: 123", str);
191
192 tags = formatter.getTaggedText(taxonRel, !inverse, languages);
193 str = TaggedCacheHelper.createString(tags);
194 Assert.assertEquals(relType.getInverseSymbol() + " Abies alba sec. Macfarlane 1918, rel. sec. Cheek 1919: 123", str);
195
196 toTaxon.setAppendedPhrase("sensu stricto");
197 tags = formatter.getTaggedText(taxonRel, inverse, languages);
198 str = TaggedCacheHelper.createString(tags);
199 Assert.assertEquals(SYMBOL + " Pinus pinova Mill. sensu stricto sec. ToSecAuthor 1928, rel. sec. Cheek 1919: 123", str);
200
201 toTaxon.setSec(null);
202 tags = formatter.getTaggedText(taxonRel, inverse, languages);
203 str = TaggedCacheHelper.createString(tags);
204 Assert.assertEquals(SYMBOL + " Pinus pinova Mill. sensu stricto, rel. sec. Cheek 1919: 123", str);
205
206 toTaxon.setAppendedPhrase("");
207 tags = formatter.getTaggedText(taxonRel, inverse, languages);
208 str = TaggedCacheHelper.createString(tags);
209 Assert.assertEquals(SYMBOL + " Pinus pinova Mill. sec. ???, rel. sec. Cheek 1919: 123", str);
210
211 taxonRel.setDoubtful(true);
212 toTaxon.setAppendedPhrase("");
213 tags = formatter.getTaggedText(taxonRel, inverse, languages);
214 str = TaggedCacheHelper.createString(tags);
215 Assert.assertEquals("?" + SYMBOL + " Pinus pinova Mill. sec. ???, rel. sec. Cheek 1919: 123", str);
216 }
217
218 @Test
219 public void testGetTaggedTextSynonymRelations() {
220
221 inverse = false;
222
223 TaxonRelationshipType type = TaxonRelationshipType.PRO_PARTE_SYNONYM_FOR();
224 final String symbol = type.getSymbol();
225
226
227 taxonRel.setType(type);
228 List<TaggedText> tags = formatter.getTaggedText(taxonRel, inverse, languages);
229 String str = TaggedCacheHelper.createString(tags);
230 Assert.assertEquals(symbol + " Pinus pinova Mill. sec. ToSecAuthor 1928, syn. sec. Cheek 1919: 123", str);
231
232 tags = formatter.getTaggedText(taxonRel, !inverse, languages);
233 str = TaggedCacheHelper.createString(tags);
234 Assert.assertEquals(type.getInverseSymbol() + " Abies alba sec. Macfarlane 1918, syn. sec. Cheek 1919: 123", str);
235
236 toTaxon.setAppendedPhrase("sensu lato");
237 tags = formatter.getTaggedText(taxonRel, inverse, languages);
238 str = TaggedCacheHelper.createString(tags);
239 Assert.assertEquals(symbol + " Pinus pinova Mill. sensu lato sec. ToSecAuthor 1928, syn. sec. Cheek 1919: 123", str);
240
241
242 toTaxon.setSec(null);
243 tags = formatter.getTaggedText(taxonRel, inverse, languages);
244 str = TaggedCacheHelper.createString(tags);
245 Assert.assertEquals(symbol + " Pinus pinova Mill. sensu lato, syn. sec. Cheek 1919: 123", str);
246
247 toTaxon.setAppendedPhrase("");
248 tags = formatter.getTaggedText(taxonRel, inverse, languages);
249 str = TaggedCacheHelper.createString(tags);
250 Assert.assertEquals(symbol + " Pinus pinova Mill. sec. ???, syn. sec. Cheek 1919: 123", str);
251
252 }
253
254 @Test
255 public void testGetFamilyNames() {
256
257 //Test start condition with single person
258 List<TaggedText> tags = formatter.getTaggedText(taxonRel, inverse, languages);
259 String str = TaggedCacheHelper.createString(tags);
260 Assert.assertFalse("Formatted text should not contain the team correctly formatted", str.contains("Macfarlane & Cheek"));
261
262 //use team
263 Team secRelTeam = Team.NewInstance();
264 secRelTeam.addTeamMember(macFarlane);
265 secRelTeam.addTeamMember(cheek);
266 relSec.setAuthorship(secRelTeam);
267
268 tags = formatter.getTaggedText(taxonRel, inverse, languages);
269 str = TaggedCacheHelper.createString(tags);
270 // System.out.println(str);
271 Assert.assertTrue(str.contains("rel. sec. Macfarlane & Cheek 1919"));
272
273 //add third member
274 secRelTeam.addTeamMember(toSecAuthor);
275 tags = formatter.getTaggedText(taxonRel, inverse, languages);
276 str = TaggedCacheHelper.createString(tags);
277 // System.out.println(str);
278 Assert.assertTrue(str.contains("rel. sec. Macfarlane & al. 1919"));
279
280 //add et al.
281 secRelTeam.setHasMoreMembers(true);
282 tags = formatter.getTaggedText(taxonRel, inverse, languages);
283 str = TaggedCacheHelper.createString(tags);
284 // System.out.println(str);
285 Assert.assertTrue(str.contains("rel. sec. Macfarlane & al. 1919"));
286
287 }
288
289 @Test
290 public void testGetTaggedTextMisappliedNameWithoutName() {
291
292 inverse = true;
293 String inverseSymbol = TaxonRelationshipType.MISAPPLIED_NAME_FOR().getInverseSymbol();
294 String symbol = TaxonRelationshipType.MISAPPLIED_NAME_FOR().getSymbol();
295
296 List<TaggedText> tags = formatter.getTaggedText(taxonRel, inverse, languages, WITHOUT_NAME);
297 String str = TaggedCacheHelper.createString(tags);
298 Assert.assertEquals(inverseSymbol + " sensu Macfarlane 1918, err. sec. Cheek 1919: 123", str);
299
300 //inverse
301 tags = formatter.getTaggedText(taxonRel, !inverse, languages, WITHOUT_NAME);
302 str = TaggedCacheHelper.createString(tags);
303 Assert.assertEquals(symbol + " sec. ToSecAuthor 1928, rel. sec. Cheek 1919: 123", str);
304
305 //auctores
306 fromTaxon.setAppendedPhrase("auctores");
307 tags = formatter.getTaggedText(taxonRel, inverse, languages, WITHOUT_NAME);
308 str = TaggedCacheHelper.createString(tags);
309 Assert.assertEquals(inverseSymbol + " auctores sensu Macfarlane 1918, err. sec. Cheek 1919: 123", str);
310
311 fromTaxon.setSec(null);
312 fromTaxon.setAppendedPhrase("");
313 tags = formatter.getTaggedText(taxonRel, inverse, languages, WITHOUT_NAME);
314 str = TaggedCacheHelper.createString(tags);
315 Assert.assertEquals(inverseSymbol + " auct., err. sec. Cheek 1919: 123", str);
316
317 fromTaxon.setDoubtful(true);
318 tags = formatter.getTaggedText(taxonRel, inverse, languages, WITHOUT_NAME);
319 str = TaggedCacheHelper.createString(tags);
320 // System.out.println(str);
321 Assert.assertEquals(inverseSymbol + " ?\u202F auct., err. sec. Cheek 1919: 123", str);
322 }
323
324 @Test
325 public void testGetTaggedTextConceptRelationsWithoutName() {
326
327 inverse = false;
328
329 TaxonRelationshipType relType = TaxonRelationshipType.INCLUDES();
330
331 final String SYMBOL = relType.getSymbol();
332
333 taxonRel.setType(relType);
334 List<TaggedText> tags = formatter.getTaggedText(taxonRel, inverse, languages, WITHOUT_NAME);
335 String str = TaggedCacheHelper.createString(tags);
336 Assert.assertEquals(SYMBOL + " sec. ToSecAuthor 1928, rel. sec. Cheek 1919: 123", str);
337
338 tags = formatter.getTaggedText(taxonRel, !inverse, languages, WITHOUT_NAME);
339 str = TaggedCacheHelper.createString(tags);
340 Assert.assertEquals(relType.getInverseSymbol() + " sec. Macfarlane 1918, rel. sec. Cheek 1919: 123", str);
341
342 toTaxon.setAppendedPhrase("sensu stricto");
343 tags = formatter.getTaggedText(taxonRel, inverse, languages, WITHOUT_NAME);
344 str = TaggedCacheHelper.createString(tags);
345 Assert.assertEquals(SYMBOL + " sensu stricto sec. ToSecAuthor 1928, rel. sec. Cheek 1919: 123", str);
346
347 toTaxon.setSec(null);
348 toTaxon.setAppendedPhrase("");
349 tags = formatter.getTaggedText(taxonRel, inverse, languages, WITHOUT_NAME);
350 str = TaggedCacheHelper.createString(tags);
351 Assert.assertEquals(SYMBOL + " sec. ???, rel. sec. Cheek 1919: 123", str);
352
353 taxonRel.setDoubtful(true);
354 toTaxon.setAppendedPhrase("");
355 tags = formatter.getTaggedText(taxonRel, inverse, languages, WITHOUT_NAME);
356 str = TaggedCacheHelper.createString(tags);
357 Assert.assertEquals("?" + SYMBOL + " sec. ???, rel. sec. Cheek 1919: 123", str);
358 }
359 }