/* * 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: TestGenericQueryManagerUnique.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.UniqueBean; import com.uwyn.rife.database.querymanagers.generic.beans.UniqueBeanNotNull; import java.sql.SQLException; import junit.framework.TestCase; public class TestGenericQueryManagerUnique extends TestCase { private Datasource mDatasource = null; private GenericQueryManager<UniqueBean> mUniqueManager = null; public TestGenericQueryManagerUnique(Datasource datasource, String datasourceName, String name) { super(name); mDatasource = datasource; } private UniqueBean createNewUniqueBean() { if ("org.apache.derby.jdbc.EmbeddedDriver".equals(mDatasource.getAliasedDriver())) { return new UniqueBeanNotNull(); } else { return new UniqueBean(); } } protected void setUp() throws Exception { if ("org.apache.derby.jdbc.EmbeddedDriver".equals(mDatasource.getAliasedDriver())) { mUniqueManager = (GenericQueryManager<UniqueBean>)((GenericQueryManager)GenericQueryManagerFactory.getInstance(mDatasource, UniqueBeanNotNull.class)); } else { mUniqueManager = GenericQueryManagerFactory.getInstance(mDatasource, UniqueBean.class); } int poolsize = mDatasource.getPoolsize(); // disabling pool for firebird if ("org.firebirdsql.jdbc.FBDriver".equals(mDatasource.getAliasedDriver())) { mDatasource.setPoolsize(0); } try { mUniqueManager.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 { mUniqueManager.remove(); } finally { if ("org.firebirdsql.jdbc.FBDriver".equals(mDatasource.getAliasedDriver())) { mDatasource.setPoolsize(poolsize); } } } public void testGetBaseClass() { if ("org.apache.derby.jdbc.EmbeddedDriver".equals(mDatasource.getAliasedDriver())) { assertSame(UniqueBeanNotNull.class, mUniqueManager.getBaseClass()); } else { assertSame(UniqueBean.class, mUniqueManager.getBaseClass()); } } public void testInstallCustomQuery() { int poolsize = mDatasource.getPoolsize(); // disabling pool for firebird if ("org.firebirdsql.jdbc.FBDriver".equals(mDatasource.getAliasedDriver())) { mDatasource.setPoolsize(0); } try { mUniqueManager.remove(); mUniqueManager.install(mUniqueManager.getInstallTableQuery()); } finally { if ("org.firebirdsql.jdbc.FBDriver".equals(mDatasource.getAliasedDriver())) { mDatasource.setPoolsize(poolsize); } } } public void testValidationContextUnique() { // uniqueness of individual properties UniqueBean bean1 = createNewUniqueBean(); bean1.setTestString("test_string"); bean1.setAnotherString("another_string_one"); bean1.setThirdString("third_string_one"); assertTrue(bean1.validate(mUniqueManager)); int id1 = mUniqueManager.save(bean1); bean1 = mUniqueManager.restore(id1); bean1.setTestString("test_string_one"); assertTrue(bean1.validate(mUniqueManager)); assertEquals(id1, mUniqueManager.save(bean1)); UniqueBean bean2 = createNewUniqueBean(); bean2.setTestString("test_string_one"); bean2.setAnotherString("another_string_two"); bean2.setThirdString("third_string_two"); assertFalse(bean2.validate(mUniqueManager)); try { mUniqueManager.save(bean2); fail(); } catch (DatabaseException e) { assertTrue(e.getCause() instanceof SQLException); } bean2.resetValidation(); bean2.setTestString("test_string_two"); bean2.setAnotherString("another_string_two"); assertTrue(bean2.validate(mUniqueManager)); int id2 = mUniqueManager.save(bean2); assertTrue(id1 != id2); bean1.resetValidation(); bean1.setTestString("test_string_two"); assertFalse(bean1.validate(mUniqueManager)); try { mUniqueManager.save(bean1); fail(); } catch (DatabaseException e) { assertTrue(e.getCause() instanceof SQLException); } // uniqueness of multiple properties UniqueBean bean3 = createNewUniqueBean(); bean3.setTestString("test_string_three"); bean3.setAnotherString("another_string"); bean3.setThirdString("third_string"); assertTrue(bean3.validate(mUniqueManager)); int id3 = mUniqueManager.save(bean3); bean3 = mUniqueManager.restore(id3); bean3.setAnotherString("another_string_three"); bean3.setThirdString("third_string_three"); assertTrue(bean3.validate(mUniqueManager)); assertEquals(id3, mUniqueManager.save(bean3)); UniqueBean bean4 = createNewUniqueBean(); bean4.setTestString("test_string_four"); bean4.setAnotherString("another_string_three"); bean4.setThirdString("third_string_three"); assertFalse(bean4.validate(mUniqueManager)); try { mUniqueManager.save(bean4); fail(); } catch (DatabaseException e) { assertTrue(e.getCause() instanceof SQLException); } bean4.resetValidation(); bean4.setAnotherString("another_string_four"); bean4.setThirdString("third_string_four"); assertTrue(bean4.validate(mUniqueManager)); int id4 = mUniqueManager.save(bean4); assertTrue(id3 != id4); bean3.resetValidation(); bean3.setAnotherString("another_string_four"); bean3.setThirdString("third_string_four"); assertFalse(bean3.validate(mUniqueManager)); try { mUniqueManager.save(bean3); fail(); } catch (DatabaseException e) { assertTrue(e.getCause() instanceof SQLException); } if (!"org.apache.derby.jdbc.EmbeddedDriver".equals(mDatasource.getAliasedDriver())) { UniqueBean bean5 = createNewUniqueBean(); bean5.setTestString("test_string_five"); bean5.setAnotherString("another_string_five"); assertTrue(bean5.validate(mUniqueManager)); mUniqueManager.save(bean5); UniqueBean bean6 = createNewUniqueBean(); bean6.setTestString("test_string_six"); bean6.setAnotherString("another_string_five"); assertTrue(bean6.validate(mUniqueManager)); // this is DB-specific // try // { // mUniqueManager.save(bean6); // fail(); // } // catch (DatabaseException e) // { // assertTrue(e.getCause() instanceof SQLException); // } } } public void testGroupValidationContextUnique() { // uniqueness of individual properties UniqueBean bean1 = createNewUniqueBean(); bean1.setTestString("test_string"); bean1.setAnotherString("another_string_one"); bean1.setThirdString("third_string_one"); assertTrue(bean1.validateGroup("group1", mUniqueManager)); bean1.resetValidation(); assertTrue(bean1.validateGroup("group2", mUniqueManager)); int id1 = mUniqueManager.save(bean1); bean1 = mUniqueManager.restore(id1); bean1.setTestString("test_string_one"); assertTrue(bean1.validateGroup("group1", mUniqueManager)); bean1.resetValidation(); assertTrue(bean1.validateGroup("group2", mUniqueManager)); assertEquals(id1, mUniqueManager.save(bean1)); UniqueBean bean2 = createNewUniqueBean(); bean2.setTestString("test_string_one"); bean2.setAnotherString("another_string_two"); bean2.setThirdString("third_string_two"); assertFalse(bean2.validateGroup("group1", mUniqueManager)); bean2.resetValidation(); assertFalse(bean2.validateGroup("group2", mUniqueManager)); try { mUniqueManager.save(bean2); fail(); } catch (DatabaseException e) { assertTrue(e.getCause() instanceof SQLException); } bean2.resetValidation(); bean2.setTestString("test_string_two"); bean2.setAnotherString("another_string_two"); assertTrue(bean2.validateGroup("group1", mUniqueManager)); bean2.resetValidation(); assertTrue(bean2.validateGroup("group2", mUniqueManager)); int id2 = mUniqueManager.save(bean2); assertTrue(id1 != id2); bean1.resetValidation(); bean1.setTestString("test_string_two"); assertFalse(bean1.validateGroup("group1", mUniqueManager)); bean1.resetValidation(); assertFalse(bean1.validateGroup("group2", mUniqueManager)); try { mUniqueManager.save(bean1); fail(); } catch (DatabaseException e) { assertTrue(e.getCause() instanceof SQLException); } } }