package eu.dnetlib.iis.wf.citationmatching.output;
import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.google.common.io.Files;
import eu.dnetlib.iis.citationmatching.schemas.Citation;
import eu.dnetlib.iis.common.utils.AvroAssertTestUtil;
import eu.dnetlib.iis.common.utils.AvroTestUtils;
import eu.dnetlib.iis.common.utils.JsonAvroTestUtils;
import pl.edu.icm.sparkutils.test.SparkJob;
import pl.edu.icm.sparkutils.test.SparkJobBuilder;
import pl.edu.icm.sparkutils.test.SparkJobExecutor;
/**
* @author madryk
*/
public class CitationMatchingOutputTransformerJobTest {
private static final String DATA_DIRECTORY_PATH = "src/test/resources/eu/dnetlib/iis/wf/citationmatching/data/output_transformer";
private SparkJobExecutor executor = new SparkJobExecutor();
private File workingDir;
private String inputDirPath;
private String outputDirPath;
@Before
public void before() {
workingDir = Files.createTempDir();
inputDirPath = workingDir + "/spark_citation_matching_output_transformer/input";
outputDirPath = workingDir + "/spark_citation_matching_output_transformer/output";
}
@After
public void after() throws IOException {
FileUtils.deleteDirectory(workingDir);
}
//------------------------ TESTS --------------------------
@Test
public void citationMatchingOutputTransformer() throws IOException {
// given
String jsonInputFile = DATA_DIRECTORY_PATH + "/citation.json";
String jsonOutputFile = DATA_DIRECTORY_PATH + "/commonCitation.json";
AvroTestUtils.createLocalAvroDataStore(
JsonAvroTestUtils.readJsonDataStore(jsonInputFile, Citation.class),
inputDirPath);
// execute
executor.execute(buildCitationMatchingOutputTransformerJob(inputDirPath, outputDirPath));
// assert
AvroAssertTestUtil.assertEqualsWithJsonIgnoreOrder(outputDirPath, jsonOutputFile, eu.dnetlib.iis.common.citations.schemas.Citation.class);
}
//------------------------ PRIVATE --------------------------
private SparkJob buildCitationMatchingOutputTransformerJob(String inputDirPath, String outputDirPath) {
SparkJob sparkJob = SparkJobBuilder
.create()
.setAppName("Spark Citation Matching - Output Transformer")
.setMainClass(CitationMatchingOutputTransformerJob.class)
.addArg("-input", inputDirPath)
.addArg("-output", outputDirPath)
.addJobProperty("spark.driver.host", "localhost")
.build();
return sparkJob;
}
}