package org.gbif.checklistbank.service.mybatis;
import org.gbif.api.exception.UnparsableException;
import org.gbif.api.model.checklistbank.ParsedName;
import org.gbif.api.service.checklistbank.NameParser;
import org.gbif.api.vocabulary.NamePart;
import org.gbif.api.vocabulary.NameType;
import org.gbif.api.vocabulary.Rank;
import org.gbif.checklistbank.service.ParsedNameService;
import org.gbif.nameparser.GBIFNameParser;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
public class ParsedNameServiceMyBatisIT extends MyBatisServiceITBase<ParsedNameService> {
private NameParser parser = new GBIFNameParser();
public ParsedNameServiceMyBatisIT() {
super(ParsedNameService.class);
}
@Test
public void testCreateOrGet() throws Exception {
ParsedName pn = new ParsedName();
pn.setScientificName("Abies alba Mill.");
pn.setGenusOrAbove("Abies");
pn.setAuthorship("Mill.");
pn.setSpecificEpithet("alba");
pn.setType(NameType.SCIENTIFIC);
assertNull(pn.getKey());
ParsedName pn2 = service.createOrGet(pn);
assertNotNull(pn2.getKey());
assertEquals("Abies alba Mill.", pn2.getScientificName());
assertEquals("Abies alba", pn2.canonicalName());
assertEquals("Abies", pn2.getGenusOrAbove());
assertEquals("alba", pn2.getSpecificEpithet());
assertEquals("Mill.", pn2.getAuthorship());
pn = service.createOrGet(parse("Abies alba Mill."));
assertEquals("Abies alba Mill.", pn.getScientificName());
assertEquals("Abies alba", pn.canonicalName());
assertEquals("Abies", pn.getGenusOrAbove());
assertEquals("alba", pn.getSpecificEpithet());
assertEquals("Mill.", pn.getAuthorship());
pn = service.createOrGet(parse("Abies sp."));
assertEquals("Abies sp.", pn.getScientificName());
assertEquals("Abies spec.", pn.canonicalName());
assertEquals("Abies", pn.getGenusOrAbove());
assertEquals(Rank.SPECIES, pn.getRank());
assertNull(pn.getSpecificEpithet());
pn = service.createOrGet(parse("×Abies Mill."));
assertEquals("×Abies Mill.", pn.getScientificName());
assertEquals("Abies", pn.canonicalName());
assertEquals("Abies", pn.getGenusOrAbove());
assertNull(pn.getRank());
assertNull(pn.getSpecificEpithet());
assertEquals(NamePart.GENERIC, pn.getNotho());
pn = service.createOrGet(parse("? hostilis Gravenhorst, 1829"));
assertEquals("? hostilis Gravenhorst, 1829", pn.getScientificName());
assertEquals("? hostilis", pn.canonicalName());
assertEquals("?", pn.getGenusOrAbove());
assertEquals(Rank.SPECIES, pn.getRank());
assertEquals("hostilis", pn.getSpecificEpithet());
}
private ParsedName parse(String x) {
try {
return parser.parse(x, null);
} catch (UnparsableException e) {
ParsedName pn = new ParsedName();
pn.setScientificName(x);
pn.setType(e.type);
return pn;
}
}
@Test
public void testOrphaned() throws Exception {
assertEquals(1, service.deleteOrphaned());
}
@Test
public void testReparse() throws Exception {
assertEquals(1, service.reparseAll());
}
}