001/*
002 * Copyright 2020 Global Biodiversity Information Facility (GBIF)
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 *     http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016package org.gbif.api.model.checklistbank;
017
018import org.gbif.api.model.common.Identifier;
019import org.gbif.api.vocabulary.IdentifierType;
020import org.gbif.api.vocabulary.NameUsageIssue;
021import org.gbif.api.vocabulary.Rank;
022import org.gbif.api.vocabulary.TaxonomicStatus;
023import org.gbif.api.vocabulary.ThreatStatus;
024
025import java.net.URI;
026import java.util.ArrayList;
027import java.util.LinkedList;
028import java.util.List;
029import java.util.Queue;
030import java.util.UUID;
031
032import org.junit.jupiter.api.Test;
033
034import static org.junit.jupiter.api.Assertions.assertEquals;
035import static org.junit.jupiter.api.Assertions.assertFalse;
036import static org.junit.jupiter.api.Assertions.assertNotEquals;
037import static org.junit.jupiter.api.Assertions.assertNotNull;
038import static org.junit.jupiter.api.Assertions.assertNull;
039import static org.junit.jupiter.api.Assertions.assertTrue;
040
041/**
042 * This tests the {@link org.gbif.api.model.checklistbank.NameUsageContainer}.
043 */
044public class NameUsageContainerTest {
045//
046//  @Test
047//  public void testConstructor() {
048//    final UUID checklistKey = UUID.randomUUID();
049//    NameUsage src = new NameUsage();
050//    src.setKey(1234);
051//    src.setDatasetKey(checklistKey);
052//    src.setKingdom("Animalia");
053//    src.setScientificName("Puma concolor Linné");
054//    src.setReferences(URI.create("http://wisdom.org/1234"));
055//    src.setSourceTaxonKey(12345);
056//    src.getIssues().add(NameUsageIssue.ACCEPTED_NAME_MISSING);
057//    src.getIssues().add(NameUsageIssue.BACKBONE_MATCH_NONE);
058//    src.getIssues().add(NameUsageIssue.BASIONYM_AUTHOR_MISMATCH);
059//
060//    NameUsageContainer nu = new NameUsageContainer(src);
061//    Identifier id1 = new Identifier();
062//    id1.setIdentifier("1234");
063//    id1.setType(IdentifierType.GBIF_PORTAL);
064//    nu.getIdentifiers().add(id1);
065//
066//    assertEquals(checklistKey, nu.getDatasetKey());
067//    assertEquals((Integer) 1234, nu.getKey());
068//    assertEquals((Integer) 12345, nu.getSourceTaxonKey());
069//    assertNotNull(nu.getReferences());
070//    assertEquals("http://wisdom.org/1234", nu.getReferences().toString());
071//    assertEquals("Animalia", nu.getKingdom());
072//    assertEquals("Puma concolor Linné", nu.getScientificName());
073//    assertEquals(1, nu.getIdentifiers().size());
074//
075//    assertEquals("1234", nu.getIdentifiers().get(0).getIdentifier());
076//    assertEquals(IdentifierType.GBIF_PORTAL, nu.getIdentifiers().get(0).getType());
077//
078//    assertNull(nu.getAccepted());
079//    assertNull(nu.getAcceptedKey());
080//    assertNull(nu.getAccordingTo());
081//    assertNull(nu.getNameType());
082//    assertNull(nu.getKingdomKey());
083//
084//    assertEquals(0, nu.getMedia().size());
085//    assertEquals(0, nu.getDescriptions().size());
086//    assertEquals(0, nu.getDistributions().size());
087//    assertEquals(0, nu.getReferenceList().size());
088//    assertEquals(3, nu.getIssues().size());
089//  }
090//
091//  @Test
092//  public void testEquals() {
093//    Identifier id1 = new Identifier();
094//    id1.setIdentifier("http://www.example.org");
095//    id1.setType(IdentifierType.URL);
096//
097//    NameUsageContainer nu1 = new NameUsageContainer();
098//    nu1.setKey(123);
099//    nu1.getIdentifiers().add(id1);
100//    nu1.setKingdom("Animalia");
101//
102//    NameUsageContainer nu2 = new NameUsageContainer();
103//    nu2.setKey(123);
104//    nu2.getIdentifiers().add(id1);
105//    nu2.setKingdom("Animalia");
106//
107//    NameUsageMediaObject ru1 = new NameUsageMediaObject();
108//    ru1.setTitle("Puma concolor");
109//    ru1.setSourceTaxonKey(111);
110//    NameUsageMediaObject ru2 = new NameUsageMediaObject();
111//    ru2.setTitle("Puma concolor");
112//    ru2.setSourceTaxonKey(111);
113//
114//    List<NameUsageMediaObject> lru1 = new ArrayList<>();
115//    lru1.add(ru1);
116//    List<NameUsageMediaObject> lru2 = new ArrayList<>();
117//    lru2.add(ru2);
118//
119//    nu1.setMedia(lru1);
120//    nu2.setMedia(lru2);
121//
122//    assertEquals(nu1, nu2);
123//
124//    nu2.setKey(124);
125//
126//    assertNotEquals(nu2, nu1);
127//  }
128//
129//  @Test
130//  public void testEqualsNonNullity() {
131//    NameUsageContainer nu1 = new NameUsageContainer();
132//    assertNotEquals(nu1, null);
133//  }
134//
135//  @Test
136//  public void testEqualsReflexivity() {
137//    NameUsageContainer nu = new NameUsageContainer();
138//    assertEquals(nu, nu);
139//
140//    nu = new NameUsageContainer();
141//    assertEquals(nu, nu);
142//  }
143//
144//  @Test
145//  public void testEqualsSymmetry() {
146//    NameUsageContainer nu1 = new NameUsageContainer();
147//    NameUsageContainer nu2 = new NameUsageContainer();
148//
149//    nu1.setKey(123);
150//    nu2.setKey(123);
151//
152//    assertEquals(nu1, nu2);
153//    assertEquals(nu2, nu1);
154//
155//    nu1.setKey(1234);
156//    assertNotEquals(nu2, nu1);
157//    assertNotEquals(nu1, nu2);
158//  }
159//
160//  @Test
161//  public void testExtinct() {
162//    NameUsageContainer nu = new NameUsageContainer();
163//    nu.setKey(6);
164//    assertNull(nu.isExtinct());
165//
166//    SpeciesProfile sp = new SpeciesProfile();
167//    sp.setExtinct(true);
168//    nu.getSpeciesProfiles().add(sp);
169//    assertTrue(nu.isExtinct());
170//    sp.setExtinct(false);
171//    assertFalse(nu.isExtinct());
172//    sp.setExtinct(null);
173//    assertNull(nu.isExtinct());
174//
175//    nu.getSpeciesProfiles().clear();
176//
177//    for (int i = 1; i < 10; i++) {
178//      sp = new SpeciesProfile();
179//      sp.setExtinct(i % 2 == 0);
180//      nu.getSpeciesProfiles().add(sp);
181//    }
182//
183//    assertEquals(9, nu.getSpeciesProfiles().size());
184//    assertFalse(nu.isExtinct());
185//
186//    sp = new SpeciesProfile();
187//    sp.setExtinct(true);
188//    nu.getSpeciesProfiles().add(sp);
189//    assertEquals(10, nu.getSpeciesProfiles().size());
190//    assertTrue(nu.isExtinct());
191//  }
192//
193//  @Test
194//  public void testHabitats() {
195//    NameUsageContainer nu = new NameUsageContainer();
196//    nu.setKey(6);
197//    for (int i = 1; i < 10; i++) {
198//      SpeciesProfile sp = new SpeciesProfile();
199//      sp.setHabitat("Habitat " + i);
200//      nu.getSpeciesProfiles().add(sp);
201//    }
202//
203//    assertEquals(9, nu.getSpeciesProfiles().size());
204//    assertEquals(9, nu.getHabitats().size());
205//
206//    SpeciesProfile sp = new SpeciesProfile();
207//    sp.setHabitat("Habitat 5");
208//    nu.getSpeciesProfiles().add(sp);
209//    assertEquals(10, nu.getSpeciesProfiles().size());
210//    assertEquals(9, nu.getHabitats().size());
211//  }
212//
213//  @Test
214//  public void testHigherClassificationMap() {
215//    NameUsageContainer nu = new NameUsageContainer();
216//    nu.setKey(6);
217//    nu.setScientificName("Vicia faba L.");
218//    nu.setParentKey(10);
219//    nu.setParent("Vicia subgen. Vicia");
220//    nu.setRank(Rank.SPECIES);
221//    nu.setKingdomKey(1);
222//    nu.setKingdom("Plantae");
223//    nu.setGenus("Vicia");
224//    nu.setGenusKey(3);
225//    nu.setOrder("Fabales");
226//    nu.setOrderKey(4);
227//    nu.setSpecies("Vicia faba");
228//    nu.setSpeciesKey(6);
229//    nu.setPhylum("Magnoliophyta");
230//    nu.setPhylumKey(5);
231//
232//    assertEquals(5, nu.getHigherClassificationMap().size());
233//    assertTrue(nu.getHigherClassificationMap().containsKey(10));
234//    assertFalse(nu.getHigherClassificationMap().containsKey(6));
235//
236//    Queue<Integer> expectedKeyOrder = new LinkedList<>();
237//    expectedKeyOrder.add(1);
238//    expectedKeyOrder.add(5);
239//    expectedKeyOrder.add(4);
240//    expectedKeyOrder.add(3);
241//    expectedKeyOrder.add(10);
242//
243//    for (Object key : nu.getHigherClassificationMap().keySet()) {
244//      assertEquals(expectedKeyOrder.poll(), key);
245//    }
246//    assertTrue(expectedKeyOrder.isEmpty());
247//  }
248//
249//  @Test
250//  public void testHigherClassificationMapWithRegularParent() {
251//    NameUsageContainer nu = new NameUsageContainer();
252//    nu.setKey(6);
253//    nu.setScientificName("Vicia faba L.");
254//    nu.setParentKey(3);
255//    nu.setParent("Vicia");
256//    nu.setRank(Rank.SPECIES);
257//    nu.setKingdomKey(1);
258//    nu.setKingdom("Plantae");
259//    nu.setGenus("Vicia");
260//    nu.setGenusKey(3);
261//    nu.setOrder("Fabales");
262//    nu.setOrderKey(4);
263//    nu.setSpecies("Vicia faba");
264//    nu.setSpeciesKey(6);
265//    nu.setPhylum("Magnoliophyta");
266//    nu.setPhylumKey(5);
267//
268//    assertEquals(4, nu.getHigherClassificationMap().size());
269//    assertTrue(nu.getHigherClassificationMap().containsKey(3));
270//
271//    Queue<Integer> expectedKeyOrder = new LinkedList<>();
272//    expectedKeyOrder.add(1);
273//    expectedKeyOrder.add(5);
274//    expectedKeyOrder.add(4);
275//    expectedKeyOrder.add(3);
276//
277//    for (Object key : nu.getHigherClassificationMap().keySet()) {
278//      assertEquals(expectedKeyOrder.poll(), key);
279//    }
280//    assertTrue(expectedKeyOrder.isEmpty());
281//  }
282//
283//  @Test
284//  public void testMarine() {
285//    NameUsageContainer nu = new NameUsageContainer();
286//    nu.setKey(6);
287//    assertNull(nu.isMarine());
288//
289//    SpeciesProfile sp = new SpeciesProfile();
290//    sp.setMarine(true);
291//    nu.getSpeciesProfiles().add(sp);
292//    assertTrue(nu.isMarine());
293//    sp.setMarine(false);
294//    assertFalse(nu.isMarine());
295//    sp.setMarine(null);
296//    assertNull(nu.isMarine());
297//
298//    nu.getSpeciesProfiles().clear();
299//
300//    for (int i = 1; i < 10; i++) {
301//      sp = new SpeciesProfile();
302//      sp.setMarine(i % 2 == 0);
303//      nu.getSpeciesProfiles().add(sp);
304//    }
305//
306//    assertEquals(9, nu.getSpeciesProfiles().size());
307//    assertFalse(nu.isMarine());
308//
309//    sp = new SpeciesProfile();
310//    sp.setMarine(true);
311//    nu.getSpeciesProfiles().add(sp);
312//    assertEquals(10, nu.getSpeciesProfiles().size());
313//    assertTrue(nu.isMarine());
314//  }
315//
316//  @Test
317//  public void testTaxonomicStatus() {
318//    NameUsage nu = new NameUsage();
319//    nu.setKey(6);
320//    nu.setScientificName("Vicia faba L.");
321//    nu.setTaxonomicStatus(null);
322//    assertNull(nu.getTaxonomicStatus());
323//    assertFalse(nu.isSynonym());
324//
325//    nu.setTaxonomicStatus(TaxonomicStatus.PROPARTE_SYNONYM);
326//    assertEquals(TaxonomicStatus.PROPARTE_SYNONYM, nu.getTaxonomicStatus());
327//    assertTrue(nu.isSynonym());
328//
329//    nu.setTaxonomicStatus(TaxonomicStatus.SYNONYM);
330//    assertEquals(TaxonomicStatus.SYNONYM, nu.getTaxonomicStatus());
331//    assertTrue(nu.isSynonym());
332//
333//    nu.setTaxonomicStatus(TaxonomicStatus.DOUBTFUL);
334//    assertEquals(TaxonomicStatus.DOUBTFUL, nu.getTaxonomicStatus());
335//    assertFalse(nu.isSynonym());
336//
337//    nu.setProParteKey(432);
338//    assertTrue(nu.isProParte());
339//
340//    nu.setTaxonomicStatus(TaxonomicStatus.HETEROTYPIC_SYNONYM);
341//    assertEquals(TaxonomicStatus.HETEROTYPIC_SYNONYM, nu.getTaxonomicStatus());
342//    assertTrue(nu.isSynonym());
343//  }
344//
345//  @Test
346//  public void testTerrestrial() {
347//    NameUsageContainer nu = new NameUsageContainer();
348//    nu.setKey(6);
349//    assertNull(nu.isTerrestrial());
350//
351//    SpeciesProfile sp = new SpeciesProfile();
352//    sp.setTerrestrial(true);
353//    nu.getSpeciesProfiles().add(sp);
354//    assertTrue(nu.isTerrestrial());
355//    sp.setTerrestrial(false);
356//    assertFalse(nu.isTerrestrial());
357//    sp.setTerrestrial(null);
358//    assertNull(nu.isTerrestrial());
359//
360//    nu.getSpeciesProfiles().clear();
361//
362//    for (int i = 1; i < 10; i++) {
363//      sp = new SpeciesProfile();
364//      sp.setTerrestrial(i % 2 == 0);
365//      nu.getSpeciesProfiles().add(sp);
366//    }
367//
368//    assertEquals(9, nu.getSpeciesProfiles().size());
369//    assertFalse(nu.isTerrestrial());
370//
371//    sp = new SpeciesProfile();
372//    sp.setTerrestrial(true);
373//    nu.getSpeciesProfiles().add(sp);
374//    assertEquals(10, nu.getSpeciesProfiles().size());
375//    assertTrue(nu.isTerrestrial());
376//  }
377//
378//  @Test
379//  public void testFreshwater() {
380//    NameUsageContainer nu = new NameUsageContainer();
381//    nu.setKey(6);
382//    assertNull(nu.isFreshwater());
383//
384//    SpeciesProfile sp = new SpeciesProfile();
385//    sp.setFreshwater(true);
386//    nu.getSpeciesProfiles().add(sp);
387//    assertTrue(nu.isFreshwater());
388//    sp.setFreshwater(false);
389//    assertFalse(nu.isFreshwater());
390//    sp.setFreshwater(null);
391//    assertNull(nu.isFreshwater());
392//
393//    nu.getSpeciesProfiles().clear();
394//
395//    for (int i = 1; i < 10; i++) {
396//      sp = new SpeciesProfile();
397//      sp.setFreshwater(i % 2 == 0);
398//      nu.getSpeciesProfiles().add(sp);
399//    }
400//
401//    assertEquals(9, nu.getSpeciesProfiles().size());
402//    assertFalse(nu.isFreshwater());
403//
404//    sp = new SpeciesProfile();
405//    sp.setFreshwater(true);
406//    nu.getSpeciesProfiles().add(sp);
407//    assertEquals(10, nu.getSpeciesProfiles().size());
408//    assertTrue(nu.isFreshwater());
409//  }
410//
411//  @Test
412//  public void testThreats() {
413//    NameUsageContainer nu = new NameUsageContainer();
414//    nu.setKey(6);
415//
416//    assertEquals(0, nu.getDistributions().size());
417//    assertEquals(0, nu.getThreatStatus().size());
418//
419//    Distribution d = new Distribution();
420//    d.setThreatStatus(ThreatStatus.ENDANGERED);
421//    nu.getDistributions().add(d);
422//    assertEquals(1, nu.getDistributions().size());
423//    assertEquals(1, nu.getThreatStatus().size());
424//    assertEquals(ThreatStatus.ENDANGERED, nu.getThreatStatus().iterator().next());
425//
426//    d = new Distribution();
427//    d.setThreatStatus(ThreatStatus.ENDANGERED);
428//    nu.getDistributions().add(d);
429//    assertEquals(2, nu.getDistributions().size());
430//    assertEquals(1, nu.getThreatStatus().size());
431//    assertEquals(ThreatStatus.ENDANGERED, nu.getThreatStatus().iterator().next());
432//
433//    d = new Distribution();
434//    d.setThreatStatus(ThreatStatus.CRITICALLY_ENDANGERED);
435//    nu.getDistributions().add(d);
436//    assertEquals(3, nu.getDistributions().size());
437//    assertEquals(2, nu.getThreatStatus().size());
438//    assertEquals(ThreatStatus.ENDANGERED, nu.getThreatStatus().iterator().next());
439//  }
440
441}