package org.gbif.checklistbank.service.mybatis.mapper; import org.gbif.api.model.checklistbank.NameUsage; import org.gbif.api.model.checklistbank.ParsedName; import org.gbif.api.vocabulary.NameType; import org.gbif.api.vocabulary.NameUsageIssue; import org.gbif.api.vocabulary.NomenclaturalStatus; import org.gbif.api.vocabulary.Origin; import org.gbif.api.vocabulary.Rank; import org.gbif.api.vocabulary.TaxonomicStatus; import org.gbif.checklistbank.model.NameUsageWritable; import java.util.List; import java.util.Set; import java.util.UUID; import org.junit.Before; import org.junit.Test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; public class NameUsageMapperIT extends MapperITBase<NameUsageMapper> { private static final UUID DATASET_KEY = UUID.randomUUID(); private ParsedNameMapper parsedNameMapper; public NameUsageMapperIT() { super(NameUsageMapper.class, false); } @Before public void initNameMapper() throws Exception { parsedNameMapper = getInstance(ParsedNameMapper.class); } private int createName(String name, Rank rank) { ParsedName pn = new ParsedName(); pn.setType(NameType.SCIENTIFIC); pn.setScientificName(name); pn.setRank(rank); parsedNameMapper.create(pn); return pn.getKey(); } private void deleteName(String name, Rank rank) { ParsedName pn = parsedNameMapper.getByName(name, rank); if (pn != null) { parsedNameMapper.delete(pn.getKey()); } } /** * Check all enum values have a matching postgres type value. */ @Test public void testEnums() { String name = "Abies alba Mill."; deleteName(name, Rank.SPECIES); int nameKey = createName(name, Rank.SPECIES); NameUsageWritable u = new NameUsageWritable(); u.setDatasetKey(DATASET_KEY); u.setNameKey(nameKey); for (Rank r : Rank.values()) { u.setKey(null); u.setRank(r); mapper.insert(u); } for (Origin o : Origin.values()) { u.setKey(null); u.setOrigin(o); mapper.insert(u); } for (TaxonomicStatus s : TaxonomicStatus.values()) { u.setKey(null); u.setTaxonomicStatus(s); mapper.insert(u); } for (NomenclaturalStatus s : NomenclaturalStatus.values()) { u.setKey(null); u.getNomenclaturalStatus().add(s); mapper.insert(u); } for (NameUsageIssue s : NameUsageIssue.values()) { u.setKey(null); u.getIssues().add(s); mapper.insert(u); } } /** * Check all enum values have a matching postgres type value. */ @Test public void testListUsageRange() { List<NameUsage> list = mapper.listRange(0, 1000); } /** * Check all enum values have a matching postgres type value. */ @Test public void testInsertWithKey() { String name = "Abies negra Mill."; deleteName(name, Rank.SPECIES); int nameKey = createName(name, Rank.SPECIES); NameUsageWritable u = new NameUsageWritable(); u.setDatasetKey(DATASET_KEY); u.setNameKey(nameKey); u.setRank(Rank.SPECIES); mapper.insert(u); assertEquals(100000000, (int) u.getKey()); u.setKey(110); mapper.insert(u); assertEquals(110, (int) u.getKey()); u.setKey(null); mapper.insert(u); assertEquals(100000001, (int) u.getKey()); } /** * Check all enum values have a matching postgres type value. */ @Test public void testGetUpdateIssues() { String name = "Abies Mill."; deleteName(name, Rank.GENUS); int nameKey = createName(name, Rank.GENUS); NameUsageWritable u = new NameUsageWritable(); u.setDatasetKey(DATASET_KEY); u.setNameKey(nameKey); u.setRank(Rank.SPECIES); mapper.insert(u); final int key = u.getKey(); Set<NameUsageIssue> issues = mapper.getIssues(key).getIssues(); assertTrue(issues.isEmpty()); assertEquals((Integer) key, mapper.getIssues(key).getKey()); issues.add(NameUsageIssue.BACKBONE_MATCH_NONE); mapper.updateIssues(key, issues); assertEquals(issues, mapper.getIssues(key).getIssues()); issues.remove(NameUsageIssue.BACKBONE_MATCH_NONE); mapper.updateIssues(key, issues); assertTrue(mapper.getIssues(key).getIssues().isEmpty()); } }