/* * 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: TestGenericQueryManagerCallbacks.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.querymanagers.generic.beans.CallbacksBean; import com.uwyn.rife.database.querymanagers.generic.beans.CallbacksProviderBean; import com.uwyn.rife.database.querymanagers.generic.beans.CallbacksSparseBean; import com.uwyn.rife.tools.StringUtils; import java.util.Iterator; import java.util.List; import java.util.Map; import junit.framework.TestCase; public class TestGenericQueryManagerCallbacks extends TestCase { private Datasource mDatasource = null; private GenericQueryManager<CallbacksBean> mCallbacksManager = null; private GenericQueryManager<CallbacksSparseBean> mCallbacksSparseManager = null; private GenericQueryManager<CallbacksProviderBean> mCallbacksProviderManager = null; public TestGenericQueryManagerCallbacks(Datasource datasource, String datasourceName, String name) { super(name); mDatasource = datasource; } protected void setUp() throws Exception { mCallbacksManager = GenericQueryManagerFactory.getInstance(mDatasource, CallbacksBean.class); mCallbacksSparseManager = GenericQueryManagerFactory.getInstance(mDatasource, CallbacksSparseBean.class); mCallbacksProviderManager = GenericQueryManagerFactory.getInstance(mDatasource, CallbacksProviderBean.class); int poolsize = mDatasource.getPoolsize(); // disabling pool for firebird if ("org.firebirdsql.jdbc.FBDriver".equals(mDatasource.getAliasedDriver())) { mDatasource.setPoolsize(0); } try { AggregatingCallbacksBeanListener listener = new AggregatingCallbacksBeanListener(); mCallbacksManager.addListener(listener); mCallbacksManager.install(); assertEquals(1, listener.getHistory().size()); assertEquals("installed0", listener.getHistory().entrySet().iterator().next().getKey()); mCallbacksSparseManager.install(); mCallbacksProviderManager.install(); } finally { mCallbacksManager.removeListeners(); 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 { AggregatingCallbacksBeanListener listener = new AggregatingCallbacksBeanListener(); mCallbacksManager.addListener(listener); mCallbacksManager.remove(); assertEquals(1, listener.getHistory().size()); assertEquals("removed0", listener.getHistory().entrySet().iterator().next().getKey()); mCallbacksSparseManager.remove(); mCallbacksProviderManager.remove(); } finally { mCallbacksManager.removeListeners(); if ("org.firebirdsql.jdbc.FBDriver".equals(mDatasource.getAliasedDriver())) { mDatasource.setPoolsize(poolsize); } } } public void testGetBaseClass() { assertSame(CallbacksBean.class, mCallbacksManager.getBaseClass()); assertSame(CallbacksSparseBean.class, mCallbacksSparseManager.getBaseClass()); assertSame(CallbacksProviderBean.class, mCallbacksProviderManager.getBaseClass()); } public void testInstallCustomQuery() { int poolsize = mDatasource.getPoolsize(); // disabling pool for firebird if ("org.firebirdsql.jdbc.FBDriver".equals(mDatasource.getAliasedDriver())) { mDatasource.setPoolsize(0); } try { mCallbacksManager.remove(); mCallbacksSparseManager.remove(); mCallbacksProviderManager.remove(); mCallbacksManager.install(mCallbacksManager.getInstallTableQuery()); mCallbacksSparseManager.install(mCallbacksSparseManager.getInstallTableQuery()); mCallbacksProviderManager.install(mCallbacksProviderManager.getInstallTableQuery()); } finally { if ("org.firebirdsql.jdbc.FBDriver".equals(mDatasource.getAliasedDriver())) { mDatasource.setPoolsize(poolsize); } } } public void testValidateCallbacks() { CallbacksBean.clearExecuteCallbacks(); CallbacksBean bean = new CallbacksBean(); bean.setTestString("This is my test string"); mCallbacksManager.validate(bean); assertEquals("beforeValidate -1;This is my test string\n"+ "afterValidate -1;This is my test string", StringUtils.join(CallbacksBean.getExecutedCallbacks(), "\n")); CallbacksBean.clearExecuteCallbacks(); assertEquals("", StringUtils.join(CallbacksBean.getExecutedCallbacks(), "\n")); bean.setTestString("This is a new test string"); mCallbacksManager.validate(bean); assertEquals("beforeValidate -1;This is a new test string\n"+ "afterValidate -1;This is a new test string", StringUtils.join(CallbacksBean.getExecutedCallbacks(), "\n")); CallbacksBean.clearExecuteCallbacks(); assertEquals("", StringUtils.join(CallbacksBean.getExecutedCallbacks(), "\n")); bean.setId(999999); bean.setTestString("This is another test string"); mCallbacksManager.validate(bean); assertEquals("beforeValidate 999999;This is another test string\n"+ "afterValidate 999999;This is another test string", StringUtils.join(CallbacksBean.getExecutedCallbacks(), "\n")); CallbacksBean.clearExecuteCallbacks(); } public void testValidateCallbacksReturns() { CallbacksBean.clearExecuteCallbacks(); CallbacksBean bean = new CallbacksBean(); bean.setTestString("This is my test string"); bean.setBeforeValidateReturn(false); mCallbacksManager.validate(bean); assertEquals("beforeValidate -1;This is my test string", StringUtils.join(CallbacksBean.getExecutedCallbacks(), "\n")); CallbacksBean.clearExecuteCallbacks(); assertEquals("", StringUtils.join(CallbacksBean.getExecutedCallbacks(), "\n")); bean.setBeforeValidateReturn(true); bean.setAfterValidateReturn(false); mCallbacksManager.validate(bean); assertEquals("beforeValidate -1;This is my test string\n"+ "afterValidate -1;This is my test string", StringUtils.join(CallbacksBean.getExecutedCallbacks(), "\n")); CallbacksBean.clearExecuteCallbacks(); } public void testSaveCallbacks() { CallbacksBean.clearExecuteCallbacks(); CallbacksBean bean = new CallbacksBean(); bean.setTestString("This is my test string"); int id = mCallbacksManager.save(bean); assertEquals("beforeSave -1;This is my test string\n"+ "beforeInsert -1;This is my test string\n"+ "afterInsert true "+id+";This is my test string\n"+ "afterSave true "+id+";This is my test string", StringUtils.join(CallbacksBean.getExecutedCallbacks(), "\n")); CallbacksBean.clearExecuteCallbacks(); assertEquals("", StringUtils.join(CallbacksBean.getExecutedCallbacks(), "\n")); bean.setTestString("This is a new test string"); id = mCallbacksManager.save(bean); assertEquals("beforeSave "+id+";This is a new test string\n"+ "beforeUpdate "+id+";This is a new test string\n"+ "afterUpdate true "+id+";This is a new test string\n"+ "afterSave true "+id+";This is a new test string", StringUtils.join(CallbacksBean.getExecutedCallbacks(), "\n")); CallbacksBean.clearExecuteCallbacks(); assertEquals("", StringUtils.join(CallbacksBean.getExecutedCallbacks(), "\n")); bean.setId(999999); bean.setTestString("This is another test string"); id = mCallbacksManager.save(bean); assertEquals("beforeSave 999999;This is another test string\n"+ "beforeUpdate 999999;This is another test string\n"+ "afterUpdate false 999999;This is another test string\n"+ "beforeInsert 999999;This is another test string\n"+ "afterInsert true "+id+";This is another test string\n"+ "afterSave true "+id+";This is another test string", StringUtils.join(CallbacksBean.getExecutedCallbacks(), "\n")); } public void testSaveCallbacksReturns() { CallbacksBean.clearExecuteCallbacks(); CallbacksBean bean = new CallbacksBean(); bean.setTestString("This is my test string"); // test immediate inserts bean.setBeforeSaveReturn(false); mCallbacksManager.save(bean); assertEquals("beforeSave -1;This is my test string", StringUtils.join(CallbacksBean.getExecutedCallbacks(), "\n")); assertNull(mCallbacksManager.restore(1)); CallbacksBean.clearExecuteCallbacks(); assertEquals("", StringUtils.join(CallbacksBean.getExecutedCallbacks(), "\n")); bean.setBeforeSaveReturn(true); bean.setBeforeInsertReturn(false); mCallbacksManager.save(bean); assertEquals("beforeSave -1;This is my test string\n"+ "beforeInsert -1;This is my test string", StringUtils.join(CallbacksBean.getExecutedCallbacks(), "\n")); assertNull(mCallbacksManager.restore(1)); CallbacksBean.clearExecuteCallbacks(); assertEquals("", StringUtils.join(CallbacksBean.getExecutedCallbacks(), "\n")); bean.setBeforeInsertReturn(true); bean.setAfterInsertReturn(false); int id = mCallbacksManager.save(bean); assertEquals("beforeSave -1;This is my test string\n"+ "beforeInsert -1;This is my test string\n"+ "afterInsert true "+id+";This is my test string", StringUtils.join(CallbacksBean.getExecutedCallbacks(), "\n")); assertNotNull(mCallbacksManager.restore(id)); // test updates CallbacksBean.clearExecuteCallbacks(); assertEquals("", StringUtils.join(CallbacksBean.getExecutedCallbacks(), "\n")); bean.setTestString("This is a new test string"); bean.setBeforeUpdateReturn(false); bean.setAfterInsertReturn(true); assertEquals(-1, mCallbacksManager.save(bean)); assertEquals("beforeSave "+id+";This is a new test string\n"+ "beforeUpdate "+id+";This is a new test string", StringUtils.join(CallbacksBean.getExecutedCallbacks(), "\n")); assertEquals("This is my test string", mCallbacksManager.restore(id).getTestString()); CallbacksBean.clearExecuteCallbacks(); assertEquals("", StringUtils.join(CallbacksBean.getExecutedCallbacks(), "\n")); bean.setBeforeUpdateReturn(true); bean.setAfterUpdateReturn(false); assertEquals(id, mCallbacksManager.save(bean)); assertEquals("beforeSave "+id+";This is a new test string\n"+ "beforeUpdate "+id+";This is a new test string\n"+ "afterUpdate true "+id+";This is a new test string", StringUtils.join(CallbacksBean.getExecutedCallbacks(), "\n")); assertEquals("This is a new test string", mCallbacksManager.restore(id).getTestString()); // test insert after failed update CallbacksBean.clearExecuteCallbacks(); assertEquals("", StringUtils.join(CallbacksBean.getExecutedCallbacks(), "\n")); bean.setId(999999); bean.setTestString("This is another test string"); bean.setAfterUpdateReturn(true); bean.setBeforeInsertReturn(false); assertEquals(-1, mCallbacksManager.save(bean)); assertEquals("beforeSave 999999;This is another test string\n"+ "beforeUpdate 999999;This is another test string\n"+ "afterUpdate false 999999;This is another test string\n"+ "beforeInsert 999999;This is another test string", StringUtils.join(CallbacksBean.getExecutedCallbacks(), "\n")); assertNull(mCallbacksManager.restore(999999)); CallbacksBean.clearExecuteCallbacks(); assertEquals("", StringUtils.join(CallbacksBean.getExecutedCallbacks(), "\n")); bean.setBeforeInsertReturn(true); bean.setAfterInsertReturn(false); assertEquals(id+1, mCallbacksManager.save(bean)); id = id+1; assertEquals("beforeSave 999999;This is another test string\n"+ "beforeUpdate 999999;This is another test string\n"+ "afterUpdate false 999999;This is another test string\n"+ "beforeInsert 999999;This is another test string\n"+ "afterInsert true "+id+";This is another test string", StringUtils.join(CallbacksBean.getExecutedCallbacks(), "\n")); assertNotNull(mCallbacksManager.restore(id)); } public void testSaveCallbacksSparse() { CallbacksSparseBean bean = new CallbacksSparseBean(); bean.setId(1000); bean.setTestString("Test String"); int id = mCallbacksSparseManager.save(bean); assertEquals("beforeSave "+id+";Test String\n"+ "beforeInsert "+id+";Test String\n"+ "afterInsert true "+id+";Test String\n"+ "afterSave true "+id+";Test String", StringUtils.join(bean.getExecutedCallbacks(), "\n")); bean.clearExecuteCallbacks(); assertEquals("", StringUtils.join(bean.getExecutedCallbacks(), "\n")); bean.setTestString("This is a new test string"); id = mCallbacksSparseManager.save(bean); assertEquals("beforeSave "+id+";This is a new test string\n"+ "beforeInsert "+id+";This is a new test string\n"+ "afterInsert false "+id+";This is a new test string\n"+ "beforeUpdate "+id+";This is a new test string\n"+ "afterUpdate true "+id+";This is a new test string\n"+ "afterSave true "+id+";This is a new test string", StringUtils.join(bean.getExecutedCallbacks(), "\n")); } public void testSaveCallbacksSparseReturns() { CallbacksSparseBean bean = new CallbacksSparseBean(); bean.setId(1000); bean.setTestString("Test String"); int id = 1000; // test immediate insert bean.setBeforeSaveReturn(false); assertEquals(-1, mCallbacksSparseManager.save(bean)); assertEquals("beforeSave "+id+";Test String", StringUtils.join(bean.getExecutedCallbacks(), "\n")); bean.clearExecuteCallbacks(); assertEquals("", StringUtils.join(bean.getExecutedCallbacks(), "\n")); bean.setBeforeSaveReturn(true); bean.setBeforeInsertReturn(false); assertEquals(-1, mCallbacksSparseManager.save(bean)); assertEquals("beforeSave "+id+";Test String\n"+ "beforeInsert "+id+";Test String", StringUtils.join(bean.getExecutedCallbacks(), "\n")); bean.clearExecuteCallbacks(); assertEquals("", StringUtils.join(bean.getExecutedCallbacks(), "\n")); bean.setBeforeInsertReturn(true); bean.setAfterInsertReturn(false); assertEquals(id, mCallbacksSparseManager.save(bean)); assertEquals("beforeSave "+id+";Test String\n"+ "beforeInsert "+id+";Test String\n"+ "afterInsert true "+id+";Test String", StringUtils.join(bean.getExecutedCallbacks(), "\n")); bean.clearExecuteCallbacks(); assertEquals("", StringUtils.join(bean.getExecutedCallbacks(), "\n")); // test update after failed insert bean.setTestString("This is a new test string"); bean.clearExecuteCallbacks(); assertEquals("", StringUtils.join(bean.getExecutedCallbacks(), "\n")); bean.setAfterInsertReturn(true); bean.setBeforeUpdateReturn(false); assertEquals(-1, mCallbacksSparseManager.save(bean)); assertEquals("beforeSave "+id+";This is a new test string\n"+ "beforeInsert "+id+";This is a new test string\n"+ "afterInsert false "+id+";This is a new test string\n"+ "beforeUpdate "+id+";This is a new test string", StringUtils.join(bean.getExecutedCallbacks(), "\n")); bean.clearExecuteCallbacks(); assertEquals("", StringUtils.join(bean.getExecutedCallbacks(), "\n")); bean.setBeforeUpdateReturn(true); bean.setAfterUpdateReturn(false); assertEquals(id, mCallbacksSparseManager.save(bean)); assertEquals("beforeSave "+id+";This is a new test string\n"+ "beforeInsert "+id+";This is a new test string\n"+ "afterInsert false "+id+";This is a new test string\n"+ "beforeUpdate "+id+";This is a new test string\n"+ "afterUpdate true "+id+";This is a new test string", StringUtils.join(bean.getExecutedCallbacks(), "\n")); } public void testSaveListeners() { CallbacksBean.clearExecuteCallbacks(); AggregatingCallbacksBeanListener listener = new AggregatingCallbacksBeanListener(); mCallbacksManager.addListener(listener); try { CallbacksBean bean = new CallbacksBean(); bean.setTestString("This is my test string"); int id = mCallbacksManager.save(bean); Map<String, Object> history = listener.getHistory(); assertEquals(1, history.size()); Map.Entry<String, Object> entry = history.entrySet().iterator().next(); assertEquals("inserted0", entry.getKey()); assertSame(bean, entry.getValue()); assertEquals("beforeSave -1;This is my test string\n"+ "beforeInsert -1;This is my test string\n"+ "afterInsert true "+id+";listener inserted\n"+ "afterSave true "+id+";listener inserted", StringUtils.join(CallbacksBean.getExecutedCallbacks(), "\n")); CallbacksBean.clearExecuteCallbacks(); listener.clearHistory(); assertEquals("", StringUtils.join(CallbacksBean.getExecutedCallbacks(), "\n")); bean.setTestString("This is a new test string"); id = mCallbacksManager.save(bean); assertEquals(1, history.size()); entry = history.entrySet().iterator().next(); assertEquals("updated0", entry.getKey()); assertSame(bean, entry.getValue()); assertEquals("beforeSave "+id+";This is a new test string\n"+ "beforeUpdate "+id+";This is a new test string\n"+ "afterUpdate true "+id+";listener updated\n"+ "afterSave true "+id+";listener updated", StringUtils.join(CallbacksBean.getExecutedCallbacks(), "\n")); CallbacksBean.clearExecuteCallbacks(); listener.clearHistory(); assertEquals("", StringUtils.join(CallbacksBean.getExecutedCallbacks(), "\n")); bean.setId(999999); bean.setTestString("This is another test string"); id = mCallbacksManager.save(bean); assertEquals(1, history.size()); entry = history.entrySet().iterator().next(); assertEquals("inserted0", entry.getKey()); assertSame(bean, entry.getValue()); assertEquals("beforeSave 999999;This is another test string\n"+ "beforeUpdate 999999;This is another test string\n"+ "afterUpdate false 999999;This is another test string\n"+ "beforeInsert 999999;This is another test string\n"+ "afterInsert true "+id+";listener inserted\n"+ "afterSave true "+id+";listener inserted", StringUtils.join(CallbacksBean.getExecutedCallbacks(), "\n")); } finally { mCallbacksManager.removeListeners(); } } public void testInsertCallbacks() { CallbacksBean.clearExecuteCallbacks(); CallbacksBean bean = new CallbacksBean(); bean.setTestString("This is my test string"); int id = mCallbacksManager.insert(bean); assertEquals("beforeInsert -1;This is my test string\n"+ "afterInsert true "+id+";This is my test string", StringUtils.join(CallbacksBean.getExecutedCallbacks(), "\n")); } public void testInsertCallbacksReturns() { CallbacksBean.clearExecuteCallbacks(); CallbacksBean bean = new CallbacksBean(); bean.setTestString("This is my test string"); bean.setBeforeInsertReturn(false); mCallbacksManager.insert(bean); assertEquals("beforeInsert -1;This is my test string", StringUtils.join(CallbacksBean.getExecutedCallbacks(), "\n")); assertNull(mCallbacksManager.restore(1)); } public void testUpdateCallbacks() { CallbacksBean.clearExecuteCallbacks(); CallbacksBean bean = new CallbacksBean(); bean.setTestString("This is my test string"); mCallbacksManager.update(bean); assertEquals("beforeUpdate -1;This is my test string\n"+ "afterUpdate false -1;This is my test string", StringUtils.join(CallbacksBean.getExecutedCallbacks(), "\n")); int id = mCallbacksManager.insert(bean); CallbacksBean.clearExecuteCallbacks(); assertEquals("", StringUtils.join(CallbacksBean.getExecutedCallbacks(), "\n")); bean.setTestString("This is a new test string"); mCallbacksManager.update(bean); assertEquals("beforeUpdate "+id+";This is a new test string\n"+ "afterUpdate true "+id+";This is a new test string", StringUtils.join(CallbacksBean.getExecutedCallbacks(), "\n")); } public void testUpdateCallbacksReturns() { CallbacksBean.clearExecuteCallbacks(); CallbacksBean bean = new CallbacksBean(); bean.setTestString("This is my test string"); int id = mCallbacksManager.insert(bean); CallbacksBean.clearExecuteCallbacks(); assertEquals("", StringUtils.join(CallbacksBean.getExecutedCallbacks(), "\n")); bean.setTestString("This is a new test string"); bean.setBeforeUpdateReturn(false); mCallbacksManager.update(bean); assertEquals("beforeUpdate "+id+";This is a new test string", StringUtils.join(CallbacksBean.getExecutedCallbacks(), "\n")); assertEquals("This is my test string", mCallbacksManager.restore(id).getTestString()); } public void testDeleteCallbacks() { CallbacksBean.clearExecuteCallbacks(); CallbacksBean bean = new CallbacksBean(); bean.setTestString("This is my test string"); int id = mCallbacksManager.save(bean); CallbacksBean.clearExecuteCallbacks(); assertEquals("", StringUtils.join(CallbacksBean.getExecutedCallbacks(), "\n")); mCallbacksManager.delete(id); assertEquals("beforeDelete "+id+"\n"+ "afterDelete true "+id+"", StringUtils.join(CallbacksBean.getExecutedCallbacks(), "\n")); } public void testDeleteCallbacksReturns() { CallbacksBean.clearExecuteCallbacks(); CallbacksBean bean = new CallbacksBean(); bean.setTestString("This is my test string"); int id = mCallbacksManager.save(bean); CallbacksBean.clearExecuteCallbacks(); assertEquals("", StringUtils.join(CallbacksBean.getExecutedCallbacks(), "\n")); CallbacksBean.setBeforeDeleteReturn(false); mCallbacksManager.delete(id); assertEquals("beforeDelete "+id+"", StringUtils.join(CallbacksBean.getExecutedCallbacks(), "\n")); assertNotNull(mCallbacksManager.restore(id)); CallbacksBean.setBeforeDeleteReturn(true); } public void testDeleteListeners() { CallbacksBean.clearExecuteCallbacks(); CallbacksBean bean = new CallbacksBean(); bean.setTestString("This is my test string"); int id = mCallbacksManager.save(bean); CallbacksBean.clearExecuteCallbacks(); assertEquals("", StringUtils.join(CallbacksBean.getExecutedCallbacks(), "\n")); AggregatingCallbacksBeanListener listener = new AggregatingCallbacksBeanListener(); try { mCallbacksManager.addListener(listener); mCallbacksManager.delete(id); Map<String, Object> history = listener.getHistory(); assertEquals(1, history.size()); Map.Entry<String, Object> entry = history.entrySet().iterator().next(); assertEquals("deleted0", entry.getKey()); assertEquals(id, entry.getValue()); assertEquals("beforeDelete "+id+"\n"+ "afterDelete true "+id+"", StringUtils.join(CallbacksBean.getExecutedCallbacks(), "\n")); } finally { mCallbacksManager.removeListeners(); } } public void testRestoreCallbacks() { CallbacksBean.clearExecuteCallbacks(); CallbacksBean bean1 = new CallbacksBean(); CallbacksBean bean2 = new CallbacksBean(); CallbacksBean bean3 = new CallbacksBean(); bean1.setTestString("This is bean1"); bean2.setTestString("This is bean2"); bean3.setTestString("This is bean3"); int id1 = mCallbacksManager.save(bean1); int id2 = mCallbacksManager.save(bean2); int id3 = mCallbacksManager.save(bean3); CallbacksBean.clearExecuteCallbacks(); // restore all beans assertEquals(3, mCallbacksManager.restore(mCallbacksManager.getRestoreQuery().orderBy("id")).size()); assertEquals("afterRestore "+id1+";This is bean1\n"+ "afterRestore "+id2+";This is bean2\n"+ "afterRestore "+id3+";This is bean3", StringUtils.join(CallbacksBean.getExecutedCallbacks(), "\n")); CallbacksBean.clearExecuteCallbacks(); assertEquals("", StringUtils.join(CallbacksBean.getExecutedCallbacks(), "\n")); // restore a specific bean mCallbacksManager.restore(bean2.getId()); assertEquals("afterRestore "+id2+";This is bean2", StringUtils.join(CallbacksBean.getExecutedCallbacks(), "\n")); CallbacksBean.clearExecuteCallbacks(); assertEquals("", StringUtils.join(CallbacksBean.getExecutedCallbacks(), "\n")); // restore the first bean mCallbacksManager.restoreFirst(mCallbacksManager.getRestoreQuery().orderBy("id")); assertEquals("afterRestore "+id1+";This is bean1", StringUtils.join(CallbacksBean.getExecutedCallbacks(), "\n")); CallbacksBean.clearExecuteCallbacks(); CallbacksBean.setAfterRestoreReturn(true); } public void testRestoreCallbacksReturns() { CallbacksBean.clearExecuteCallbacks(); CallbacksBean bean1 = new CallbacksBean(); CallbacksBean bean2 = new CallbacksBean(); CallbacksBean bean3 = new CallbacksBean(); bean1.setTestString("This is bean1"); bean2.setTestString("This is bean2"); bean3.setTestString("This is bean3"); int id = mCallbacksManager.save(bean1); mCallbacksManager.save(bean2); mCallbacksManager.save(bean3); CallbacksBean.clearExecuteCallbacks(); CallbacksBean.setAfterRestoreReturn(false); assertEquals(1, mCallbacksManager.restore(mCallbacksManager.getRestoreQuery().orderBy("id")).size()); assertEquals("afterRestore "+id+";This is bean1", StringUtils.join(CallbacksBean.getExecutedCallbacks(), "\n")); CallbacksBean.setAfterRestoreReturn(true); } public void testRestoreListeners() { CallbacksBean.clearExecuteCallbacks(); CallbacksBean bean1 = new CallbacksBean(); CallbacksBean bean2 = new CallbacksBean(); CallbacksBean bean3 = new CallbacksBean(); bean1.setTestString("This is bean1"); bean2.setTestString("This is bean2"); bean3.setTestString("This is bean3"); int id1 = mCallbacksManager.save(bean1); int id2 = mCallbacksManager.save(bean2); int id3 = mCallbacksManager.save(bean3); CallbacksBean.clearExecuteCallbacks(); AggregatingCallbacksBeanListener listener = new AggregatingCallbacksBeanListener(); mCallbacksManager.addListener(listener); try { // restore all beans List<CallbacksBean> restored = mCallbacksManager.restore(mCallbacksManager.getRestoreQuery().orderBy("id")); assertEquals(3, restored.size()); Map<String, Object> history; Iterator<Map.Entry<String, Object>> it; Map.Entry<String, Object> entry; history = listener.getHistory(); assertEquals(3, history.size()); it = history.entrySet().iterator(); entry = it.next(); assertEquals("restored0", entry.getKey()); assertSame(restored.get(0), entry.getValue()); entry = it.next(); assertEquals("restored1", entry.getKey()); assertSame(restored.get(1), entry.getValue()); entry = it.next(); assertEquals("restored2", entry.getKey()); assertSame(restored.get(2), entry.getValue()); assertEquals("afterRestore "+id1+";listener restored\n"+ "afterRestore "+id2+";listener restored\n"+ "afterRestore "+id3+";listener restored", StringUtils.join(CallbacksBean.getExecutedCallbacks(), "\n")); CallbacksBean.clearExecuteCallbacks(); listener.clearHistory(); assertEquals("", StringUtils.join(CallbacksBean.getExecutedCallbacks(), "\n")); // restore a specific bean CallbacksBean restored_specific = mCallbacksManager.restore(bean2.getId()); history = listener.getHistory(); assertEquals(1, history.size()); it = history.entrySet().iterator(); entry = it.next(); assertEquals("restored0", entry.getKey()); assertSame(restored_specific, entry.getValue()); assertEquals("afterRestore "+id2+";listener restored", StringUtils.join(CallbacksBean.getExecutedCallbacks(), "\n")); CallbacksBean.clearExecuteCallbacks(); listener.clearHistory(); assertEquals("", StringUtils.join(CallbacksBean.getExecutedCallbacks(), "\n")); // restore the first bean CallbacksBean restored_first = mCallbacksManager.restoreFirst(mCallbacksManager.getRestoreQuery().orderBy("id")); history = listener.getHistory(); assertEquals(1, history.size()); it = history.entrySet().iterator(); entry = it.next(); assertEquals("restored0", entry.getKey()); assertSame(restored_first, entry.getValue()); assertEquals("afterRestore "+id1+";listener restored", StringUtils.join(CallbacksBean.getExecutedCallbacks(), "\n")); CallbacksBean.clearExecuteCallbacks(); listener.clearHistory(); CallbacksBean.setAfterRestoreReturn(true); } finally { mCallbacksManager.removeListeners(); } } public void testCallbacksProvider() { CallbacksProviderBean.clearExecuteCallbacks(); CallbacksProviderBean bean = new CallbacksProviderBean(); CallbacksProviderBean newbean = null; bean.setTestString("This is my test string"); int id1 = mCallbacksProviderManager.save(bean); newbean = mCallbacksProviderManager.restore(id1); assertTrue(newbean != null); assertTrue(newbean != bean); assertEquals(newbean.getTestString(), bean.getTestString()); assertEquals(newbean.getId(), id1); bean.setId(id1); bean.setTestString("This is a new test string"); assertEquals(mCallbacksProviderManager.save(bean), id1); assertEquals(bean.getId(), id1); newbean = mCallbacksProviderManager.restore(id1); 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"); int id2 = id1+1; assertEquals(id2, mCallbacksProviderManager.save(bean)); assertFalse(999999 == id2); assertEquals(bean.getId(), id1+1); bean.setId(76876); bean.setTestString("This is a last test string"); int id3 = id2+1; assertEquals(id3, mCallbacksProviderManager.insert(bean)); bean.setTestString("This is an updated test string"); assertEquals(id3, mCallbacksProviderManager.update(bean)); assertTrue(mCallbacksProviderManager.delete(id2)); assertEquals(2, mCallbacksProviderManager.restore().size()); assertEquals("beforeSave -1;This is my test string\n"+ "beforeInsert -1;This is my test string\n"+ "afterInsert true "+id1+";This is my test string\n"+ "afterSave true "+id1+";This is my test string\n"+ "afterRestore "+id1+";This is my test string\n"+ "beforeSave "+id1+";This is a new test string\n"+ "beforeUpdate "+id1+";This is a new test string\n"+ "afterUpdate true "+id1+";This is a new test string\n"+ "afterSave true "+id1+";This is a new test string\n"+ "afterRestore "+id1+";This is a new test string\n"+ "beforeSave 999999;This is another test string\n"+ "beforeUpdate 999999;This is another test string\n"+ "afterUpdate false 999999;This is another test string\n"+ "beforeInsert 999999;This is another test string\n"+ "afterInsert true "+id2+";This is another test string\n"+ "afterSave true "+id2+";This is another test string\n"+ "beforeInsert 76876;This is a last test string\n"+ "afterInsert true "+id3+";This is a last test string\n"+ "beforeUpdate "+id3+";This is an updated test string\n"+ "afterUpdate true "+id3+";This is an updated test string\n"+ "beforeDelete "+id2+"\n"+ "afterDelete true "+id2+"\n"+ "afterRestore "+id1+";This is a new test string\n"+ "afterRestore "+id3+";This is an updated test string", StringUtils.join(CallbacksProviderBean.getExecutedCallbacks(), "\n")); } }