package eu.dnetlib.iis.wf.importer.stream.project;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import java.io.BufferedInputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import org.apache.commons.lang3.StringUtils;
import org.junit.Test;
import eu.dnetlib.iis.common.TestsIOUtils;
import eu.dnetlib.iis.common.java.io.JsonUtils;
import eu.dnetlib.iis.importer.schemas.Project;
import eu.dnetlib.iis.wf.importer.infospace.converter.ProjectConverter;
import eu.dnetlib.openaire.exporter.model.ProjectDetail;
/**
* @author mhorst
*
*/
public class ProjectDetailConverterTest {
private static String outputResourceLocation = "/eu/dnetlib/iis/wf/importer/stream/project/data/output/project.json";
private final ProjectDetailConverter converter = new ProjectDetailConverter();
// --------------------------------------- TEST -----------------------------------------
@Test(expected=RuntimeException.class)
public void testConversionOnInvalidProjectId() throws Exception {
// given
ProjectDetail source = new ProjectDetail();
source.setProjectId("invalidId");
// execute
converter.convert(source);
}
@Test
public void testConversionOnObject() throws Exception {
// given
ProjectDetail source = new ProjectDetail();
source.setProjectId("xyz_________::1234");
source.setAcronym("acronym");
// execute
Project result = converter.convert(source);
// assert
assertNotNull(result);
assertEquals("40|xyz_________::81dc9bdb52d04dc20036dbd8313ed055", result.getId());
assertEquals(source.getAcronym(), result.getProjectAcronym());
assertEquals(ProjectConverter.BLANK_JSONEXTRAINFO, result.getJsonextrainfo());
}
@Test
public void testConversionOnResource() throws Exception {
List<Project> expected = JsonUtils.convertToList(
StreamingFacadeMockFactory.class.getResourceAsStream(outputResourceLocation),
Project.SCHEMA$, Project.class);
StreamingFacade streamingFacade = new StreamingFacadeMockFactory().instantiate(null);
List<Project> actual = new ArrayList<>();
try (Scanner scanner = new Scanner(new BufferedInputStream(streamingFacade.getStream()))) {
String line = getNonEmptyLine(scanner);
assertNotNull(line);
ProjectDetail projectDetail = ProjectDetail.fromJson(line);
assertNotNull(projectDetail);
actual.add(converter.convert(projectDetail));
line = getNonEmptyLine(scanner);
assertNotNull(line);
projectDetail = ProjectDetail.fromJson(line);
assertNotNull(projectDetail);
actual.add(converter.convert(projectDetail));
line = getNonEmptyLine(scanner);
assertNull(line);
}
TestsIOUtils.assertEqualSets(expected, actual, true);
}
// --------------------------------- PRIVATE -----------------------------------------
private String getNonEmptyLine(Scanner scanner) {
while (scanner.hasNext()) {
String line = scanner.nextLine();
if (StringUtils.isNotBlank(line)) {
return line;
}
}
return null;
}
}