package com.javaeye.jert.domain.test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import org.dbunit.DatabaseTestCase;
import org.dbunit.database.DatabaseConnection;
import org.dbunit.database.IDatabaseConnection;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.xml.XmlDataSet;
import com.javaeye.jert.domain.Database;
import com.javaeye.jert.domain.ReportDefinition;
import com.javaeye.jert.domain.ReportInstance;
import com.javaeye.jert.domain.ResultSetOutput;
import com.javaeye.jert.domain.connection.DBCPConnectionManager;
import com.javaeye.jert.domain.query.QueryBuilder;
import com.javaeye.jert.domain.query.QueryParameter;
/**
* @author Quake Wang
* @since 2004-12-22
* @version $Revision: 1.6 $
*/
public class ReportInstanceTest extends DatabaseTestCase {
private static final String CREATE_TABLE = "DROP TABLE USER IF EXISTS; CREATE TABLE USER (USER_NAME varchar(255), EMAIL varchar(255));";
public void testGenerateStaticQueryReport() {
ReportDefinition rd = getReportDefinition();
ReportInstance instance = new ReportInstance(2);
instance.setReportDefinition(rd);
instance.generateItems(null);
ResultSetOutput output = instance.getResultSetOutput();
assertEquals(5, instance.getTotalCount());
assertEquals(2, output.getColumns().size());
assertEquals("USER_NAME", output.getHeaderNames()[0]);
assertEquals("EMAIL", output.getHeaderNames()[1]);
Object[] user1 = (Object[]) output.getColumns().get(0);
assertEquals("user1", user1[0]);
assertEquals("user1@javaeye.com", user1[1]);
Object[] user2 = (Object[]) output.getColumns().get(1);
assertEquals("user2", user2[0]);
assertEquals("user2@javaeye.com", user2[1]);
}
public void testGenerateReportStartIndex() {
ReportDefinition rd = getReportDefinition();
ReportInstance instance = new ReportInstance(2);
instance.setReportDefinition(rd);
instance.setStartIndex(2);
instance.generateItems(null);
ResultSetOutput output = instance.getResultSetOutput();
assertEquals(5, instance.getTotalCount());
assertEquals(2, output.getColumns().size());
Object[] user3 = (Object[]) output.getColumns().get(0);
assertEquals("user3", user3[0]);
assertEquals("user3@javaeye.com", user3[1]);
}
private ReportDefinition getReportDefinition() {
Database db = getDatabase();
ReportDefinition rd = new ReportDefinition();
rd.setDatabase(db);
rd.setSql("select * from user order by user_name");
rd.setQueryType(QueryBuilder.QUERY_TYPE_STATIC);
return rd;
}
public void testGenerateSimpleParameterQueryReport() {
Database db = getDatabase();
ReportDefinition rd = new ReportDefinition();
rd.setDatabase(db);
rd.setSql("select * from user where user_name = #name#");
rd.setQueryType(QueryBuilder.QUERY_TYPE_SIMPLE_PARAMETER);
rd.setupDefaultParameterDefinition();
ReportInstance instance = new ReportInstance();
instance.setReportDefinition(rd);
QueryParameter[] parameters = rd.getDefaultQueryParameters();
parameters[0].setValue("user1");
instance.generateItems(parameters);
assertEquals(1, instance.getTotalCount());
ResultSetOutput output = instance.getResultSetOutput();
Object[] user1 = (Object[]) output.getColumns().get(0);
assertEquals("user1", user1[0]);
assertEquals("user1@javaeye.com", user1[1]);
}
public void testGenerateDynamicParameterQueryReport() {
Database db = getDatabase();
ReportDefinition rd = new ReportDefinition();
rd.setDatabase(db);
rd.setSql("<plain>select * from user where 1 = 1</plain>"
+ "<dynamic type=\"isNotEmpty\" append-before=\"and user_name = \" parameter-name=\"name\"/>"
+ "<dynamic type=\"isNotEmpty\" append-before=\"and email = \" parameter-name=\"email\"/>");
rd.setQueryType(QueryBuilder.QUERY_TYPE_DYNAMIC_PARAMETER);
rd.setupDefaultParameterDefinition();
ReportInstance instance = new ReportInstance();
instance.setReportDefinition(rd);
QueryParameter[] parameters = rd.getDefaultQueryParameters();
instance.generateItems(parameters);
assertEquals(5, instance.getTotalCount());
parameters = rd.getDefaultQueryParameters();
parameters[0].setValue("user1");
instance.generateItems(parameters);
assertEquals(1, instance.getTotalCount());
parameters = rd.getDefaultQueryParameters();
parameters[0].setValue("user1");
parameters[1].setValue("user2@javaeye.com");
instance.generateItems(parameters);
assertEquals(0, instance.getTotalCount());
}
private Database getDatabase() {
Database db = new Database();
db.setDriver("org.hsqldb.jdbcDriver");
db.setUrl("jdbc:hsqldb:mem:reportdefinition_test");
db.setUsername("sa");
db.setPassword("");
db.setConnectionManager(new DBCPConnectionManager());
return db;
}
protected IDatabaseConnection getConnection() throws Exception {
Class driverClass = Class.forName("org.hsqldb.jdbcDriver");
Connection jdbcConnection = DriverManager.getConnection("jdbc:hsqldb:mem:reportdefinition_test", "sa", "");
Statement statement = jdbcConnection.createStatement();
statement.executeUpdate(CREATE_TABLE);
statement.close();
return new DatabaseConnection(jdbcConnection);
}
protected IDataSet getDataSet() throws Exception {
return new XmlDataSet(Thread.currentThread().getContextClassLoader().getResourceAsStream("com/javaeye/jert/domain/test/dataset.xml"));
}
}