package org.gbif.dwca.io;
import org.gbif.dwc.terms.DcTerm;
import org.gbif.dwc.terms.DwcTerm;
import org.gbif.dwc.terms.Term;
import org.gbif.dwca.record.DarwinCoreRecord;
import org.gbif.utils.file.FileUtils;
import org.gbif.utils.file.csv.CSVReader;
import org.junit.Test;
import org.mockito.Matchers;
import java.io.File;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import static org.junit.Assert.assertEquals;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class ArchiveTest {
@Test
public void testIteratorDwc() throws Exception {
File csv = FileUtils.getClasspathFile("null_data.txt");
CSVReader reader = new CSVReader(csv, "utf8", "\t", null, 1);
Archive arch = new Archive();
ArchiveField id = new ArchiveField(0, null, null, null);
ArchiveField taxStatus = new ArchiveField(1, DwcTerm.taxonomicStatus, "a", null);
ArchiveField dcmodified = new ArchiveField(6, DcTerm.modified, "mod", null);
ArchiveFile core = mock(ArchiveFile.class);
when(core.getCSVReader()).thenReturn(reader);
when(core.getId()).thenReturn(id);
when(core.getArchive()).thenReturn(arch);
when(core.getField(Matchers.<Term>any())).thenReturn(taxStatus);
Map<Term, ArchiveField> fields = new HashMap<Term, ArchiveField>();
fields.put(DwcTerm.taxonomicStatus, taxStatus);
fields.put(DcTerm.modified, dcmodified);
when(core.getFields()).thenReturn(fields);
when(core.hasTerm(eq(DwcTerm.taxonomicStatus))).thenReturn(true);
when(core.hasTerm(eq(DcTerm.modified))).thenReturn(true);
arch.setCore(core);
Iterator<DarwinCoreRecord> iter = arch.iteratorDwc();
while (iter.hasNext()) {
DarwinCoreRecord rec = iter.next();
assertEquals("a", rec.getTaxonomicStatus());
assertEquals("mod", rec.getModified());
}
}
@Test
public void testConstituents() throws Exception {
File dir = FileUtils.getClasspathFile("constituentsdwca");
Archive arch = new Archive();
arch.setLocation(dir);
arch.setMetadataLocation("eml.xml");
ArchiveField id = new ArchiveField(0, null, null, null);
ArchiveField datasetId = new ArchiveField(1, DwcTerm.datasetID, null, null);
ArchiveField sciname = new ArchiveField(2, DwcTerm.scientificName, null, null);
Map<Term, ArchiveField> fields = new HashMap<Term, ArchiveField>();
fields.put(DwcTerm.taxonomicStatus, sciname);
fields.put(DwcTerm.datasetID, datasetId);
Map<String, File> cons = arch.getConstituentMetadata();
assertEquals(6, cons.size());
for (Map.Entry<String, File> c : cons.entrySet()) {
final String name = c.getKey();
final File file = c.getValue();
assertEquals(name, file.getName().split("\\.")[0]);
}
}
}