/*
* 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: TestGenericQueryManagerConstrained.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.exceptions.DatabaseException;
import com.uwyn.rife.database.querymanagers.generic.beans.ConstrainedBean;
import com.uwyn.rife.database.querymanagers.generic.beans.LinkBean;
import com.uwyn.rife.site.ValidationError;
import java.sql.SQLException;
import junit.framework.TestCase;
public class TestGenericQueryManagerConstrained extends TestCase
{
private Datasource mDatasource = null;
private GenericQueryManager<LinkBean> mLinkManager = null;
private GenericQueryManager<ConstrainedBean> mConstrainedManager = null;
public TestGenericQueryManagerConstrained(Datasource datasource, String datasourceName, String name)
{
super(name);
mDatasource = datasource;
}
protected void setUp()
throws Exception
{
mLinkManager = GenericQueryManagerFactory.getInstance(mDatasource, LinkBean.class);
mConstrainedManager = GenericQueryManagerFactory.getInstance(mDatasource, ConstrainedBean.class);
int poolsize = mDatasource.getPoolsize();
// disabling pool for firebird
if ("org.firebirdsql.jdbc.FBDriver".equals(mDatasource.getAliasedDriver()))
{
mDatasource.setPoolsize(0);
}
try
{
mLinkManager.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();
mLinkManager.remove();
}
finally
{
if ("org.firebirdsql.jdbc.FBDriver".equals(mDatasource.getAliasedDriver()))
{
mDatasource.setPoolsize(poolsize);
}
}
}
public void testGetBaseClass()
{
assertSame(LinkBean.class, mLinkManager.getBaseClass());
assertSame(ConstrainedBean.class, mConstrainedManager.getBaseClass());
}
public void testInstallCustomQuery()
{
int poolsize = mDatasource.getPoolsize();
// disabling pool for firebird
if ("org.firebirdsql.jdbc.FBDriver".equals(mDatasource.getAliasedDriver()))
{
mDatasource.setPoolsize(0);
}
try
{
mConstrainedManager.remove();
mLinkManager.remove();
mLinkManager.install(mLinkManager.getInstallTableQuery());
mConstrainedManager.install(mConstrainedManager.getInstallTableQuery());
}
finally
{
if ("org.firebirdsql.jdbc.FBDriver".equals(mDatasource.getAliasedDriver()))
{
mDatasource.setPoolsize(poolsize);
}
}
}
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 testValidationContextManyToOne()
{
LinkBean linkbean1 = new LinkBean();
LinkBean linkbean2 = new LinkBean();
LinkBean linkbean3 = new LinkBean();
linkbean1.setTestString("linkbean 1");
linkbean2.setTestString("linkbean 2");
linkbean3.setTestString("linkbean 3");
mLinkManager.save(linkbean1);
mLinkManager.save(linkbean2);
mLinkManager.save(linkbean3);
ConstrainedBean bean1 = new ConstrainedBean();
bean1.setTestString("test_string1");
assertTrue(bean1.validate(mConstrainedManager));
int id1 = mConstrainedManager.save(bean1);
ConstrainedBean bean2 = new ConstrainedBean();
bean2.setTestString("test_string2");
bean2.setLinkBean(linkbean1.getId());
assertTrue(bean2.validate(mConstrainedManager));
int id2 = mConstrainedManager.save(bean2);
assertTrue(id1 != id2);
ConstrainedBean bean3 = new ConstrainedBean();
bean3.setTestString("test_string2");
bean3.setLinkBean(23);
assertFalse(bean3.validate(mConstrainedManager));
ValidationError error = (ValidationError)bean3.getValidationErrors().iterator().next();
assertEquals(error.getSubject(), "linkBean");
assertEquals(error.getIdentifier(), ValidationError.IDENTIFIER_INVALID);
if (!"com.mysql.jdbc.Driver".equals(mDatasource.getAliasedDriver()))
{
try
{
mConstrainedManager.save(bean3);
fail("exception not thrown");
}
catch (DatabaseException e)
{
assertTrue(e.getCause() instanceof SQLException);
}
}
bean3.resetValidation();
bean3.setLinkBean(linkbean3.getId());
assertTrue(bean3.validate(mConstrainedManager));
int id3 = mConstrainedManager.save(bean3);
assertTrue(id2 != id3);
}
}