package org.gbif.checklistbank.nub.source;
import org.gbif.api.model.common.paging.PagingRequest;
import org.gbif.api.model.common.paging.PagingResponse;
import org.gbif.api.model.registry.Dataset;
import org.gbif.api.model.registry.Installation;
import org.gbif.api.model.registry.Organization;
import org.gbif.api.service.registry.DatasetService;
import org.gbif.api.service.registry.InstallationService;
import org.gbif.api.service.registry.OrganizationService;
import org.gbif.api.vocabulary.DatasetType;
import org.gbif.api.vocabulary.Rank;
import org.gbif.checklistbank.cli.nubbuild.NubConfiguration;
import org.gbif.checklistbank.service.mybatis.postgres.ClbDbTestRule;
import java.net.URI;
import java.util.Date;
import java.util.List;
import java.util.Properties;
import java.util.UUID;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.mockito.AdditionalMatchers;
import org.mockito.Matchers;
import org.mockito.Mockito;
import org.neo4j.helpers.collection.Iterables;
import static org.junit.Assert.assertEquals;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.when;
public class ClbSourceListTest {
private static final UUID CHECKLIST_KEY = UUID.fromString("109aea14-c252-4a85-96e2-f5f4d5d088f4");
private static final UUID ORG_KEY = UUID.fromString("109aea14-c252-4a85-96e2-f5f4d5d01984");
private static final UUID INS_KEY = UUID.fromString("109aea14-c252-4a85-96e2-f5f4d5d01986");
private static NubConfiguration cfg = new NubConfiguration();
private ClbSourceList src;
private DatasetService ds;
private OrganizationService os;
private InstallationService is;
@Rule
public ClbDbTestRule dbSetup = ClbDbTestRule.squirrels();
private UUID oldDKey;
@Before
public void init() {
ds = Mockito.mock(DatasetService.class);
Dataset squirrel = new Dataset();
squirrel.setKey(CHECKLIST_KEY);
squirrel.setTitle("Squirrels");
squirrel.setType(DatasetType.CHECKLIST);
when(ds.get(eq(CHECKLIST_KEY))).thenReturn(squirrel);
os = Mockito.mock(OrganizationService.class);
Organization org1 = new Organization();
org1.setKey(ORG_KEY);
org1.setTitle("Org1");
when(os.get(eq(ORG_KEY))).thenReturn(org1);
oldDKey = UUID.randomUUID();
final Date now = new Date();
PagingResponse<Dataset> resp3 = new PagingResponse<Dataset>();
PagingResponse<Dataset> respEmpty = new PagingResponse<Dataset>();
respEmpty.setCount(0l);
respEmpty.setEndOfRecords(true);
Dataset orgD = new Dataset();
orgD.setKey(oldDKey);
orgD.setTitle("orgD");
orgD.setCreated(now);
orgD.setType(DatasetType.CHECKLIST);
Dataset orgD2 = new Dataset();
orgD2.setKey(UUID.randomUUID());
orgD2.setTitle("orgD2");
orgD2.setCreated(new Date(now.getTime() - 100000));
orgD2.setType(DatasetType.CHECKLIST);
resp3.setCount(2l);
resp3.getResults().add(orgD);
resp3.getResults().add(orgD2);
when(os.publishedDatasets(Matchers.<UUID>any(), any(PagingRequest.class))).thenReturn(respEmpty);
when(os.publishedDatasets(AdditionalMatchers.not(eq(org1.getKey())), any(PagingRequest.class))).thenReturn(resp3);
is = Mockito.mock(InstallationService.class);
Installation ins1 = new Installation();
org1.setKey(INS_KEY);
org1.setTitle("Ins1");
when(is.get(eq(INS_KEY))).thenReturn(ins1);
when(is.getHostedDatasets(Matchers.<UUID>any(), any(PagingRequest.class))).thenReturn(respEmpty);
when(is.getHostedDatasets(AdditionalMatchers.not(eq(ins1.getKey())), any(PagingRequest.class))).thenReturn(resp3);
// use default prod API
Properties props = dbSetup.getProperties();
cfg.clb.databaseName = props.getProperty("checklistbank.db.dataSource.databaseName");
cfg.clb.serverName = props.getProperty("checklistbank.db.dataSource.serverName");
cfg.clb.user = props.getProperty("checklistbank.db.dataSource.user");
cfg.clb.password = props.getProperty("checklistbank.db.dataSource.password");
cfg.sourceList = URI.create("nub-test-sources.txt");
src = new ClbSourceList(ds, os, is, cfg);
}
/**
* Test reading the source list
*/
@Test
public void testListSources() throws Exception {
List<NubSource> sources = Iterables.asList(src);
assertEquals(3, sources.size());
assertEquals(Rank.PHYLUM, sources.get(0).ignoreRanksAbove);
assertEquals(Rank.FAMILY, sources.get(1).ignoreRanksAbove);
assertEquals(Rank.FAMILY, sources.get(2).ignoreRanksAbove);
assertEquals(CHECKLIST_KEY, sources.get(0).key);
assertEquals(oldDKey, sources.get(1).key);
}
}