001: /*
002: * Copyright 2001-2007 Geert Bevin <gbevin[remove] at uwyn dot com> and
003: * JR Boyens <gnu-jrb[remove] at gmx dot net>
004: * Distributed under the terms of either:
005: * - the common development and distribution license (CDDL), v1.0; or
006: * - the GNU Lesser General Public License, v2.1 or later
007: * $Id: TestGenericQueryManagerUnique.java 3735 2007-05-04 23:08:07Z gbevin $
008: */
009: package com.uwyn.rife.database.querymanagers.generic;
010:
011: import com.uwyn.rife.database.Datasource;
012: import com.uwyn.rife.database.exceptions.DatabaseException;
013: import com.uwyn.rife.database.querymanagers.generic.beans.UniqueBean;
014: import com.uwyn.rife.database.querymanagers.generic.beans.UniqueBeanNotNull;
015: import java.sql.SQLException;
016: import junit.framework.TestCase;
017:
018: public class TestGenericQueryManagerUnique extends TestCase {
019: private Datasource mDatasource = null;
020:
021: private GenericQueryManager<UniqueBean> mUniqueManager = null;
022:
023: public TestGenericQueryManagerUnique(Datasource datasource,
024: String datasourceName, String name) {
025: super (name);
026: mDatasource = datasource;
027: }
028:
029: private UniqueBean createNewUniqueBean() {
030: if ("org.apache.derby.jdbc.EmbeddedDriver".equals(mDatasource
031: .getAliasedDriver())) {
032: return new UniqueBeanNotNull();
033: } else {
034: return new UniqueBean();
035: }
036: }
037:
038: protected void setUp() throws Exception {
039: if ("org.apache.derby.jdbc.EmbeddedDriver".equals(mDatasource
040: .getAliasedDriver())) {
041: mUniqueManager = (GenericQueryManager<UniqueBean>) ((GenericQueryManager) GenericQueryManagerFactory
042: .getInstance(mDatasource, UniqueBeanNotNull.class));
043: } else {
044: mUniqueManager = GenericQueryManagerFactory.getInstance(
045: mDatasource, UniqueBean.class);
046: }
047:
048: int poolsize = mDatasource.getPoolsize();
049: // disabling pool for firebird
050: if ("org.firebirdsql.jdbc.FBDriver".equals(mDatasource
051: .getAliasedDriver())) {
052: mDatasource.setPoolsize(0);
053: }
054: try {
055: mUniqueManager.install();
056: } finally {
057: if ("org.firebirdsql.jdbc.FBDriver".equals(mDatasource
058: .getAliasedDriver())) {
059: mDatasource.setPoolsize(poolsize);
060: }
061: }
062: }
063:
064: protected void tearDown() throws Exception {
065: int poolsize = mDatasource.getPoolsize();
066: // disabling pool for firebird
067: if ("org.firebirdsql.jdbc.FBDriver".equals(mDatasource
068: .getAliasedDriver())) {
069: mDatasource.setPoolsize(0);
070: }
071: try {
072: mUniqueManager.remove();
073: } finally {
074: if ("org.firebirdsql.jdbc.FBDriver".equals(mDatasource
075: .getAliasedDriver())) {
076: mDatasource.setPoolsize(poolsize);
077: }
078: }
079: }
080:
081: public void testGetBaseClass() {
082: if ("org.apache.derby.jdbc.EmbeddedDriver".equals(mDatasource
083: .getAliasedDriver())) {
084: assertSame(UniqueBeanNotNull.class, mUniqueManager
085: .getBaseClass());
086: } else {
087: assertSame(UniqueBean.class, mUniqueManager.getBaseClass());
088: }
089: }
090:
091: public void testInstallCustomQuery() {
092: int poolsize = mDatasource.getPoolsize();
093: // disabling pool for firebird
094: if ("org.firebirdsql.jdbc.FBDriver".equals(mDatasource
095: .getAliasedDriver())) {
096: mDatasource.setPoolsize(0);
097: }
098: try {
099: mUniqueManager.remove();
100:
101: mUniqueManager.install(mUniqueManager
102: .getInstallTableQuery());
103: } finally {
104: if ("org.firebirdsql.jdbc.FBDriver".equals(mDatasource
105: .getAliasedDriver())) {
106: mDatasource.setPoolsize(poolsize);
107: }
108: }
109: }
110:
111: public void testValidationContextUnique() {
112: // uniqueness of individual properties
113: UniqueBean bean1 = createNewUniqueBean();
114: bean1.setTestString("test_string");
115: bean1.setAnotherString("another_string_one");
116: bean1.setThirdString("third_string_one");
117: assertTrue(bean1.validate(mUniqueManager));
118: int id1 = mUniqueManager.save(bean1);
119:
120: bean1 = mUniqueManager.restore(id1);
121: bean1.setTestString("test_string_one");
122: assertTrue(bean1.validate(mUniqueManager));
123: assertEquals(id1, mUniqueManager.save(bean1));
124:
125: UniqueBean bean2 = createNewUniqueBean();
126: bean2.setTestString("test_string_one");
127: bean2.setAnotherString("another_string_two");
128: bean2.setThirdString("third_string_two");
129: assertFalse(bean2.validate(mUniqueManager));
130: try {
131: mUniqueManager.save(bean2);
132: fail();
133: } catch (DatabaseException e) {
134: assertTrue(e.getCause() instanceof SQLException);
135: }
136:
137: bean2.resetValidation();
138: bean2.setTestString("test_string_two");
139: bean2.setAnotherString("another_string_two");
140: assertTrue(bean2.validate(mUniqueManager));
141: int id2 = mUniqueManager.save(bean2);
142: assertTrue(id1 != id2);
143:
144: bean1.resetValidation();
145: bean1.setTestString("test_string_two");
146: assertFalse(bean1.validate(mUniqueManager));
147: try {
148: mUniqueManager.save(bean1);
149: fail();
150: } catch (DatabaseException e) {
151: assertTrue(e.getCause() instanceof SQLException);
152: }
153:
154: // uniqueness of multiple properties
155: UniqueBean bean3 = createNewUniqueBean();
156: bean3.setTestString("test_string_three");
157: bean3.setAnotherString("another_string");
158: bean3.setThirdString("third_string");
159: assertTrue(bean3.validate(mUniqueManager));
160: int id3 = mUniqueManager.save(bean3);
161:
162: bean3 = mUniqueManager.restore(id3);
163: bean3.setAnotherString("another_string_three");
164: bean3.setThirdString("third_string_three");
165: assertTrue(bean3.validate(mUniqueManager));
166: assertEquals(id3, mUniqueManager.save(bean3));
167:
168: UniqueBean bean4 = createNewUniqueBean();
169: bean4.setTestString("test_string_four");
170: bean4.setAnotherString("another_string_three");
171: bean4.setThirdString("third_string_three");
172: assertFalse(bean4.validate(mUniqueManager));
173: try {
174: mUniqueManager.save(bean4);
175: fail();
176: } catch (DatabaseException e) {
177: assertTrue(e.getCause() instanceof SQLException);
178: }
179:
180: bean4.resetValidation();
181: bean4.setAnotherString("another_string_four");
182: bean4.setThirdString("third_string_four");
183: assertTrue(bean4.validate(mUniqueManager));
184: int id4 = mUniqueManager.save(bean4);
185: assertTrue(id3 != id4);
186:
187: bean3.resetValidation();
188: bean3.setAnotherString("another_string_four");
189: bean3.setThirdString("third_string_four");
190: assertFalse(bean3.validate(mUniqueManager));
191: try {
192: mUniqueManager.save(bean3);
193: fail();
194: } catch (DatabaseException e) {
195: assertTrue(e.getCause() instanceof SQLException);
196: }
197:
198: if (!"org.apache.derby.jdbc.EmbeddedDriver".equals(mDatasource
199: .getAliasedDriver())) {
200: UniqueBean bean5 = createNewUniqueBean();
201: bean5.setTestString("test_string_five");
202: bean5.setAnotherString("another_string_five");
203: assertTrue(bean5.validate(mUniqueManager));
204: mUniqueManager.save(bean5);
205:
206: UniqueBean bean6 = createNewUniqueBean();
207: bean6.setTestString("test_string_six");
208: bean6.setAnotherString("another_string_five");
209: assertTrue(bean6.validate(mUniqueManager));
210: // this is DB-specific
211: // try
212: // {
213: // mUniqueManager.save(bean6);
214: // fail();
215: // }
216: // catch (DatabaseException e)
217: // {
218: // assertTrue(e.getCause() instanceof SQLException);
219: // }
220: }
221: }
222:
223: public void testGroupValidationContextUnique() {
224: // uniqueness of individual properties
225: UniqueBean bean1 = createNewUniqueBean();
226: bean1.setTestString("test_string");
227: bean1.setAnotherString("another_string_one");
228: bean1.setThirdString("third_string_one");
229: assertTrue(bean1.validateGroup("group1", mUniqueManager));
230: bean1.resetValidation();
231: assertTrue(bean1.validateGroup("group2", mUniqueManager));
232: int id1 = mUniqueManager.save(bean1);
233:
234: bean1 = mUniqueManager.restore(id1);
235: bean1.setTestString("test_string_one");
236: assertTrue(bean1.validateGroup("group1", mUniqueManager));
237: bean1.resetValidation();
238: assertTrue(bean1.validateGroup("group2", mUniqueManager));
239: assertEquals(id1, mUniqueManager.save(bean1));
240:
241: UniqueBean bean2 = createNewUniqueBean();
242: bean2.setTestString("test_string_one");
243: bean2.setAnotherString("another_string_two");
244: bean2.setThirdString("third_string_two");
245: assertFalse(bean2.validateGroup("group1", mUniqueManager));
246: bean2.resetValidation();
247: assertFalse(bean2.validateGroup("group2", mUniqueManager));
248: try {
249: mUniqueManager.save(bean2);
250: fail();
251: } catch (DatabaseException e) {
252: assertTrue(e.getCause() instanceof SQLException);
253: }
254:
255: bean2.resetValidation();
256: bean2.setTestString("test_string_two");
257: bean2.setAnotherString("another_string_two");
258: assertTrue(bean2.validateGroup("group1", mUniqueManager));
259: bean2.resetValidation();
260: assertTrue(bean2.validateGroup("group2", mUniqueManager));
261: int id2 = mUniqueManager.save(bean2);
262: assertTrue(id1 != id2);
263:
264: bean1.resetValidation();
265: bean1.setTestString("test_string_two");
266: assertFalse(bean1.validateGroup("group1", mUniqueManager));
267: bean1.resetValidation();
268: assertFalse(bean1.validateGroup("group2", mUniqueManager));
269: try {
270: mUniqueManager.save(bean1);
271: fail();
272: } catch (DatabaseException e) {
273: assertTrue(e.getCause() instanceof SQLException);
274: }
275: }
276: }
|