package org.gbif.checklistbank.service.mybatis.mapper;
import org.gbif.api.model.checklistbank.NameUsageMetrics;
import org.gbif.api.model.checklistbank.ParsedName;
import org.gbif.api.vocabulary.NameType;
import org.gbif.api.vocabulary.Rank;
import org.gbif.api.vocabulary.TaxonomicStatus;
import org.gbif.checklistbank.model.NameUsageWritable;
import java.util.UUID;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
public class NameUsageMetricsMapperIT extends MapperITBase<NameUsageMetricsMapper> {
private static final UUID DATASET_KEY = UUID.randomUUID();
private ParsedNameMapper nameMapper;
private NameUsageMapper usageMapper;
public NameUsageMetricsMapperIT() {
super(NameUsageMetricsMapper.class, false);
}
@Before
public void setupOtherMappers() {
nameMapper = getInstance(ParsedNameMapper.class);
usageMapper = getInstance(NameUsageMapper.class);
}
private int createUsage(String name, Rank rank) {
// name first
ParsedName pn = nameMapper.getByName(name, rank);
if (pn == null) {
pn = new ParsedName();
pn.setType(NameType.SCIENTIFIC);
pn.setScientificName(name);
nameMapper.create(pn);
}
// name usage
NameUsageWritable nu = new NameUsageWritable();
nu.setDatasetKey(DATASET_KEY);
nu.setRank(Rank.SPECIES);
nu.setTaxonomicStatus(TaxonomicStatus.ACCEPTED);
nu.setSynonym(false);
nu.setNameKey(pn.getKey());
nu.setNumDescendants(100);
usageMapper.insert(nu);
return nu.getKey();
}
/**
* Check all enum values have a matching postgres type value.
*/
@Test
public void testInsertAndRead() {
String name = "Abies alba Mill.";
int usageKey = createUsage(name, Rank.SPECIES);
NameUsageMetrics m = new NameUsageMetrics();
m.setKey(usageKey);
m.setNumChildren(1);
m.setNumClass(2);
m.setNumDescendants(3);
m.setNumFamily(4);
m.setNumGenus(5);
m.setNumOrder(6);
m.setNumPhylum(7);
m.setNumSpecies(8);
m.setNumSubgenus(9);
m.setNumSynonyms(10);
mapper.insert(DATASET_KEY, m);
NameUsageMetrics m2 = mapper.get(usageKey);
assertNotEquals(m2, m);
// this should be ignored and taken from the name_usage instead on reads
m.setNumDescendants(100);
assertEquals(m2, m);
}
}