package com.googlecode.sqlsheet; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import org.junit.After; import org.junit.Before; import org.junit.Test; import scriptella.configuration.ConfigurationFactory; import scriptella.execution.EtlExecutor; import scriptella.execution.EtlExecutorException; import java.io.File; import java.io.IOException; import java.net.URL; import java.util.*; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertNotNull; public class XlsDriverIntegrationTest { private static final String extractXlsScriptFile = "xlsextract.xml"; private static final String loadXlsScriptFile = "xlsload.xml"; private static final String testExtractXlsFile = "extracttest.xls"; private static final String testExtractXlsxFile = "extracttest.xlsx"; @Before public void setUp() throws Exception { } @After public void tearDown() throws Exception { } @Test public void testGetMinorVersion() throws Exception { } @Before public void init() throws Exception { } @Test public void testExctractFromXls() throws Exception { Map<String, Object> params = new HashMap<String, Object>(); params.put("filePath", dumpExcelToTempFile(testExtractXlsFile, ".xls").toString()); params.put("params", params); Map<String, Object> results = executeEtlScriptWithResult(ClassLoader.getSystemResource(extractXlsScriptFile), params); assertNotNull(results.get("results")); List<ResultMock> results1 = (List<ResultMock>) results.get("results"); assertNotNull(results1); assertEquals(3, results1.size()); for (ResultMock customBean : results1) { assertNotNull(customBean.getDate()); assertNotNull(customBean.getID()); assertNotNull(customBean.getName()); } } @Test public void testLoadToXls() throws Exception { List<ResultMock> pojo = new ArrayList<ResultMock>(); pojo.add(new ResultMock(1, "test1", new Date())); pojo.add(new ResultMock(2, "test2", new Date())); pojo.add(new ResultMock(3, "test3", new Date())); File xls = File.createTempFile("tmp.", ".xls"); xls.deleteOnExit(); Map<String, Object> params = new HashMap<String, Object>(); params.put("filePath", xls.toURL()); params.put("params", params); params.put("POJO", pojo); // Load pojo into excel Map<String, Object> results = executeEtlScriptWithResult(ClassLoader.getSystemResource(loadXlsScriptFile), params); params.put("filePath", xls.toURL()); params.put("params", params); // script must fill results parameter results = executeEtlScriptWithResult(ClassLoader.getSystemResource(extractXlsScriptFile), params); assertNotNull(results.get("results")); List<ResultMock> results1 = (List<ResultMock>) results.get("results"); assertNotNull(results1); assertEquals(3, results1.size()); } @Test public void testExctractFromXlsx() throws Exception { Map<String, Object> params = new HashMap<String, Object>(); params.put("filePath", dumpExcelToTempFile(testExtractXlsxFile, ".xlsx").toString()); params.put("params", params); Map<String, Object> results = executeEtlScriptWithResult(ClassLoader.getSystemResource(extractXlsScriptFile), params); assertNotNull(results.get("results")); List<ResultMock> results1 = (List<ResultMock>) results.get("results"); assertNotNull(results1); assertEquals(3, results1.size()); } @Test public void testLoadToXlsx() throws Exception { List<ResultMock> pojo = new ArrayList<ResultMock>(); pojo.add(new ResultMock(1, "test1", new Date())); pojo.add(new ResultMock(2, "test2", new Date())); pojo.add(new ResultMock(3, "test3", new Date())); File xls = File.createTempFile("tmp.", ".xlsx"); xls.deleteOnExit(); Map<String, Object> params = new HashMap<String, Object>(); params.put("filePath", xls.toURL().toString()); params.put("params", params); params.put("POJO", pojo); // Load pojo into excel Map<String, Object> results = executeEtlScriptWithResult(ClassLoader.getSystemResource(loadXlsScriptFile), params); // Extract data from loaded data params.put("filePath", xls.toURL().toString()); params.put("params", params); // script must fill results parameter Map<String, Object> results1 = executeEtlScriptWithResult(ClassLoader.getSystemResource(extractXlsScriptFile),params); assertNotNull(results1.get("results")); List<ResultMock> results2 = (List<ResultMock>) results1.get("results"); assertNotNull(results2); assertEquals(3, results2.size()); } private URL dumpExcelToTempFile(String resource, String format) { URL url; try { File xlsFile = File.createTempFile("tmp.", format); FileUtils.writeByteArrayToFile(xlsFile, IOUtils.toByteArray(ClassLoader.getSystemResourceAsStream(resource))); url = xlsFile.toURL(); xlsFile.deleteOnExit(); } catch (IOException e) { throw new RuntimeException(e.getMessage(), e); } return url; } private Map<String, Object> executeEtlScriptWithResult(URL scriptFile, Map<String, Object> parameters) throws EtlExecutorException { EtlExecutor etlExecutor = new EtlExecutor(); ConfigurationFactory cf = new ConfigurationFactory(); cf.setResourceURL(scriptFile); cf.setExternalParameters(parameters); etlExecutor.setConfiguration(cf.createConfiguration()); etlExecutor.execute(); return parameters; } }