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.importer.schemas.ProjectToOrganization; import eu.dnetlib.iis.wf.affmatching.bucket.projectorg.model.AffMatchProjectOrganization; import eu.dnetlib.iis.wf.affmatching.bucket.projectorg.read.IisProjectOrganizationReader; import eu.dnetlib.iis.wf.affmatching.bucket.projectorg.read.ProjectOrganizationConverter; import pl.edu.icm.sparkutils.avro.SparkAvroLoader; /** * @author mhorst */ @RunWith(MockitoJUnitRunner.class) public class IisProjectOrganizationReaderTest { @InjectMocks private IisProjectOrganizationReader projectOrganizationReader = new IisProjectOrganizationReader(); @Mock private SparkAvroLoader avroLoader; @Mock private ProjectOrganizationConverter projectOrganizationConverter; @Mock private JavaSparkContext sparkContext; @Mock private JavaRDD<ProjectToOrganization> loadedProjectOrganizations; @Captor private ArgumentCaptor<Function<ProjectToOrganization, AffMatchProjectOrganization>> convertProjectOrganizationMapFunction; @Mock private JavaRDD<AffMatchProjectOrganization> projectOrganizations; private final String predefinedPath = "/path/to/poject_organizations/"; @Before public void setUp() { when(avroLoader.loadJavaRDD(sparkContext, predefinedPath, ProjectToOrganization.class)).thenReturn(loadedProjectOrganizations); doReturn(projectOrganizations).when(loadedProjectOrganizations).map(any()); } // ------------------------ TESTS -------------------------- @Test(expected = NullPointerException.class) public void readProjectOrganizations_NULL_CONTEXT() { // execute projectOrganizationReader.readProjectOrganizations(null, predefinedPath); } @Test(expected = NullPointerException.class) public void readProjectOrganizations_NULL_PATH() { // execute projectOrganizationReader.readProjectOrganizations(sparkContext, null); } @Test public void readProjectOrganizations() throws Exception { // execute JavaRDD<AffMatchProjectOrganization> retProjectOrganization = projectOrganizationReader .readProjectOrganizations(sparkContext, predefinedPath); // assert assertTrue(retProjectOrganization == projectOrganizations); verify(avroLoader).loadJavaRDD(sparkContext, predefinedPath, ProjectToOrganization.class); verify(loadedProjectOrganizations).map(convertProjectOrganizationMapFunction.capture()); assertMapProjectOrganizationFunction(convertProjectOrganizationMapFunction.getValue()); } // ------------------------ PRIVATE -------------------------- private void assertMapProjectOrganizationFunction(Function<ProjectToOrganization, AffMatchProjectOrganization> function) throws Exception { // given ProjectToOrganization projectOrganization = mock(ProjectToOrganization.class); AffMatchProjectOrganization mappedProjectOrganization = mock(AffMatchProjectOrganization.class); when(projectOrganizationConverter.convert(projectOrganization)).thenReturn(mappedProjectOrganization); // execute AffMatchProjectOrganization retProjectOrganization = function.call(projectOrganization); // assert assertTrue(retProjectOrganization == mappedProjectOrganization); } }