package eu.dnetlib.iis.wf.importer.dataset;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.junit.Test;
import eu.dnetlib.iis.importer.schemas.DataSetReference;
import eu.dnetlib.iis.importer.schemas.DatasetToMDStore;
import eu.dnetlib.iis.wf.importer.RecordReceiver;
/**
* {@link DataciteXmlImporter} test class.
* @author mhorst
*
*/
public class DataciteXmlImporterTest {
@Test
public void testDataciteImport() throws Exception {
String filePath = "/eu/dnetlib/iis/wf/importer/dataset/data/input/datacite_test_dump.xml";
String mdStoreId = "some-mdstore-id";
InputStream inputStream = null;
SAXParser saxParser = null;
final List<DataSetReference> receivedReferences = new ArrayList<DataSetReference>();
final List<DatasetToMDStore> receivedMDStoreReferences = new ArrayList<DatasetToMDStore>();
try {
SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
saxParserFactory.setNamespaceAware(true);
saxParser = saxParserFactory.newSAXParser();
DataciteDumpXmlHandler handler = new DataciteDumpXmlHandler(new RecordReceiver<DataSetReference>() {
@Override
public void receive(DataSetReference object) throws IOException {
receivedReferences.add(object);
}
},new RecordReceiver<DatasetToMDStore>() {
@Override
public void receive(DatasetToMDStore object) throws IOException {
receivedMDStoreReferences.add(object);
}
}, mdStoreId);
saxParser.parse(inputStream = DataciteXmlImporterTest.class.getResourceAsStream(filePath),
handler , DataciteDumpXmlHandler.ELEM_OBJ_IDENTIFIER);
assertEquals(2, receivedReferences.size());
assertEquals(2, receivedMDStoreReferences.size());
// checking mdstore references
assertEquals("50|oai:oai.datacite.org:1805127", receivedMDStoreReferences.get(0).getDatasetId());
assertEquals(mdStoreId, receivedMDStoreReferences.get(0).getMdStoreId());
assertEquals("50|oai:oai.datacite.org:1805128", receivedMDStoreReferences.get(1).getDatasetId());
assertEquals(mdStoreId, receivedMDStoreReferences.get(1).getMdStoreId());
// 1st record
DataSetReference currentReference = receivedReferences.get(0);
assertNotNull(currentReference);
assertEquals("50|oai:oai.datacite.org:1805127", currentReference.getId());
assertEquals("10.6068/DP13F04CCEE7995", currentReference.getIdForGivenType());
assertEquals(1, currentReference.getCreatorNames().size());
assertEquals("creator1", currentReference.getCreatorNames().get(0));
assertEquals(1, currentReference.getTitles().size());
assertEquals("title1", currentReference.getTitles().get(0));
assertEquals(1, currentReference.getFormats().size());
assertEquals("format1", currentReference.getFormats().get(0));
assertEquals("some description", currentReference.getDescription());
assertEquals("publisher1", currentReference.getPublisher());
assertEquals("2012", currentReference.getPublicationYear());
assertEquals("Text", currentReference.getResourceTypeClass());
assertNull(currentReference.getResourceTypeValue());
assertNotNull(currentReference.getAlternateIdentifiers());
assertEquals(2, currentReference.getAlternateIdentifiers().size());
assertEquals("AAA0012345", currentReference.getAlternateIdentifiers().get("firstType"));
assertEquals("BBB0012345", currentReference.getAlternateIdentifiers().get("secondType"));
// 2nd record
currentReference = receivedReferences.get(1);
assertNotNull(currentReference);
assertEquals("10.6068/DP13F04CD013D96", currentReference.getIdForGivenType());
assertEquals(1, currentReference.getCreatorNames().size());
assertEquals("creator2", currentReference.getCreatorNames().get(0));
assertEquals(1, currentReference.getTitles().size());
assertEquals("title2", currentReference.getTitles().get(0));
assertNull(currentReference.getFormats());
assertEquals("publisher2", currentReference.getPublisher());
assertEquals("2013", currentReference.getPublicationYear());
assertEquals("Dataset", currentReference.getResourceTypeClass());
assertEquals("Dataset", currentReference.getResourceTypeValue());
assertNull(currentReference.getAlternateIdentifiers());
} finally {
if (inputStream!=null) {
inputStream.close();
}
}
}
}