package pl.zgora.uz.wmie.fe.test;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.dbunit.database.DatabaseConnection;
import org.dbunit.database.IDatabaseConnection;
import org.dbunit.dataset.DataSetException;
import org.dbunit.dataset.xml.XmlDataSet;
import org.dbunit.dataset.xml.XmlDataSetWriter;
import org.dbunit.operation.DatabaseOperation;
import org.hibernate.cfg.Configuration;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.ProjectionList;
import org.hibernate.criterion.Projections;
import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.lang.reflect.Field;
import java.sql.Array;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.List;
import java.util.ArrayList;
import javassist.compiler.ast.Variable;
import pl.zgora.uz.wmie.fe.abstracts.AbstractFactory;
import pl.zgora.uz.wmie.fe.abstracts.GenericDAO;
import pl.zgora.uz.wmie.fe.hbm.classes.Dzial;
import pl.zgora.uz.wmie.fe.hbm.classes.Pracownik;
import pl.zgora.uz.wmie.fe.hbm.classes.Stanowisko;
import pl.zgora.uz.wmie.fe.service.impl.DzialService;
import pl.zgora.uz.wmie.fe.service.BaseService;
import pl.zgora.uz.wmie.fe.util.BusinessUtil;
public abstract class BaseServiceTest<T1 extends BaseService,T2>{
private T1 serviceObject;
private String serviceClass=null;
private static Integer generatedId;
protected final Log log = LogFactory.getLog(getClass());
public BaseServiceTest(Class<T1> serviceClassP) {
this.serviceClass=serviceClassP.getSimpleName();
}
@BeforeClass
public static void initDataBase() throws Exception{
// database connection
Class driverClass = Class.forName("org.firebirdsql.jdbc.FBDriver");
/*
* FIXME: takie wyciaganie propertiesow powoduje niepotrzebne
* ladowanie konfiguracji hibernate trzebna przerobic i wczytac plik
* hibernate.cfg.xml jako zwyklego xml
*/
String databaseURL = new Configuration()
.configure("pl/zgora/uz/wmie/fe/config/hibernate.cfg.xml").getProperty("connection.url");
if (databaseURL == null) {
databaseURL = new Configuration().configure(
"pl/zgora/uz/wmie/fe/config/hibernate.cfg.xml")
.getProperty("hibernate.connection.url");
}
Connection jdbcConnection = DriverManager.getConnection(
databaseURL, "sysdba",
"masterkey");
IDatabaseConnection connection = new DatabaseConnection(jdbcConnection);
// EKSPORT
// XmlDataSetWriter exportBase = new XmlDataSetWriter(new FileOutputStream(
// "c:/dataset.xml"), "UTF-8");
// exportBase.write(connection.createDataSet());
// IMPORT
File file = new File ("");
XmlDataSet importBase = new XmlDataSet(new FileReader(file.getAbsolutePath()+"/src/datasets/initialDataset.xml"));
DatabaseOperation.REFRESH.execute(connection, importBase); //moze CLEAN_INSERT
}
private BaseServiceTest() {
super();
}
/**
* abstrakcyjna metoda do tworzenia projekcji dla testow
*/
public abstract ProjectionList setProjections();
/**
* abstrakcyjna metoda do tworzenia kryteriow dla testow
*/
public abstract List<Criterion> setCriterions();
/**
* abstrakcyjna metoda do tworzenia ordersow dla testow
*/
public abstract List<Order> setOrders();
/**
* abstrakcyjna metoda ustawiajaca obiekt zapisywany testowo do DB
*/
public abstract T2 setObject();
@Before
public void setUp() throws Exception {
//dzialService = (DzialService) BusinessUtil.findBusiness("DzialService");
serviceObject = (T1)BusinessUtil.findBusiness(serviceClass);
}
@Test
public void saveTest() throws Exception {
// String databaseClassStr=serviceClass;
// databaseClassStr=serviceClass.replaceFirst("Service","");
// Class databaseClass=Class.forName(databaseClassStr);
// Object dbObject=databaseClass.newInstance();
//
// Dzial dzial = new Dzial();
// dzial.setNazwaDzialu("nowy dzial");
//dzial.setTyp("E");
log.info("Start test method: saveTest");
generatedId = (Integer)serviceObject.save(setObject());
log.info("End test method: saveTest");
}
@Test
public void loadTest() throws Exception {
log.info("Start test method: loadTest");
serviceObject.load(1);
log.info("End test method: loadTest");
}
@Test
public void deleteTest() throws Exception {
log.info("Start test method: deleteTest");
serviceObject.deleteById(generatedId);
log.info("End test method: deleteTest");
}
@Test
public void findByParamsProjectionsTest() throws Exception{
log.info("Start test method: findByParamsProjectionsTest");
serviceObject.findByParams(setProjections());
log.info("End test method: findByParamsProjectionsTest");
}
@Test
public void findByParamsCriteria() throws Exception{
log.info("Start test method: findByParamsCriteria");
List<T2> dList = serviceObject.findByParams(setCriterions());
log.info("End test method: findByParamsCriteria");
}
@Test
public void findByParamsProjectionsCriteria() throws Exception{
log.info("Start test method: findByParamsProjectionsCriteria");
serviceObject.findByParams(setProjections(), setCriterions());
log.info("End test method: findByParamsProjectionsCriteria");
}
@Test
public void findByParamsProjectionsCriteriaOrder() throws Exception{
log.info("Start test method: findByParamsProjectionsCriteriaOrder");
serviceObject.findByParams(setProjections(), setCriterions(), setOrders());
log.info("End test method: findByParamsProjectionsCriteriaOrder");
}
@Test
public void findByParamsProjectionsCriteriaOrderStartIndexRowAmount() throws Exception{
int startIndex = 0;
int rowAmount = 10;
log.info("Start test method: findByParamsProjectionsCriteriaOrderStartIndexRowAmount");
serviceObject.findByParams(setProjections(), setCriterions(), setOrders(), startIndex, rowAmount);
log.info("End test method: findByParamsProjectionsCriteriaOrderStartIndexRowAmount");
}
@Test
public void getRowCountCriteria() throws Exception{
log.info("Start test method: getRowCountCriteria");
serviceObject.getRowCount(setCriterions());
log.info("End test method: getRowCountCriteria");
}
@Test
public void getRowCountProjectionCriteria() throws Exception{
log.info("Start test method: getRowCountProjectionCriteria");
serviceObject.getRowCount(setProjections(), setCriterions());
log.info("End test method: getRowCountProjectionCriteria");
}
@Test
public void findAllTest() throws Exception {
log.info("Start test method: findAllTest");
serviceObject.findAll();
log.info("End test method: findAllTest");
}
@After
public void cleanUp() {
//dzialService = null;
serviceObject=null;
}
public static Integer getGeneratedId() {
return generatedId;
}
public static void setGeneratedId(Integer generatedId) {
BaseServiceTest.generatedId = generatedId;
}
}