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.Before; 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.referenceextraction.project.schemas.DocumentToProject; import eu.dnetlib.iis.wf.affmatching.bucket.projectorg.model.AffMatchDocumentProject; import eu.dnetlib.iis.wf.affmatching.bucket.projectorg.read.InferredDocumentProjectConverter; import eu.dnetlib.iis.wf.affmatching.bucket.projectorg.read.IisInferredDocumentProjectReader; import pl.edu.icm.sparkutils.avro.SparkAvroLoader; /** * @author mhorst */ @RunWith(MockitoJUnitRunner.class) public class IisInferredDocumentProjectReaderTest { @InjectMocks private IisInferredDocumentProjectReader documentProjectReader = new IisInferredDocumentProjectReader(); @Mock private SparkAvroLoader avroLoader; @Mock private InferredDocumentProjectConverter documentProjectConverter; @Mock private JavaSparkContext sparkContext; @Mock private JavaRDD<DocumentToProject> loadedDocumentProjects; @Captor private ArgumentCaptor<Function<DocumentToProject, AffMatchDocumentProject>> mapDocumentProjectFunction; @Mock private JavaRDD<AffMatchDocumentProject> documentProjects; private final String predefinedPath = "/path/to/document_pojects/"; @Before public void setUp() { when(avroLoader.loadJavaRDD(sparkContext, predefinedPath, DocumentToProject.class)).thenReturn(loadedDocumentProjects); doReturn(documentProjects).when(loadedDocumentProjects).map(any()); } // ------------------------ TESTS -------------------------- @Test(expected = NullPointerException.class) public void readDocumentProjects_NULL_CONTEXT() { // execute documentProjectReader.readDocumentProjects(null, predefinedPath); } @Test(expected = NullPointerException.class) public void readDocumentProjects_NULL_PATH() { // execute documentProjectReader.readDocumentProjects(sparkContext, null); } @Test public void readDocumentProjects() throws Exception { // execute JavaRDD<AffMatchDocumentProject> retDocumentProject = documentProjectReader.readDocumentProjects(sparkContext, predefinedPath); // assert assertTrue(retDocumentProject == documentProjects); verify(avroLoader).loadJavaRDD(sparkContext, predefinedPath, DocumentToProject.class); verify(loadedDocumentProjects).map(mapDocumentProjectFunction.capture()); assertMapDocumentProjectFunction(mapDocumentProjectFunction.getValue()); } // ------------------------ PRIVATE -------------------------- private void assertMapDocumentProjectFunction(Function<DocumentToProject, AffMatchDocumentProject> function) throws Exception { // given DocumentToProject documentProject = mock(DocumentToProject.class); AffMatchDocumentProject mappedDocumentProject = mock(AffMatchDocumentProject.class); when(documentProjectConverter.convert(documentProject)).thenReturn(mappedDocumentProject); // execute AffMatchDocumentProject retDocumentProject = function.call(documentProject); // assert assertTrue(retDocumentProject == mappedDocumentProject); } }