package eu.dnetlib.iis.wf.importer.infospace;
import static eu.dnetlib.iis.wf.importer.ImportWorkflowRuntimeParameters.IMPORT_APPROVED_COLUMNFAMILIES_CSV;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper.Context;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
/**
* @author mhorst
*
*/
@RunWith(MockitoJUnitRunner.class)
@SuppressWarnings({"rawtypes", "unchecked"})
public class ImportInformationSpaceMapperTest {
@Mock
private Context context;
@Captor
private ArgumentCaptor<Text> keyCaptor;
@Captor
private ArgumentCaptor<InfoSpaceRecord> valueCaptor;
private ImportInformationSpaceMapper mapper = new ImportInformationSpaceMapper();
// ------------------------------------- TESTS -----------------------------------
@Test
public void testMapNotApprovedColFam() throws Exception {
// given
Configuration conf = new Configuration();
conf.set(IMPORT_APPROVED_COLUMNFAMILIES_CSV, "approvedColFam");
doReturn(conf).when(context).getConfiguration();
mapper.setup(context);
Text key = new Text(buildKey("rowKey", "notApprovedColFam", "qualifier"));
Text value = new Text("jsonContent");
// execute
mapper.map(key, value, context);
// assert
verify(context, never()).write(any(), any());
}
@Test
public void testMap() throws Exception {
// given
Configuration conf = new Configuration();
String approvedColumnFamily = "approvedColFam";
conf.set(IMPORT_APPROVED_COLUMNFAMILIES_CSV, approvedColumnFamily);
doReturn(conf).when(context).getConfiguration();
mapper.setup(context);
String rowKey = "rowKey";
String qualifier = "qualifier";
String valueStr = "oafJsonContent";
Text key = new Text(buildKey(rowKey, approvedColumnFamily, qualifier));
Text value = new Text(valueStr);
// execute
mapper.map(key, value, context);
// assert
verify(context, times(1)).write(keyCaptor.capture(), valueCaptor.capture());
Text id = keyCaptor.getValue();
assertNotNull(id);
assertEquals(rowKey, id.toString());
InfoSpaceRecord infoSpaceRecord = valueCaptor.getValue();
assertNotNull(infoSpaceRecord);
assertEquals(approvedColumnFamily, infoSpaceRecord.getColumnFamily().toString());
assertEquals(qualifier, infoSpaceRecord.getQualifier().toString());
assertEquals(value, infoSpaceRecord.getOafJson());
}
// ------------------------------------- PRIVATE -----------------------------------
private String buildKey(String rowKey, String columnFamily, String qualifier) {
StringBuilder strBuilder = new StringBuilder();
strBuilder.append(rowKey);
strBuilder.append(ImportInformationSpaceMapper.KEY_SEPARATOR);
strBuilder.append(columnFamily);
strBuilder.append(ImportInformationSpaceMapper.KEY_SEPARATOR);
strBuilder.append(qualifier);
return strBuilder.toString();
}
}