/*
* Copyright 2001-2008 Geert Bevin (gbevin[remove] at uwyn dot com) and
* JR Boyens <gnu-jrb[remove] at gmx dot net>
* Licensed under the Apache License, Version 2.0 (the "License")
* $Id: TestGenericQueryManagerDelegate.java 3918 2008-04-14 17:35:35Z gbevin $
*/
package com.uwyn.rife.database.querymanagers.generic;
import com.uwyn.rife.database.Datasource;
import com.uwyn.rife.database.DbRowProcessor;
import com.uwyn.rife.database.querymanagers.generic.beans.ChildBean;
import com.uwyn.rife.database.querymanagers.generic.beans.ConstrainedBean;
import com.uwyn.rife.database.querymanagers.generic.beans.LinkBean;
import com.uwyn.rife.database.querymanagers.generic.beans.SimpleBean;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import junit.framework.TestCase;
public class TestGenericQueryManagerDelegate extends TestCase
{
private Datasource mDatasource = null;
class GQMSimpleBean extends GenericQueryManagerDelegate<SimpleBean>
{
GQMSimpleBean(Datasource datasource)
{
super(datasource, SimpleBean.class);
}
}
class GQMLinkBean extends GenericQueryManagerDelegate<LinkBean>
{
GQMLinkBean(Datasource datasource)
{
super(datasource, LinkBean.class);
}
}
class GQMChildBean extends GenericQueryManagerDelegate<ChildBean>
{
GQMChildBean(Datasource datasource)
{
super(datasource, ChildBean.class);
}
}
class GQMConstrainedBean extends GenericQueryManagerDelegate<ConstrainedBean>
{
GQMConstrainedBean(Datasource datasource)
{
super(datasource, ConstrainedBean.class);
}
}
private GQMSimpleBean mManager = null;
private GQMLinkBean mLinkManager = null;
private GQMChildBean mChildManager = null;
private GQMConstrainedBean mConstrainedManager = null;
public TestGenericQueryManagerDelegate(Datasource datasource, String datasourceName, String name)
{
super(name);
mDatasource = datasource;
}
protected void setUp()
throws Exception
{
mManager = new GQMSimpleBean(mDatasource);
mLinkManager = new GQMLinkBean(mDatasource);
mChildManager = new GQMChildBean(mDatasource);
mConstrainedManager = new GQMConstrainedBean(mDatasource);
int poolsize = mDatasource.getPoolsize();
// disabling pool for firebird
if ("org.firebirdsql.jdbc.FBDriver".equals(mDatasource.getAliasedDriver()))
{
mDatasource.setPoolsize(0);
}
try
{
mManager.install();
mLinkManager.install();
mChildManager.install();
mConstrainedManager.install();
}
finally
{
if ("org.firebirdsql.jdbc.FBDriver".equals(mDatasource.getAliasedDriver()))
{
mDatasource.setPoolsize(poolsize);
}
}
}
protected void tearDown()
throws Exception
{
int poolsize = mDatasource.getPoolsize();
// disabling pool for firebird
if ("org.firebirdsql.jdbc.FBDriver".equals(mDatasource.getAliasedDriver()))
{
mDatasource.setPoolsize(0);
}
try
{
mConstrainedManager.remove();
mManager.remove();
mLinkManager.remove();
mChildManager.remove();
}
finally
{
if ("org.firebirdsql.jdbc.FBDriver".equals(mDatasource.getAliasedDriver()))
{
mDatasource.setPoolsize(poolsize);
}
}
}
public void testSaveRestore()
{
SimpleBean bean = new SimpleBean();
SimpleBean newbean = null;
bean.setTestString("This is my test string");
int id = mManager.save(bean);
newbean = mManager.restore(id);
assertTrue(newbean != null);
assertTrue(newbean != bean);
assertEquals(newbean.getTestString(), bean.getTestString());
assertEquals(newbean.getId(), id);
bean.setId(id);
bean.setTestString("This is a new test string");
assertEquals(mManager.save(bean), id);
assertEquals(bean.getId(), id);
newbean = mManager.restore(id);
assertTrue(newbean != null);
assertTrue(newbean != bean);
assertEquals(newbean.getTestString(), "This is a new test string");
bean.setId(999999);
bean.setTestString("This is another test string");
assertFalse(999999 == mManager.save(bean));
assertEquals(bean.getId(), id+1);
}
public void testSaveRestoreConstrained()
{
ConstrainedBean bean = new ConstrainedBean();
ConstrainedBean newbean = null;
bean.setTestString("This is my test string");
int id = mConstrainedManager.save(bean);
newbean = mConstrainedManager.restore(id);
assertTrue(newbean != null);
assertTrue(newbean != bean);
assertEquals(newbean.getTestString(), bean.getTestString());
assertEquals(newbean.getIdentifier(), id);
bean.setIdentifier(id);
bean.setTestString("This is a new test string");
assertEquals(mConstrainedManager.save(bean), id);
assertEquals(bean.getIdentifier(), id);
newbean = mConstrainedManager.restore(id);
assertTrue(newbean != null);
assertTrue(newbean != bean);
assertEquals(newbean.getTestString(), "This is a new test string");
bean.setIdentifier(999999);
bean.setTestString("This is another test string");
assertFalse(999999 == mConstrainedManager.save(bean));
assertEquals(bean.getIdentifier(), id+1);
}
public void testDelete()
{
SimpleBean bean = new SimpleBean();
bean.setTestString("This is my test string");
int id1 = mManager.save(bean);
assertTrue(mManager.restore(id1) != null);
mManager.delete(id1);
assertTrue(mManager.restoreFirst(mManager.getRestoreQuery(id1)) == null);
int id2 = mManager.save(bean);
assertTrue(mManager.restoreFirst(mManager.getRestoreQuery(id2)) != null);
mManager.delete(mManager.getDeleteQuery(id2));
assertTrue(mManager.restore(id2) == null);
}
public void testRestore()
{
SimpleBean bean1 = new SimpleBean();
SimpleBean bean2 = new SimpleBean();
SimpleBean bean3 = new SimpleBean();
bean1.setTestString("This is bean1");
bean2.setTestString("This is bean2");
bean3.setTestString("This is bean3");
mManager.save(bean1);
mManager.save(bean2);
mManager.save(bean3);
List<SimpleBean> list = mManager.restore();
assertEquals(list.size(), 3);
for (SimpleBean bean : list)
{
assertTrue(bean != null);
assertTrue(bean != bean1 || bean != bean2 || bean != bean3);
assertTrue(
bean.getTestString().equals("This is bean1") ||
bean.getTestString().equals("This is bean2") ||
bean.getTestString().equals("This is bean3") );
}
}
public void testRestoreRowProcessor()
{
SimpleBean bean1 = new SimpleBean();
SimpleBean bean2 = new SimpleBean();
SimpleBean bean3 = new SimpleBean();
bean1.setTestString("This is bean1");
bean2.setTestString("This is bean2");
bean3.setTestString("This is bean3");
mManager.save(bean1);
mManager.save(bean2);
mManager.save(bean3);
final int[] count = new int[] {0};
mManager.restore(new DbRowProcessor() {
public boolean processRow(ResultSet resultSet)
throws SQLException
{
count[0]++;
String test_string = resultSet.getString("testString");
assertTrue(
test_string.equals("This is bean1") ||
test_string.equals("This is bean2") ||
test_string.equals("This is bean3") );
return true;
}
});
assertEquals(count[0], 3);
}
public void testRestoreQueryRowProcessor()
{
SimpleBean bean1 = new SimpleBean();
SimpleBean bean2 = new SimpleBean();
SimpleBean bean3 = new SimpleBean();
bean1.setTestString("This is bean1");
bean2.setTestString("This is bean2");
bean3.setTestString("This is bean3");
mManager.save(bean1);
mManager.save(bean2);
mManager.save(bean3);
final int[] count = new int[] {0};
mManager.restore(mManager.getRestoreQuery().where("testString", "LIKE", "%bean2"), new DbRowProcessor() {
public boolean processRow(ResultSet resultSet)
throws SQLException
{
count[0]++;
String test_string = resultSet.getString("testString");
assertTrue(test_string.equals("This is bean2"));
return true;
}
});
assertEquals(count[0], 1);
}
public void testChildBean()
{
ChildBean bean = new ChildBean();
bean.setParentString("This is bean");
bean.setChildString("This is childbean");
int id = mChildManager.save(bean);
ChildBean rbean = mChildManager.restore(id);
assertEquals(rbean.getParentString(), bean.getParentString());
assertEquals(rbean.getChildString(), bean.getChildString());
}
public void testCount()
{
SimpleBean bean1 = new SimpleBean();
SimpleBean bean2 = new SimpleBean();
SimpleBean bean3 = new SimpleBean();
SimpleBean bean4 = new SimpleBean();
SimpleBean bean5 = new SimpleBean();
bean1.setTestString("bean set 1");
bean2.setTestString("bean set 1");
bean3.setTestString("bean set 1");
bean4.setTestString("bean set 2");
bean5.setTestString("bean set 2");
mManager.save(bean1);
mManager.save(bean2);
mManager.save(bean3);
mManager.save(bean4);
mManager.save(bean5);
assertEquals(mManager.count(), 5);
mManager.delete(bean1.getId());
mManager.delete(bean2.getId());
mManager.delete(bean3.getId());
assertEquals(mManager.count(), 2);
}
}