package org.gbif.checklistbank.index.backfill; import com.google.common.collect.Lists; import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.SolrServerException; import org.apache.solr.client.solrj.embedded.EmbeddedSolrServer; import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.common.SolrDocumentList; import org.gbif.api.model.checklistbank.Description; import org.gbif.api.model.checklistbank.search.NameUsageSearchResult; import org.gbif.api.vocabulary.Habitat; import org.gbif.api.vocabulary.Origin; import org.gbif.api.vocabulary.Rank; import org.gbif.checklistbank.index.NameUsageDocConverter; import org.gbif.checklistbank.service.mybatis.postgres.ClbDbTestRule; import org.junit.BeforeClass; import org.junit.Test; import java.io.IOException; import static org.junit.Assert.*; /** * Test the index generation. */ public class SolrBackfillIT { private static SolrTestSetup setup; @BeforeClass public static void setup() throws Exception { // creates squirrels db and solr index & server using its own injector setup = new SolrTestSetup(ClbDbTestRule.squirrels()); setup.setup(); } private EmbeddedSolrServer solr() { return setup.solr(); } @Test public void testIndexBuild() throws IOException, SolrServerException, InterruptedException { NameUsageDocConverter converter = new NameUsageDocConverter(); // test index and make sure we use the squirrels test data // number of all records SolrQuery query = new SolrQuery(); query.setQuery("*:*"); QueryResponse rsp = solr().query(query); assertEquals(46l, rsp.getResults().getNumFound()); // number of all source records query = new SolrQuery(); query.setQuery("origin_key:"+ Origin.SOURCE.ordinal()); rsp = solr().query(query); assertEquals(46l, rsp.getResults().getNumFound()); // vernacular name with umlaut query = new SolrQuery(); query.setQuery("vernacular_name:\"Europäisches Eichhörnchen\""); rsp = solr().query(query); SolrDocumentList docs = rsp.getResults(); assertEquals(1, docs.size()); // single species query = new SolrQuery(); query.setQuery("canonical_name:\"Sciurillus pusillus\""); rsp = solr().query(query); docs = rsp.getResults(); assertEquals(1, docs.size()); NameUsageSearchResult u1 = converter.toSearchUsage(docs.get(0), true); assertEquals((Integer) 100000007, u1.getKey()); // extinct query = new SolrQuery(); query.setQuery("key:100000025"); rsp = solr().query(query); docs = rsp.getResults(); assertEquals(1, docs.size()); u1 = converter.toSearchUsage(docs.get(0), true); assertEquals((Integer) 100000025, u1.getKey()); assertFalse(u1.isSynonym()); assertFalse(u1.isExtinct()); assertEquals(Lists.newArrayList(Habitat.TERRESTRIAL), u1.getHabitats()); assertEquals(Rank.SPECIES, u1.getRank()); assertEquals((Integer) 100000024, u1.getSubgenusKey()); assertEquals((Integer) 100000011, u1.getGenusKey()); assertEquals((Integer) 100000005, u1.getFamilyKey()); assertEquals((Integer) 100000004, u1.getOrderKey()); assertEquals((Integer) 100000003, u1.getClassKey()); assertEquals((Integer) 100000002, u1.getPhylumKey()); assertEquals((Integer) 100000001, u1.getKingdomKey()); assertEquals((Integer) 100000024, u1.getParentKey()); assertEquals("Sciurus", u1.getSubgenus()); assertEquals("Sciurus", u1.getGenus()); assertEquals("Sciuridae", u1.getFamily()); assertEquals("Rodentia", u1.getOrder()); assertEquals("Mammalia", u1.getClazz()); assertEquals("Chordata", u1.getPhylum()); assertEquals("Animalia", u1.getKingdom()); assertEquals("Sciurus", u1.getParent()); assertNull(u1.getAcceptedKey()); assertEquals(6, u1.getDescriptions().size()); assertEquals("2010030", u1.getTaxonID()); query = new SolrQuery(); query.setQuery("extinct:false"); rsp = solr().query(query); docs = rsp.getResults(); assertEquals(1, docs.size()); u1 = converter.toSearchUsage(docs.get(0), true); assertEquals((Integer) 100000025, u1.getKey()); // threat status query = new SolrQuery(); query.setQuery("threat_status_key:*"); rsp = solr().query(query); docs = rsp.getResults(); assertEquals(1, docs.size()); u1 = converter.toSearchUsage(docs.get(0), true); assertEquals((Integer) 100000007, u1.getKey()); // habitat query = new SolrQuery(); query.setQuery("habitat_key:*"); rsp = solr().query(query); docs = rsp.getResults(); assertEquals(2, docs.size()); // scientific_name query = new SolrQuery(); query.setQuery("scientific_name:\"Sciurus nadymensis Serebrennikov, 1928\""); rsp = solr().query(query); docs = rsp.getResults(); assertEquals(1, docs.size()); u1 = converter.toSearchUsage(docs.get(0), true); assertEquals((Integer) 100000027, u1.getKey()); query = new SolrQuery(); query.setQuery("key:100000004"); rsp = solr().query(query); docs = rsp.getResults(); assertEquals(1, docs.size()); u1 = converter.toSearchUsage(docs.get(0), true); for (Description d : u1.getDescriptions()) { // make sure we don't have html tags in the descriptions assertFalse(d.getDescription().contains("<")); } // test a subfamily search query = new SolrQuery(); query.setQuery("higher_taxon_key:100000042"); rsp = solr().query(query); docs = rsp.getResults(); assertEquals(5, docs.size()); // constituent_key query = new SolrQuery(); query.setQuery("constituent_key:\"211aea14-c252-4a85-96e2-f5f4d5d088f5\""); rsp = solr().query(query); docs = rsp.getResults(); assertEquals(8, docs.size()); query.setQuery("constituent_key:\"211aea14-c252-4a85-96e2-f5f4d5d088f4\""); query.setRows(25); rsp = solr().query(query); docs = rsp.getResults(); assertEquals(17, docs.size()); } }