/**
* Candybean is a next generation automation and testing framework suite.
* It is a collection of components that foster test automation, execution
* configuration, data abstraction, results illustration, tag-based execution,
* top-down and bottom-up batches, mobile variants, test translation across
* languages, plain-language testing, and web service testing.
* Copyright (C) 2013 SugarCRM, Inc. <candybean@sugarcrm.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.sugarcrm.candybean.datasource;
import static org.junit.Assert.assertTrue;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Map;
import org.apache.commons.io.FileUtils;
import org.junit.Test;
import org.junit.runner.RunWith;
import com.sugarcrm.candybean.configuration.Configuration;
import com.sugarcrm.candybean.datasource.DataAdapter;
import com.sugarcrm.candybean.datasource.DataAdapterFactory;
import com.sugarcrm.candybean.datasource.DataSource;
import com.sugarcrm.candybean.datasource.FieldSet;
import com.sugarcrm.candybean.datasource.DataAdapterFactory.DataAdapterType;
import com.sugarcrm.candybean.runner.VRunner;
@RunWith(VRunner.class)
public class CsvDataAdapterUnitTest {
private static MyConfiguration myConfiguration;
private static String testDataDir = "testData";
@Test
public void testIt() throws Exception {
DataAdapterFactory adapterFactory;
DataAdapter dataAdapter;
printCurrentDir();
String dataDir = testDataDir + File.separator + "csvs";
dataDir = createDataDir(dataDir);
String filename = "Companies_0001.csv";
String content = getContent1();
createFile(dataDir, filename, content);
filename = "Companies_0001_note.csv";
content = getContent1A();
createFile(dataDir, filename, content);
dataDir = testDataDir + File.separator + "csvs" + File.separator
+ "subDir";
dataDir = createDataDir(dataDir);
filename = "Companies_0001_2.csv";
content = getContent2();
createFile(dataDir, filename, content);
myConfiguration = new MyConfiguration();
Configuration myConfig = myConfiguration.createConfigFile();
adapterFactory = new DataAdapterFactory(myConfig);
dataAdapter = adapterFactory.createDataAdapter(DataAdapterType.CSV);
Map<String, DataSource> dataSourceHashMap = dataAdapter.setDataBasePath(
"datasource.csv.baseDir").getData("csvs/Companies_0001", DataAdapter.Selection.SINGLE);
DataSource ds = dataSourceHashMap.get("Companies_0001");
printDataSourceSingle(ds);
printDataSource(dataSourceHashMap);
dataSourceHashMap = dataAdapter
.setDataBasePath("datasource.csv.subDir").getData(
"Companies_0001_2");
printDataSource(dataSourceHashMap);
cleanup();
}
private static String createDataDir(String dirStr) {
File dir = new File(dirStr);
String testDataPath = dirStr;
try {
// Create directory if not exist
if (!dir.exists()) {
testDataPath = dir.getAbsolutePath();
boolean result = dir.mkdirs();
if (result) {
System.out.println("createDataDir(): created "
+ testDataPath);
}
} else {
System.out.println("createDataDir(): " + testDataPath
+ " already exists");
}
} catch (Exception e) {
e.printStackTrace();
}
return testDataPath;
}
private static void createFile(String dir, String filename, String content) {
try {
File file = new File(dir + File.separator + filename);
// Create file if not exist
if (!file.exists()) {
file.createNewFile();
System.out.println("createFile(): created "
+ file.getAbsolutePath());
} else {
System.out.println("createFile(): " + file.getAbsolutePath()
+ " already exists");
}
FileWriter fw = new FileWriter(file.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
bw.write(content);
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
private static String getContent1() {
StringBuilder sb = new StringBuilder();
sb.append("COMPANY,CATEGORY, NUM_EMPLOYEES, \"PUBLIC COMPANY\"\n");
sb.append("SugarCRM,CRM, 300, false\n");
sb.append("Yahoo, Media, 7500, true\n");
sb.append("Agilent, Measurements and Tests, 7000");
return sb.toString();
}
private static String getContent1A() {
StringBuilder sb = new StringBuilder();
sb.append("COMPANY,CATEGORY, NUM_EMPLOYEES, \"PUBLIC COMPANY\"\n");
sb.append("IBM,IT, 9000, true");
return sb.toString();
}
private static String getContent2() {
StringBuilder sb = new StringBuilder();
sb.append("COMPANY,CATEGORY, NUM_EMPLOYEES, \"PUBLIC COMPANY\"\n");
sb.append("SugarCRM,CRM, 300, false\n");
sb.append("Yahoo, Media, 7500, true\n");
sb.append("Agilent, Measurements and Tests, 7000\n");
sb.append("Facebook, \"Social Media\", 5000, true");
return sb.toString();
}
private static void printCurrentDir() {
try {
String current = new java.io.File(".").getAbsolutePath();
System.out.println("CsvDataAdapterTest: Current dir using getAbsolutePath():"
+ current);
} catch (Exception e) {
e.printStackTrace();
}
String currentDir = System.getProperty("user.dir");
System.out.println("CsvDataAdapterTest: Current dir using System.getProperty:"
+ currentDir);
}
private static void printDataSourceSingle(DataSource ds) {
System.out.println("CsvDataAdapterTest: printDataSourceSingle(): dataSource filenameNoExt = "
+ ds.getFilename());
printDataSourceFieldSet(ds);
}
private static void printDataSource(Map<String, DataSource> dataSourceHashMap) {
for (String filenameNoExt : dataSourceHashMap.keySet()) {
System.out.println("CsvDataAdapterTest: printDataSourceData(): dataSource filenameNoExt = "
+ filenameNoExt);
DataSource ds = dataSourceHashMap.get(filenameNoExt);
printDataSourceFieldSet(ds);
}
}
private static void printDataSourceFieldSet(DataSource ds) {
System.out.println("CsvDataAdapterTest: printDataSourceFieldSet(): fsList.size() = "
+ ds.size());
for (FieldSet fs : ds) {
for (String key : fs.keySet()) {
System.out.println(key + ":" + fs.get(key));
}
}
}
private static void cleanup() {
// Delete properties file created
System.out.println("");
myConfiguration.deleteConfigFile();
// Delete data directory
try {
FileUtils.deleteDirectory(new File(testDataDir));
System.out.println("Deleted " + testDataDir);
} catch(Exception e) {
e.printStackTrace();
}
}
private static class MyConfiguration {
String configFilePath = System.getProperty("user.dir") + File.separator
+ "myPropFile.properties";
Configuration config = null;
@Test
public Configuration createConfigFile() {
// Creating Configuration Object
config = new Configuration();
// Defining configuration properties keys/values
config.setValue("datasource.csv.baseDir", "testData");
config.setValue("datasource.csv.subDir", "testData/csvs/subDir");
return config;
}
//@Test
public void deleteConfigFile() {
// Deleting the File created
File propFile = new File(configFilePath);
boolean Ok = propFile.delete();
assertTrue("File did not get deleted!", !propFile.exists());
if (Ok) {
System.out.println("Deleted " + propFile.getName());
}
}
}
}