package eu.dnetlib.iis.wf.affmatching.bucket.projectorg.read; import static org.junit.Assert.assertTrue; import static org.mockito.Matchers.any; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import org.apache.spark.api.java.JavaRDD; import org.apache.spark.api.java.JavaSparkContext; import org.apache.spark.api.java.function.Function; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import eu.dnetlib.iis.importer.schemas.DocumentToProject; import eu.dnetlib.iis.wf.affmatching.bucket.projectorg.model.AffMatchDocumentProject; import pl.edu.icm.sparkutils.avro.SparkAvroLoader; /** * @author madryk */ @RunWith(MockitoJUnitRunner.class) public class IisDocumentProjectReaderTest { @InjectMocks private IisDocumentProjectReader documentProjectReader = new IisDocumentProjectReader(); @Mock private SparkAvroLoader avroLoader; @Mock private DocumentProjectConverter documentProjectConverter; @Mock private JavaSparkContext sparkContext; private String inputDocProjPath = "/path/to/document_pojects/"; @Mock private JavaRDD<DocumentToProject> documentToProjectRdd; @Mock private JavaRDD<AffMatchDocumentProject> documentProjects; @Captor private ArgumentCaptor<Function<DocumentToProject, AffMatchDocumentProject>> convertDocumentProjectFunction; //------------------------ TESTS -------------------------- @Test(expected = NullPointerException.class) public void readDocumentProjects_NULL_CONTEXT() { // execute documentProjectReader.readDocumentProjects(null, inputDocProjPath); } @Test(expected = IllegalArgumentException.class) public void readDocumentProjects_BLANK_PATH() { // execute documentProjectReader.readDocumentProjects(sparkContext, " "); } @Test public void readDocumentProjects() throws Exception { // given when(avroLoader.loadJavaRDD(sparkContext, inputDocProjPath, DocumentToProject.class)).thenReturn(documentToProjectRdd); doReturn(documentProjects).when(documentToProjectRdd).map(any()); // execute JavaRDD<AffMatchDocumentProject> retDocumentProjects = documentProjectReader.readDocumentProjects(sparkContext, inputDocProjPath); // assert assertTrue(retDocumentProjects == documentProjects); verify(avroLoader).loadJavaRDD(sparkContext, inputDocProjPath, DocumentToProject.class); verify(documentToProjectRdd).map(convertDocumentProjectFunction.capture()); assertConvertDocumentProjectFunction(convertDocumentProjectFunction.getValue()); } //------------------------ PRIVATE -------------------------- private void assertConvertDocumentProjectFunction(Function<DocumentToProject, AffMatchDocumentProject> function) throws Exception { // given DocumentToProject inputDocProj = mock(DocumentToProject.class); AffMatchDocumentProject outputDocProj = mock(AffMatchDocumentProject.class); when(documentProjectConverter.convert(inputDocProj)).thenReturn(outputDocProj); // execute AffMatchDocumentProject retDocProj = function.call(inputDocProj); // assert assertTrue(retDocProj == outputDocProj); } }