package eu.dnetlib.iis.wf.importer.infospace.converter;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import java.io.IOException;
import org.apache.commons.io.IOUtils;
import org.junit.Test;
import eu.dnetlib.data.proto.OafProtos.OafEntity;
import eu.dnetlib.data.proto.OafProtos.OafEntity.Builder;
import eu.dnetlib.data.proto.ProjectProtos.Project.Metadata;
import eu.dnetlib.data.proto.TypeProtos.Type;
import eu.dnetlib.iis.importer.schemas.Project;
/**
* {@link ProjectConverter} test class.
* @author mhorst
*
*/
public class ProjectConverterTest {
private static final String ID = "an identifier";
private static final String ACRONYM = "TLA";
private static final String INVALID_ACRONYM = "UNDEFINED";
private static final String GRANT_ID = "another identifier";
private static final String FUNDING_CLASS = "WT::WT";
private static final String JSON_EXTRA_INFO = "extra-info";
private ProjectConverter converter = new ProjectConverter();
// ------------------------ TESTS --------------------------
@Test(expected = NullPointerException.class)
public void convert_null_oafEntity() throws IOException {
// execute
converter.convert(null);
}
@Test
public void convert_unset_project() throws IOException {
// given
OafEntity oafEntity = emptyEntityBuilder(ID).build();
// execute
Project project = converter.convert(oafEntity);
// assert
assertNull(project);
}
@Test
public void convert_invalid_acronym() throws IOException {
// given
OafEntity.Builder builder = emptyEntityBuilder(ID);
Metadata.Builder mdBuilder = builder.getProjectBuilder().getMetadataBuilder();
mdBuilder.getAcronymBuilder().setValue(INVALID_ACRONYM);
OafEntity oafEntity = builder.build();
// execute
Project project = converter.convert(oafEntity);
// assert
assertNull(project);
}
@Test
public void convert_no_optional() throws IOException {
// given
OafEntity.Builder builder = emptyEntityBuilder(ID);
Metadata.Builder mdBuilder = builder.getProjectBuilder().getMetadataBuilder();
mdBuilder.getCodeBuilder().setValue(GRANT_ID);
mdBuilder.addFundingtreeBuilder().setValue(readFundingTree());
OafEntity oafEntity = builder.build();
// execute
Project project = converter.convert(oafEntity);
// assert
assertEquals(ID, project.getId());
assertEquals(GRANT_ID, project.getProjectGrantId());
assertEquals(FUNDING_CLASS, project.getFundingClass());
assertNull(project.getProjectAcronym());
assertEquals("{}", project.getJsonextrainfo());
}
@Test
public void convert() throws IOException {
// given
OafEntity.Builder builder = emptyEntityBuilder(ID);
Metadata.Builder mdBuilder = builder.getProjectBuilder().getMetadataBuilder();
mdBuilder.getAcronymBuilder().setValue(ACRONYM);
mdBuilder.getCodeBuilder().setValue(GRANT_ID);
mdBuilder.getJsonextrainfoBuilder().setValue(JSON_EXTRA_INFO);
mdBuilder.addFundingtreeBuilder().setValue(readFundingTree());
OafEntity oafEntity = builder.build();
// execute
Project project = converter.convert(oafEntity);
// assert
assertEquals(ID, project.getId());
assertEquals(ACRONYM, project.getProjectAcronym());
assertEquals(GRANT_ID, project.getProjectGrantId());
assertEquals(FUNDING_CLASS, project.getFundingClass());
assertEquals(JSON_EXTRA_INFO, project.getJsonextrainfo());
}
// ------------------------ PRIVATE --------------------------
private static Builder emptyEntityBuilder(String id) {
// note that the type does not matter for the converter
return OafEntity.newBuilder().setType(Type.project).setId(id);
}
private String readFundingTree() throws IOException {
return IOUtils.toString(getClass().getResourceAsStream("/eu/dnetlib/iis/wf/importer/converter/fundingclass_example.xml"), "utf8");
}
}