You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2014/05/18 18:51:50 UTC

[1/2] git commit: ISIS-783: further improvements to IntegrationTest framework

Repository: isis
Updated Branches:
  refs/heads/master 5c27c8bfb -> 27144fc30


ISIS-783: further improvements to IntegrationTest framework

1. automatic injection of services into tests (allowing @Inject on fields of services)
2. after fixtures installed, commit tran and start a new session.  This ensures that any objects are loaded from objectstore / DB.

In addition, updates to quickstart (todo) app:
3. using @Inject for services
4. now using ClockService in integ tests
5. split out the setup of fixtures vs other setup tasks.


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/d27a47d5
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/d27a47d5
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/d27a47d5

Branch: refs/heads/master
Commit: d27a47d5e662700ac4723552b7caf065f8972328
Parents: 5c27c8b
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Sun May 18 14:27:06 2014 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Sun May 18 14:28:50 2014 +0100

----------------------------------------------------------------------
 .../IntegrationTestAbstract.java                |  2 +-
 .../integtestsupport/IsisSystemForTest.java     | 16 +++-
 .../fixture/todo/simple/ToDoItemsCreate.java    | 34 ++++----
 .../src/main/java/fixture/todo/simple/Util.java | 10 ---
 .../java/integration/ToDoSystemInitializer.java |  4 +-
 .../java/integration/tests/ToDoIntegTest.java   |  6 +-
 ...oDoItemContributionsTest_updateCategory.java | 49 ++++++-----
 .../tests/actions/ToDoItemTest_completed.java   | 32 ++++----
 .../tests/actions/ToDoItemTest_duplicate.java   | 31 ++++---
 .../actions/ToDoItemTest_notYetCompleted.java   | 27 +++---
 .../ToDoItemContributionsTest_similarTo.java    | 38 +++++----
 .../colls/ToDoItemTest_dependencies_add.java    | 37 ++++-----
 .../colls/ToDoItemTest_dependencies_remove.java | 32 ++++----
 .../ToDoItemTest_dependencies_addedEvent.java   | 86 --------------------
 .../ToDoItemContributionsTest_priority.java     | 26 +++---
 .../tests/props/ToDoItemTest_attachment.java    | 29 +++----
 .../tests/props/ToDoItemTest_category.java      | 24 ++++--
 .../tests/props/ToDoItemTest_cost.java          | 27 +++---
 .../tests/props/ToDoItemTest_description.java   | 32 ++++----
 .../tests/props/ToDoItemTest_dueBy.java         | 33 +++++---
 .../tests/props/ToDoItemTest_notes.java         | 25 +++---
 .../tests/props/ToDoItemTest_ownedBy.java       | 22 ++---
 .../tests/props/ToDoItemTest_subcategory.java   | 22 +++--
 .../tests/repo/ToDoItemsTest_finders.java       | 26 +++---
 .../repo/ToDoItemsTest_newToDo_and_delete.java  | 21 +++--
 .../tests/smoke/ToDoItemTest_title.java         | 28 ++++---
 .../integration/tests/SimpleAppIntegTest.java   |  1 -
 .../SimpleObjectsTest_listAll_and_create.java   | 32 +++-----
 28 files changed, 370 insertions(+), 382 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/d27a47d5/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IntegrationTestAbstract.java
----------------------------------------------------------------------
diff --git a/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IntegrationTestAbstract.java b/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IntegrationTestAbstract.java
index e438849..df15345 100644
--- a/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IntegrationTestAbstract.java
+++ b/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IntegrationTestAbstract.java
@@ -23,7 +23,6 @@ import org.junit.rules.ExpectedException;
 import org.junit.rules.MethodRule;
 import org.junit.runners.model.FrameworkMethod;
 import org.junit.runners.model.Statement;
-
 import org.apache.isis.applib.DomainObjectContainer;
 import org.apache.isis.applib.services.wrapper.WrapperFactory;
 import org.apache.isis.core.specsupport.scenarios.ScenarioExecution;
@@ -158,6 +157,7 @@ public abstract class IntegrationTestAbstract {
             return new Statement() {
                 @Override
                 public void evaluate() throws Throwable {
+                    isft.getContainer().injectServicesInto(target);
                     isft.beginTran();
                     try {
                         base.evaluate();

http://git-wip-us.apache.org/repos/asf/isis/blob/d27a47d5/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisSystemForTest.java
----------------------------------------------------------------------
diff --git a/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisSystemForTest.java b/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisSystemForTest.java
index 4a8a2dd..fb52ea6 100644
--- a/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisSystemForTest.java
+++ b/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisSystemForTest.java
@@ -564,7 +564,7 @@ public class IsisSystemForTest implements org.junit.rules.TestRule, DomainServic
     ////////////////////////////////////////////////////////////
 
     @Override
-    public Statement apply(final Statement base, Description description) {
+    public Statement apply(final Statement base, final Description description) {
         return new Statement() {
             @Override
             public void evaluate() throws Throwable {
@@ -691,6 +691,20 @@ public class IsisSystemForTest implements org.junit.rules.TestRule, DomainServic
             fid.addFixture(fixture);
         }
         fid.installFixtures();
+
+        // ensure that tests are performed in separate xactn to any fixture setup.
+        final IsisTransactionManager transactionManager = getTransactionManager();
+        final IsisTransaction transaction = transactionManager.getTransaction();
+        final State transactionState = transaction.getState();
+        if(transactionState.canCommit()) {
+            commitTran();
+            try {
+                bounceSystem();
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            }
+            beginTran();
+        }
     }
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/d27a47d5/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/simple/ToDoItemsCreate.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/simple/ToDoItemsCreate.java b/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/simple/ToDoItemsCreate.java
index e6461a8..09a613b 100644
--- a/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/simple/ToDoItemsCreate.java
+++ b/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/simple/ToDoItemsCreate.java
@@ -18,18 +18,15 @@
  */
 package fixture.todo.simple;
 
-import java.math.BigDecimal;
-
 import dom.todo.ToDoItem;
 import dom.todo.ToDoItem.Category;
 import dom.todo.ToDoItem.Subcategory;
 import dom.todo.ToDoItems;
 
+import java.math.BigDecimal;
 import org.joda.time.LocalDate;
-
-import org.apache.isis.applib.fixturescripts.FixtureResultList;
 import org.apache.isis.applib.fixturescripts.SimpleFixtureScript;
-import org.apache.isis.applib.fixturescripts.FixtureScript.ExecutionContext;
+import org.apache.isis.applib.services.clock.ClockService;
 
 public class ToDoItemsCreate extends SimpleFixtureScript {
 
@@ -60,19 +57,19 @@ public class ToDoItemsCreate extends SimpleFixtureScript {
 
     private void installFor(final String user, final ExecutionContext executionContext) {
 
-        createToDoItemForUser("Buy milk", Category.Domestic, Subcategory.Shopping, user, Util.daysFromToday(0), new BigDecimal("0.75"), executionContext);
-        createToDoItemForUser("Buy bread", Category.Domestic, Subcategory.Shopping, user, Util.daysFromToday(0), new BigDecimal("1.75"), executionContext);
-        createToDoItemForUser("Buy stamps", Category.Domestic, Subcategory.Shopping, user, Util.daysFromToday(0), new BigDecimal("10.00"), executionContext);
-        createToDoItemForUser("Pick up laundry", Category.Domestic, Subcategory.Chores, user, Util.daysFromToday(6), new BigDecimal("7.50"), executionContext);
-        createToDoItemForUser("Mow lawn", Category.Domestic, Subcategory.Garden, user, Util.daysFromToday(6), null, executionContext);
-        createToDoItemForUser("Vacuum house", Category.Domestic, Subcategory.Housework, user, Util.daysFromToday(3), null, executionContext);
-        createToDoItemForUser("Sharpen knives", Category.Domestic, Subcategory.Chores, user, Util.daysFromToday(14), null, executionContext);
+        createToDoItemForUser("Buy milk", Category.Domestic, Subcategory.Shopping, user, nowPlusDays(0), new BigDecimal("0.75"), executionContext);
+        createToDoItemForUser("Buy bread", Category.Domestic, Subcategory.Shopping, user, nowPlusDays(0), new BigDecimal("1.75"), executionContext);
+        createToDoItemForUser("Buy stamps", Category.Domestic, Subcategory.Shopping, user, nowPlusDays(0), new BigDecimal("10.00"), executionContext);
+        createToDoItemForUser("Pick up laundry", Category.Domestic, Subcategory.Chores, user, nowPlusDays(6), new BigDecimal("7.50"), executionContext);
+        createToDoItemForUser("Mow lawn", Category.Domestic, Subcategory.Garden, user, nowPlusDays(6), null, executionContext);
+        createToDoItemForUser("Vacuum house", Category.Domestic, Subcategory.Housework, user, nowPlusDays(3), null, executionContext);
+        createToDoItemForUser("Sharpen knives", Category.Domestic, Subcategory.Chores, user, nowPlusDays(14), null, executionContext);
 
         createToDoItemForUser("Write to penpal", Category.Other, Subcategory.Other, user, null, null, executionContext);
 
-        createToDoItemForUser("Write blog post", Category.Professional, Subcategory.Marketing, user, Util.daysFromToday(7), null, executionContext);
-        createToDoItemForUser("Organize brown bag", Category.Professional, Subcategory.Consulting, user, Util.daysFromToday(14), null, executionContext);
-        createToDoItemForUser("Submit conference session", Category.Professional, Subcategory.Education, user, Util.daysFromToday(21), null, executionContext);
+        createToDoItemForUser("Write blog post", Category.Professional, Subcategory.Marketing, user, nowPlusDays(7), null, executionContext);
+        createToDoItemForUser("Organize brown bag", Category.Professional, Subcategory.Consulting, user, nowPlusDays(14), null, executionContext);
+        createToDoItemForUser("Submit conference session", Category.Professional, Subcategory.Education, user, nowPlusDays(21), null, executionContext);
         createToDoItemForUser("Stage Isis release", Category.Professional, Subcategory.OpenSource, user, null, null, executionContext);
 
         getContainer().flush();
@@ -88,11 +85,18 @@ public class ToDoItemsCreate extends SimpleFixtureScript {
         ToDoItem newToDo = toDoItems.newToDo(description, category, subcategory, user, dueBy, cost);
         return executionContext.add(this, newToDo);
     }
+
+    private LocalDate nowPlusDays(int days) {
+        return clockService.now().plusDays(days);
+    }
     //endregion
 
     //region > injected services
     @javax.inject.Inject
     private ToDoItems toDoItems;
+
+    @javax.inject.Inject
+    private ClockService clockService;
     //endregion
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/d27a47d5/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/simple/Util.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/simple/Util.java b/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/simple/Util.java
index 1416f09..1c41dad 100644
--- a/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/simple/Util.java
+++ b/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/simple/Util.java
@@ -18,11 +18,6 @@
  */
 package fixture.todo.simple;
 
-import org.joda.time.LocalDate;
-
-import org.apache.isis.applib.clock.Clock;
-
-
 public final class Util {
     
     private Util(){}
@@ -38,9 +33,4 @@ public final class Util {
         return null;
     }
 
-    static LocalDate daysFromToday(final int i) {
-        final LocalDate date = new LocalDate(Clock.getTimeAsDateTime());
-        return date.plusDays(i);
-    }
-
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/d27a47d5/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/ToDoSystemInitializer.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/ToDoSystemInitializer.java b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/ToDoSystemInitializer.java
index d936646..92dcef4 100644
--- a/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/ToDoSystemInitializer.java
+++ b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/ToDoSystemInitializer.java
@@ -24,6 +24,7 @@ import fixture.todo.ToDoItemsFixturesService;
 
 import org.apache.isis.applib.annotation.Bulk;
 import org.apache.isis.applib.services.classdiscovery.ClassDiscoveryServiceUsingReflections;
+import org.apache.isis.applib.services.clock.ClockService;
 import org.apache.isis.applib.services.queryresultscache.QueryResultsCache;
 import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.integtestsupport.IsisSystemForTest;
@@ -73,7 +74,8 @@ public class ToDoSystemInitializer {
                     new EventBusServiceJdo(),
                     new QueryResultsCache(),
                     new MementoServiceDefault(),
-                    new BookmarkServiceDefault()
+                    new BookmarkServiceDefault(),
+                    new ClockService()
                     );
         }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/d27a47d5/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/ToDoIntegTest.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/ToDoIntegTest.java b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/ToDoIntegTest.java
index cc7f5d8..49dcf26 100644
--- a/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/ToDoIntegTest.java
+++ b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/ToDoIntegTest.java
@@ -21,19 +21,15 @@ package integration.tests;
 import integration.ToDoSystemInitializer;
 
 import org.junit.BeforeClass;
-
 import org.apache.isis.core.integtestsupport.IntegrationTestAbstract;
-import org.apache.isis.core.integtestsupport.IsisSystemForTest;
 import org.apache.isis.core.integtestsupport.scenarios.ScenarioExecutionForIntegration;
 
 public abstract class ToDoIntegTest extends IntegrationTestAbstract {
     
-    private static IsisSystemForTest isft;
-    
     @BeforeClass
     public static void initClass() {
         org.apache.log4j.PropertyConfigurator.configure("logging.properties");
-        isft = ToDoSystemInitializer.initIsft();
+        ToDoSystemInitializer.initIsft();
         
         // instantiating will install onto ThreadLocal
         new ScenarioExecutionForIntegration();

http://git-wip-us.apache.org/repos/asf/isis/blob/d27a47d5/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/actions/ToDoItemContributionsTest_updateCategory.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/actions/ToDoItemContributionsTest_updateCategory.java b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/actions/ToDoItemContributionsTest_updateCategory.java
index 1fa945a..e959928 100644
--- a/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/actions/ToDoItemContributionsTest_updateCategory.java
+++ b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/actions/ToDoItemContributionsTest_updateCategory.java
@@ -18,53 +18,60 @@
  */
 package integration.tests.actions;
 
-import static org.hamcrest.CoreMatchers.*;
-import static org.junit.Assert.assertThat;
-import integration.tests.ToDoIntegTest;
-
-import java.util.List;
-
 import dom.todo.ToDoItem;
-import dom.todo.ToDoItemContributions;
-import dom.todo.ToDoItems;
 import dom.todo.ToDoItem.Category;
 import dom.todo.ToDoItem.Subcategory;
+import dom.todo.ToDoItemContributions;
+import dom.todo.ToDoItems;
 import fixture.todo.integtests.ToDoItemsIntegTestFixture;
+import integration.tests.ToDoIntegTest;
 
-import org.joda.time.LocalDate;
-import org.junit.After;
+import java.util.List;
+import javax.inject.Inject;
 import org.junit.Before;
 import org.junit.Test;
 
-import org.apache.isis.applib.clock.Clock;
+import static org.hamcrest.CoreMatchers.containsString;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
 
 public class ToDoItemContributionsTest_updateCategory extends ToDoIntegTest {
 
-    private ToDoItem toDoItem;
-    private ToDoItemContributions toDoItemContributions;
+
 
     @Before
-    public void setUp() throws Exception {
+    public void setUpData() throws Exception {
         scenarioExecution().install(new ToDoItemsIntegTestFixture());
+    }
+
+    @Inject
+    private ToDoItems toDoItems;
+    @Inject
+    private ToDoItemContributions toDoItemContributions;
+
+    private ToDoItemContributions toDoItemContributionsWrapper;
+    private ToDoItem toDoItem;
 
-        final ToDoItems toDoItems = wrap(service(ToDoItems.class));
-        toDoItemContributions = wrap(service(ToDoItemContributions.class));
+    @Before
+    public void setUp() throws Exception {
         final List<ToDoItem> all = toDoItems.notYetComplete();
         toDoItem = wrap(all.get(0));
+
+        toDoItemContributionsWrapper = wrap(toDoItemContributions);
     }
 
     @Test
     public void happyCase() throws Exception {
         
         // when
-        toDoItemContributions.updateCategory(toDoItem, Category.Professional, Subcategory.Consulting);
+        toDoItemContributionsWrapper.updateCategory(toDoItem, Category.Professional, Subcategory.Consulting);
         
         // then
         assertThat(toDoItem.getCategory(), is(Category.Professional));
         assertThat(toDoItem.getSubcategory(), is(Subcategory.Consulting));
         
         // when
-        toDoItemContributions.updateCategory(toDoItem, Category.Domestic, Subcategory.Chores);
+        toDoItemContributionsWrapper.updateCategory(toDoItem, Category.Domestic, Subcategory.Chores);
         
         // then
         assertThat(toDoItem.getCategory(), is(Category.Domestic));
@@ -77,14 +84,14 @@ public class ToDoItemContributionsTest_updateCategory extends ToDoIntegTest {
         
         // when, then
         expectedExceptions.expectMessage("'Category' is mandatory");
-        toDoItemContributions.updateCategory(toDoItem, null, Subcategory.Chores);
+        toDoItemContributionsWrapper.updateCategory(toDoItem, null, Subcategory.Chores);
     }
 
     @Test
     public void subcategoryCanBeNull() throws Exception {
         
         // when, then
-        toDoItemContributions.updateCategory(toDoItem, Category.Professional, null);
+        toDoItemContributionsWrapper.updateCategory(toDoItem, Category.Professional, null);
     }
     
     @Test
@@ -92,7 +99,7 @@ public class ToDoItemContributionsTest_updateCategory extends ToDoIntegTest {
         
         // when, then
         expectedExceptions.expectMessage(containsString("Invalid subcategory"));
-        toDoItemContributions.updateCategory(toDoItem, Category.Professional, Subcategory.Chores);
+        toDoItemContributionsWrapper.updateCategory(toDoItem, Category.Professional, Subcategory.Chores);
     }
     
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/d27a47d5/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/actions/ToDoItemTest_completed.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/actions/ToDoItemTest_completed.java b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/actions/ToDoItemTest_completed.java
index 112563f..b96ecfb 100644
--- a/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/actions/ToDoItemTest_completed.java
+++ b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/actions/ToDoItemTest_completed.java
@@ -18,35 +18,40 @@
  */
 package integration.tests.actions;
 
-import static org.hamcrest.CoreMatchers.*;
-import static org.junit.Assert.assertThat;
-import integration.tests.ToDoIntegTest;
-
-import java.util.EventObject;
-import java.util.List;
-
 import dom.todo.ToDoItem;
 import dom.todo.ToDoItemSubscriptions;
 import dom.todo.ToDoItems;
 import fixture.todo.integtests.ToDoItemsIntegTestFixture;
+import integration.tests.ToDoIntegTest;
 
+import java.util.EventObject;
+import java.util.List;
+import javax.inject.Inject;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
+import static org.hamcrest.CoreMatchers.*;
+import static org.junit.Assert.assertThat;
+
 public class ToDoItemTest_completed extends ToDoIntegTest {
 
-    private ToDoItem toDoItem;
+    @Before
+    public void setUpData() throws Exception {
+        scenarioExecution().install(new ToDoItemsIntegTestFixture());
+    }
+
+    @Inject
+    private ToDoItems toDoItems;
+    @Inject
     private ToDoItemSubscriptions toDoItemSubscriptions;
 
+    private ToDoItem toDoItem;
+
     @Before
     public void setUp() throws Exception {
-        scenarioExecution().install(new ToDoItemsIntegTestFixture());
-
-        final List<ToDoItem> all = wrap(service(ToDoItems.class)).notYetComplete();
+        final List<ToDoItem> all = toDoItems.notYetComplete();
         toDoItem = wrap(all.get(0));
-        
-        toDoItemSubscriptions = service(ToDoItemSubscriptions.class);
     }
 
     @After
@@ -54,7 +59,6 @@ public class ToDoItemTest_completed extends ToDoIntegTest {
         toDoItemSubscriptions.reset();
     }
 
-    
     @Test
     public void happyCase() throws Exception {
         

http://git-wip-us.apache.org/repos/asf/isis/blob/d27a47d5/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/actions/ToDoItemTest_duplicate.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/actions/ToDoItemTest_duplicate.java b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/actions/ToDoItemTest_duplicate.java
index c8eb383..4f5f6e6 100644
--- a/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/actions/ToDoItemTest_duplicate.java
+++ b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/actions/ToDoItemTest_duplicate.java
@@ -18,33 +18,40 @@
  */
 package integration.tests.actions;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-import integration.tests.ToDoIntegTest;
-
-import java.math.BigDecimal;
-import java.util.List;
-
 import dom.todo.ToDoItem;
 import dom.todo.ToDoItems;
 import fixture.todo.integtests.ToDoItemsIntegTestFixture;
+import integration.tests.ToDoIntegTest;
 
+import java.math.BigDecimal;
+import java.util.List;
+import javax.inject.Inject;
 import org.joda.time.LocalDate;
 import org.junit.Before;
 import org.junit.Test;
+import org.apache.isis.applib.services.clock.ClockService;
 
-import org.apache.isis.applib.clock.Clock;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
 
 public class ToDoItemTest_duplicate extends ToDoIntegTest {
 
+    @Before
+    public void setUpData() throws Exception {
+        scenarioExecution().install(new ToDoItemsIntegTestFixture());
+    }
+
+    @Inject
+    private ToDoItems toDoItems;
+    @Inject
+    private ClockService clockService;
+
     private ToDoItem toDoItem;
     private ToDoItem duplicateToDoItem;
 
     @Before
     public void setUp() throws Exception {
-        scenarioExecution().install(new ToDoItemsIntegTestFixture());
-
-        final List<ToDoItem> all = wrap(service(ToDoItems.class)).notYetComplete();
+        final List<ToDoItem> all = wrap(toDoItems).notYetComplete();
         toDoItem = wrap(all.get(0));
     }
 
@@ -52,7 +59,7 @@ public class ToDoItemTest_duplicate extends ToDoIntegTest {
     public void happyCase() throws Exception {
         
         // given
-        final LocalDate todaysDate = Clock.getTimeAsLocalDate();
+        final LocalDate todaysDate = clockService.now();
         toDoItem.setDueBy(todaysDate);
         toDoItem.updateCost(new BigDecimal("123.45"));
         

http://git-wip-us.apache.org/repos/asf/isis/blob/d27a47d5/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/actions/ToDoItemTest_notYetCompleted.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/actions/ToDoItemTest_notYetCompleted.java b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/actions/ToDoItemTest_notYetCompleted.java
index 2c57217..c3e20e3 100644
--- a/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/actions/ToDoItemTest_notYetCompleted.java
+++ b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/actions/ToDoItemTest_notYetCompleted.java
@@ -18,33 +18,37 @@
  */
 package integration.tests.actions;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-import integration.tests.ToDoIntegTest;
-
-import java.util.List;
-
 import dom.todo.ToDoItem;
 import dom.todo.ToDoItems;
 import fixture.todo.integtests.ToDoItemsIntegTestFixture;
+import integration.tests.ToDoIntegTest;
 
-import org.junit.After;
+import java.util.List;
+import javax.inject.Inject;
 import org.junit.Before;
 import org.junit.Test;
 
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
 public class ToDoItemTest_notYetCompleted extends ToDoIntegTest {
 
+    @Before
+    public void setUpData() throws Exception {
+        scenarioExecution().install(new ToDoItemsIntegTestFixture());
+    }
+
+    @Inject
+    private ToDoItems toDoItems;
+
     private ToDoItem toDoItem;
 
     @Before
     public void setUp() throws Exception {
-        scenarioExecution().install(new ToDoItemsIntegTestFixture());
-
-        final List<ToDoItem> all = wrap(service(ToDoItems.class)).notYetComplete();
+        final List<ToDoItem> all = wrap(toDoItems).notYetComplete();
         toDoItem = wrap(all.get(0));
     }
 
-
     @Test
     public void happyCase() throws Exception {
         
@@ -58,7 +62,6 @@ public class ToDoItemTest_notYetCompleted extends ToDoIntegTest {
         assertThat(toDoItem.isComplete(), is(false));
     }
 
-
     @Test
     public void cannotUndoIfNotYetCompleted() throws Exception {
         

http://git-wip-us.apache.org/repos/asf/isis/blob/d27a47d5/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/colls/ToDoItemContributionsTest_similarTo.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/colls/ToDoItemContributionsTest_similarTo.java b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/colls/ToDoItemContributionsTest_similarTo.java
index 8124a2e..cc47ded 100644
--- a/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/colls/ToDoItemContributionsTest_similarTo.java
+++ b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/colls/ToDoItemContributionsTest_similarTo.java
@@ -18,46 +18,48 @@
  */
 package integration.tests.colls;
 
-import static org.hamcrest.CoreMatchers.*;
-import static org.junit.Assert.assertThat;
-import integration.tests.ToDoIntegTest;
-
-import java.util.List;
-
 import dom.todo.ToDoItem;
 import dom.todo.ToDoItemContributions;
 import dom.todo.ToDoItems;
-import dom.todo.ToDoItem.Category;
-import dom.todo.ToDoItem.Subcategory;
 import fixture.todo.integtests.ToDoItemsIntegTestFixture;
+import integration.tests.ToDoIntegTest;
 
-import org.joda.time.LocalDate;
-import org.junit.After;
+import java.util.List;
+import javax.inject.Inject;
 import org.junit.Before;
 import org.junit.Test;
 
-import org.apache.isis.applib.clock.Clock;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
 
 public class ToDoItemContributionsTest_similarTo extends ToDoIntegTest {
 
-    private ToDoItem toDoItem;
+    @Before
+    public void setUpData() throws Exception {
+        scenarioExecution().install(new ToDoItemsIntegTestFixture());
+    }
+
+    @Inject
+    private ToDoItems toDoItems;
+    @Inject
     private ToDoItemContributions toDoItemContributions;
 
+    private ToDoItemContributions toDoItemContributionsWrapped;
+    private ToDoItem toDoItem;
+
     @Before
     public void setUp() throws Exception {
-        scenarioExecution().install(new ToDoItemsIntegTestFixture());
-
-        final ToDoItems toDoItems = wrap(service(ToDoItems.class));
-        toDoItemContributions = wrap(service(ToDoItemContributions.class));
-        final List<ToDoItem> all = toDoItems.notYetComplete();
+        final List<ToDoItem> all = this.toDoItems.notYetComplete();
         toDoItem = wrap(all.get(0));
+
+        toDoItemContributionsWrapped = wrap(toDoItemContributions);
     }
 
     @Test
     public void happyCase() throws Exception {
         
         // when
-        List<ToDoItem> similarItems = toDoItemContributions.similarTo(toDoItem);
+        List<ToDoItem> similarItems = toDoItemContributionsWrapped.similarTo(toDoItem);
         
         // then
         assertThat(similarItems.size(), is(6));

http://git-wip-us.apache.org/repos/asf/isis/blob/d27a47d5/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/colls/ToDoItemTest_dependencies_add.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/colls/ToDoItemTest_dependencies_add.java b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/colls/ToDoItemTest_dependencies_add.java
index d303535..03f32f7 100644
--- a/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/colls/ToDoItemTest_dependencies_add.java
+++ b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/colls/ToDoItemTest_dependencies_add.java
@@ -18,44 +18,43 @@
  */
 package integration.tests.colls;
 
-import static org.hamcrest.CoreMatchers.equalTo;
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.not;
-import static org.hamcrest.CoreMatchers.nullValue;
-import static org.junit.Assert.assertThat;
-import integration.tests.ToDoIntegTest;
-
-import java.util.List;
-
 import dom.todo.ToDoItem;
 import dom.todo.ToDoItemSubscriptions;
 import dom.todo.ToDoItems;
 import fixture.todo.integtests.ToDoItemsIntegTestFixture;
+import integration.tests.ToDoIntegTest;
 
+import java.util.List;
+import javax.inject.Inject;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
-
 import org.apache.isis.applib.services.eventbus.CollectionAddedToEvent;
-import org.apache.isis.applib.services.eventbus.CollectionRemovedFromEvent;
+
+import static org.hamcrest.CoreMatchers.*;
+import static org.junit.Assert.assertThat;
 
 public class ToDoItemTest_dependencies_add extends ToDoIntegTest {
 
+    @Before
+    public void setUpData() throws Exception {
+        scenarioExecution().install(new ToDoItemsIntegTestFixture());
+    }
+
+
+    @Inject
+    private ToDoItems toDoItems;
+    @Inject
+    private ToDoItemSubscriptions toDoItemSubscriptions;
+
     private ToDoItem toDoItem;
     private ToDoItem otherToDoItem;
-    
-    private ToDoItemSubscriptions toDoItemSubscriptions;
-    
 
     @Before
     public void setUp() throws Exception {
-        scenarioExecution().install(new ToDoItemsIntegTestFixture());
-
-        final List<ToDoItem> items = wrap(service(ToDoItems.class)).notYetComplete();
+        final List<ToDoItem> items = wrap(toDoItems).notYetComplete();
         toDoItem = wrap(items.get(0));
         otherToDoItem = wrap(items.get(1));
-        
-        toDoItemSubscriptions = service(ToDoItemSubscriptions.class);
     }
 
     @After

http://git-wip-us.apache.org/repos/asf/isis/blob/d27a47d5/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/colls/ToDoItemTest_dependencies_remove.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/colls/ToDoItemTest_dependencies_remove.java b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/colls/ToDoItemTest_dependencies_remove.java
index 7f4713a..d8986a7 100644
--- a/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/colls/ToDoItemTest_dependencies_remove.java
+++ b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/colls/ToDoItemTest_dependencies_remove.java
@@ -18,46 +18,48 @@
  */
 package integration.tests.colls;
 
-import static org.hamcrest.CoreMatchers.equalTo;
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.not;
-import static org.hamcrest.CoreMatchers.nullValue;
-import static org.junit.Assert.assertThat;
-import integration.tests.ToDoIntegTest;
-
-import java.util.List;
-
 import dom.todo.ToDoItem;
 import dom.todo.ToDoItemSubscriptions;
 import dom.todo.ToDoItems;
 import fixture.todo.integtests.ToDoItemsIntegTestFixture;
+import integration.tests.ToDoIntegTest;
 
+import java.util.List;
+import javax.inject.Inject;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
-
 import org.apache.isis.applib.services.eventbus.CollectionRemovedFromEvent;
 
+import static org.hamcrest.CoreMatchers.*;
+import static org.junit.Assert.assertThat;
+
 public class ToDoItemTest_dependencies_remove extends ToDoIntegTest {
 
+    @Before
+    public void setUpData() throws Exception {
+        scenarioExecution().install(new ToDoItemsIntegTestFixture());
+    }
+
+    @Inject
+    private ToDoItems toDoItems;
+    @Inject
+    private ToDoItemSubscriptions toDoItemSubscriptions;
+
     private ToDoItem toDoItem;
     private ToDoItem otherToDoItem;
     private ToDoItem yetAnotherToDoItem;
 
-    private ToDoItemSubscriptions toDoItemSubscriptions;
 
     @Before
     public void setUp() throws Exception {
-        // given
-        scenarioExecution().install(new ToDoItemsIntegTestFixture());
 
-        final List<ToDoItem> items = wrap(service(ToDoItems.class)).notYetComplete();
+        final List<ToDoItem> items = wrap(toDoItems).notYetComplete();
         toDoItem = wrap(items.get(0));
         otherToDoItem = wrap(items.get(1));
         yetAnotherToDoItem = wrap(items.get(2));
         
         toDoItem.add(otherToDoItem);
-        toDoItemSubscriptions = service(ToDoItemSubscriptions.class);
     }
 
     @After

http://git-wip-us.apache.org/repos/asf/isis/blob/d27a47d5/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/events/ToDoItemTest_dependencies_addedEvent.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/events/ToDoItemTest_dependencies_addedEvent.java b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/events/ToDoItemTest_dependencies_addedEvent.java
deleted file mode 100644
index 5823076..0000000
--- a/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/events/ToDoItemTest_dependencies_addedEvent.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package integration.tests.events;
-
-import integration.tests.ToDoIntegTest;
-
-import java.util.List;
-
-import dom.todo.ToDoItem;
-import dom.todo.ToDoItems;
-import fixture.todo.integtests.ToDoItemsIntegTestFixture;
-
-import org.apache.isis.applib.annotation.Programmatic;
-import org.apache.isis.applib.services.eventbus.CollectionAddedToEvent;
-import org.apache.isis.applib.services.eventbus.EventBusService;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-import com.google.common.eventbus.Subscribe;
-
-public class ToDoItemTest_dependencies_addedEvent extends ToDoIntegTest {
-
-    private ToDoItem toDoItem;
-    private ToDoItem otherToDoItem;
-    private EventBusService eventBusService;
-    
-    
-    public class TestSubscription {
-    	
-        @Programmatic
-        @Subscribe
-        public Boolean on(CollectionAddedToEvent<?,?> ev) {
-            return true;
-        }
-    	
-    }
-    
-
-    @Before
-    public void setUp() throws Exception {
-        scenarioExecution().install(new ToDoItemsIntegTestFixture());
-
-        final List<ToDoItem> items = wrap(service(ToDoItems.class)).notYetComplete();
-        toDoItem = wrap(items.get(0));
-        otherToDoItem = items.get(1); // wrapping this seems to trip up cglib :-(
-        eventBusService = this.service(EventBusService.class);
-        
-        // Register new Service.
-        
-    }
-
-    @After
-    public void tearDown() throws Exception {
-        unwrap(toDoItem).getDependencies().clear();
-    }
-
-    @Test
-    public void collectionAddedToEventReceived() throws Exception {
-
-        // given
-        
-        // when
-        toDoItem.add(otherToDoItem);
-        
-        // then
-    }
-
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/d27a47d5/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemContributionsTest_priority.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemContributionsTest_priority.java b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemContributionsTest_priority.java
index 4b5e19d..457e128 100644
--- a/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemContributionsTest_priority.java
+++ b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemContributionsTest_priority.java
@@ -18,33 +18,37 @@
  */
 package integration.tests.props;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-import integration.tests.ToDoIntegTest;
-
-import java.util.List;
-
 import dom.todo.ToDoItem;
 import dom.todo.ToDoItemContributions;
 import dom.todo.ToDoItems;
 import fixture.todo.integtests.ToDoItemsIntegTestFixture;
+import integration.tests.ToDoIntegTest;
 
+import java.util.List;
+import javax.inject.Inject;
 import org.junit.Before;
 import org.junit.Test;
 
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
 public class ToDoItemContributionsTest_priority extends ToDoIntegTest {
 
+    @Before
+    public void setUpData() throws Exception {
+        scenarioExecution().install(new ToDoItemsIntegTestFixture());
+    }
+
+    @Inject
+    private ToDoItems toDoItems;
+    @Inject
     private ToDoItemContributions toDoItemContributions;
     
     private List<ToDoItem> notYetComplete;
 
     @Before
     public void setUp() throws Exception {
-        scenarioExecution().install(new ToDoItemsIntegTestFixture());
-
-        final ToDoItems toDoItems = wrap(service(ToDoItems.class));
-        toDoItemContributions = service(ToDoItemContributions.class);
-        notYetComplete = toDoItems.notYetComplete();
+        notYetComplete = wrap(toDoItems).notYetComplete();
     }
 
     @Test

http://git-wip-us.apache.org/repos/asf/isis/blob/d27a47d5/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemTest_attachment.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemTest_attachment.java b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemTest_attachment.java
index d419ef1..6eac7c6 100644
--- a/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemTest_attachment.java
+++ b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemTest_attachment.java
@@ -18,36 +18,37 @@
  */
 package integration.tests.props;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
+import dom.todo.ToDoItem;
+import dom.todo.ToDoItems;
+import fixture.todo.integtests.ToDoItemsIntegTestFixture;
 import integration.tests.ToDoIntegTest;
 
 import java.nio.charset.Charset;
 import java.util.List;
-
 import javax.activation.MimeType;
-
-import dom.todo.ToDoItem;
-import dom.todo.ToDoItems;
-import fixture.todo.integtests.ToDoItemsIntegTestFixture;
-
-import org.junit.After;
+import javax.inject.Inject;
 import org.junit.Before;
 import org.junit.Test;
-
 import org.apache.isis.applib.value.Blob;
 
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
 public class ToDoItemTest_attachment extends ToDoIntegTest {
 
+    @Before
+    public void setUpData() throws Exception {
+        scenarioExecution().install(new ToDoItemsIntegTestFixture());
+    }
+
+    @Inject
+    private ToDoItems toDoItems;
 
     private ToDoItem toDoItem;
 
     @Before
     public void setUp() throws Exception {
-        
-        scenarioExecution().install(new ToDoItemsIntegTestFixture());
-        
-        final List<ToDoItem> all = wrap(service(ToDoItems.class)).notYetComplete();
+        final List<ToDoItem> all = wrap(toDoItems).notYetComplete();
         toDoItem = wrap(all.get(0));
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/d27a47d5/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemTest_category.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemTest_category.java b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemTest_category.java
index 88f3521..777a888 100644
--- a/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemTest_category.java
+++ b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemTest_category.java
@@ -18,28 +18,34 @@
  */
 package integration.tests.props;
 
-import static org.hamcrest.CoreMatchers.containsString;
-import integration.tests.ToDoIntegTest;
-
-import java.util.List;
-
 import dom.todo.ToDoItem;
-import dom.todo.ToDoItems;
 import dom.todo.ToDoItem.Category;
+import dom.todo.ToDoItems;
 import fixture.todo.integtests.ToDoItemsIntegTestFixture;
+import integration.tests.ToDoIntegTest;
 
+import java.util.List;
+import javax.inject.Inject;
 import org.junit.Before;
 import org.junit.Test;
 
+import static org.hamcrest.CoreMatchers.containsString;
+
 public class ToDoItemTest_category extends ToDoIntegTest {
 
+    @Before
+    public void setUpData() throws Exception {
+        scenarioExecution().install(new ToDoItemsIntegTestFixture());
+    }
+
+    @Inject
+    private ToDoItems toDoItems;
+
     private ToDoItem toDoItem;
 
     @Before
     public void setUp() throws Exception {
-        scenarioExecution().install(new ToDoItemsIntegTestFixture());
-
-        final List<ToDoItem> all = wrap(service(ToDoItems.class)).notYetComplete();
+        final List<ToDoItem> all = wrap(toDoItems).notYetComplete();
         toDoItem = wrap(all.get(0));
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/d27a47d5/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemTest_cost.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemTest_cost.java b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemTest_cost.java
index 172c4da..5fd0358 100644
--- a/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemTest_cost.java
+++ b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemTest_cost.java
@@ -18,31 +18,36 @@
  */
 package integration.tests.props;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-import integration.tests.ToDoIntegTest;
-
-import java.math.BigDecimal;
-import java.util.List;
-
 import dom.todo.ToDoItem;
 import dom.todo.ToDoItems;
 import fixture.todo.integtests.ToDoItemsIntegTestFixture;
+import integration.tests.ToDoIntegTest;
 
+import java.math.BigDecimal;
+import java.util.List;
+import javax.inject.Inject;
 import org.junit.Before;
 import org.junit.Test;
 
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
 public class ToDoItemTest_cost extends ToDoIntegTest {
 
+    @Before
+    public void setUpData() throws Exception {
+        scenarioExecution().install(new ToDoItemsIntegTestFixture());
+    }
+
+    @Inject
+    private ToDoItems toDoItems;
+
     private ToDoItem toDoItem;
     private BigDecimal cost;
 
     @Before
     public void setUp() throws Exception {
-        // given
-        scenarioExecution().install(new ToDoItemsIntegTestFixture());
-
-        final List<ToDoItem> all = wrap(service(ToDoItems.class)).notYetComplete();
+        final List<ToDoItem> all = wrap(toDoItems).notYetComplete();
         toDoItem = wrap(all.get(0));
         cost = toDoItem.getCost();
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/d27a47d5/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemTest_description.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemTest_description.java b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemTest_description.java
index 4e1c1fa..84f0f41 100644
--- a/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemTest_description.java
+++ b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemTest_description.java
@@ -18,38 +18,40 @@
  */
 package integration.tests.props;
 
-import static org.hamcrest.CoreMatchers.equalTo;
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.not;
-import static org.hamcrest.CoreMatchers.nullValue;
-import static org.junit.Assert.assertThat;
-import integration.tests.ToDoIntegTest;
-
-import java.util.List;
-
 import dom.todo.ToDoItem;
 import dom.todo.ToDoItemSubscriptions;
 import dom.todo.ToDoItems;
 import fixture.todo.integtests.ToDoItemsIntegTestFixture;
+import integration.tests.ToDoIntegTest;
 
+import java.util.List;
+import javax.inject.Inject;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
-
 import org.apache.isis.applib.services.eventbus.PropertyChangedEvent;
 
+import static org.hamcrest.CoreMatchers.*;
+import static org.junit.Assert.assertThat;
+
 public class ToDoItemTest_description extends ToDoIntegTest {
 
-    private ToDoItem toDoItem;
+    @Before
+    public void setUpData() throws Exception {
+        scenarioExecution().install(new ToDoItemsIntegTestFixture());
+    }
+
+    @Inject
+    private ToDoItems toDoItems;
+    @Inject
     private ToDoItemSubscriptions toDoItemSubscriptions;
 
+    private ToDoItem toDoItem;
+
     @Before
     public void setUp() throws Exception {
-        scenarioExecution().install(new ToDoItemsIntegTestFixture());
-
-        final List<ToDoItem> all = wrap(service(ToDoItems.class)).notYetComplete();
+        final List<ToDoItem> all = wrap(toDoItems).notYetComplete();
         toDoItem = wrap(all.get(0));
-        toDoItemSubscriptions = service(ToDoItemSubscriptions.class);
     }
 
     @After

http://git-wip-us.apache.org/repos/asf/isis/blob/d27a47d5/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemTest_dueBy.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemTest_dueBy.java b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemTest_dueBy.java
index b658fc1..30c9bee 100644
--- a/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemTest_dueBy.java
+++ b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemTest_dueBy.java
@@ -18,32 +18,39 @@
  */
 package integration.tests.props;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-import integration.tests.ToDoIntegTest;
-
-import java.util.List;
-
 import dom.todo.ToDoItem;
 import dom.todo.ToDoItems;
 import fixture.todo.integtests.ToDoItemsIntegTestFixture;
+import integration.tests.ToDoIntegTest;
 
+import java.util.List;
+import javax.inject.Inject;
 import org.joda.time.LocalDate;
-import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
-
 import org.apache.isis.applib.clock.Clock;
+import org.apache.isis.applib.services.clock.ClockService;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
 
 public class ToDoItemTest_dueBy extends ToDoIntegTest {
 
+    @Before
+    public void setUpData() throws Exception {
+        scenarioExecution().install(new ToDoItemsIntegTestFixture());
+    }
+
+    @Inject
+    private ClockService clockService;
+    @Inject
+    private ToDoItems toDoItems;
+
     private ToDoItem toDoItem;
 
     @Before
     public void setUp() throws Exception {
-        scenarioExecution().install(new ToDoItemsIntegTestFixture());
-
-        final List<ToDoItem> all = wrap(service(ToDoItems.class)).notYetComplete();
+        final List<ToDoItem> all = wrap(toDoItems).notYetComplete();
         toDoItem = wrap(all.get(0));
     }
 
@@ -51,7 +58,7 @@ public class ToDoItemTest_dueBy extends ToDoIntegTest {
     public void happyCase() throws Exception {
         
         // when
-        final LocalDate fiveDaysFromNow = Clock.getTimeAsLocalDate().plusDays(5);
+        final LocalDate fiveDaysFromNow = clockService.now().plusDays(5);
         toDoItem.setDueBy(fiveDaysFromNow);
         
         // then
@@ -72,7 +79,7 @@ public class ToDoItemTest_dueBy extends ToDoIntegTest {
     @Test
     public void canBeUpToSixDaysInPast() throws Exception {
         
-        final LocalDate nowAsLocalDate = Clock.getTimeAsLocalDate();
+        final LocalDate nowAsLocalDate = clockService.now();
         final LocalDate sixDaysAgo = nowAsLocalDate.plusDays(-5);
 
         // when

http://git-wip-us.apache.org/repos/asf/isis/blob/d27a47d5/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemTest_notes.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemTest_notes.java b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemTest_notes.java
index 3b05564..bc282a1 100644
--- a/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemTest_notes.java
+++ b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemTest_notes.java
@@ -18,37 +18,34 @@
  */
 package integration.tests.props;
 
-import static org.hamcrest.CoreMatchers.equalTo;
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.not;
-import static org.hamcrest.CoreMatchers.nullValue;
-import static org.junit.Assert.assertThat;
-import integration.tests.ToDoIntegTest;
-
-import java.util.List;
-
 import dom.todo.ToDoItem;
 import dom.todo.ToDoItemSubscriptions;
 import dom.todo.ToDoItems;
 import fixture.todo.integtests.ToDoItemsIntegTestFixture;
+import integration.tests.ToDoIntegTest;
 
+import java.util.List;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
-
-import org.apache.isis.applib.services.eventbus.CollectionRemovedFromEvent;
 import org.apache.isis.applib.services.eventbus.PropertyChangedEvent;
 
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.nullValue;
+import static org.junit.Assert.assertThat;
+
 public class ToDoItemTest_notes extends ToDoIntegTest {
 
+    @Before
+    public void setUpData() throws Exception {
+        scenarioExecution().install(new ToDoItemsIntegTestFixture());
+    }
+
     private ToDoItem toDoItem;
     private ToDoItemSubscriptions toDoItemSubscriptions;
 
     @Before
     public void setUp() throws Exception {
-        // given
-        scenarioExecution().install(new ToDoItemsIntegTestFixture());
-
         final List<ToDoItem> all = wrap(service(ToDoItems.class)).notYetComplete();
         toDoItem = wrap(all.get(0));
         toDoItemSubscriptions = service(ToDoItemSubscriptions.class);

http://git-wip-us.apache.org/repos/asf/isis/blob/d27a47d5/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemTest_ownedBy.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemTest_ownedBy.java b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemTest_ownedBy.java
index ff976b7..e85d3f5 100644
--- a/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemTest_ownedBy.java
+++ b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemTest_ownedBy.java
@@ -18,29 +18,31 @@
  */
 package integration.tests.props;
 
-import static org.hamcrest.CoreMatchers.*;
-import static org.junit.Assert.assertThat;
-import integration.tests.ToDoIntegTest;
-
-import java.util.List;
-
 import dom.todo.ToDoItem;
 import dom.todo.ToDoItems;
-import dom.todo.ToDoItem.Category;
 import fixture.todo.integtests.ToDoItemsIntegTestFixture;
+import integration.tests.ToDoIntegTest;
 
+import java.util.List;
+import javax.inject.Inject;
 import org.junit.Before;
 import org.junit.Test;
 
 public class ToDoItemTest_ownedBy extends ToDoIntegTest {
 
+    @Before
+    public void setUpData() throws Exception {
+        scenarioExecution().install(new ToDoItemsIntegTestFixture());
+    }
+
+    @Inject
+    private ToDoItems toDoItems;
+
     private ToDoItem toDoItem;
 
     @Before
     public void setUp() throws Exception {
-        scenarioExecution().install(new ToDoItemsIntegTestFixture());
-
-        final List<ToDoItem> all = wrap(service(ToDoItems.class)).notYetComplete();
+        final List<ToDoItem> all = wrap(toDoItems).notYetComplete();
         toDoItem = wrap(all.get(0));
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/d27a47d5/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemTest_subcategory.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemTest_subcategory.java b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemTest_subcategory.java
index b572041..61401a8 100644
--- a/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemTest_subcategory.java
+++ b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemTest_subcategory.java
@@ -18,28 +18,34 @@
  */
 package integration.tests.props;
 
-import static org.hamcrest.CoreMatchers.containsString;
-import integration.tests.ToDoIntegTest;
-
-import java.util.List;
-
 import dom.todo.ToDoItem;
 import dom.todo.ToDoItem.Subcategory;
 import dom.todo.ToDoItems;
 import fixture.todo.integtests.ToDoItemsIntegTestFixture;
+import integration.tests.ToDoIntegTest;
 
+import java.util.List;
+import javax.inject.Inject;
 import org.junit.Before;
 import org.junit.Test;
 
+import static org.hamcrest.CoreMatchers.containsString;
+
 public class ToDoItemTest_subcategory extends ToDoIntegTest {
 
+    @Before
+    public void setUpData() throws Exception {
+        scenarioExecution().install(new ToDoItemsIntegTestFixture());
+    }
+
+    @Inject
+    private ToDoItems toDoItems;
+
     private ToDoItem toDoItem;
 
     @Before
     public void setUp() throws Exception {
-        scenarioExecution().install(new ToDoItemsIntegTestFixture());
-
-        final List<ToDoItem> all = wrap(service(ToDoItems.class)).notYetComplete();
+        final List<ToDoItem> all = wrap(toDoItems).notYetComplete();
         toDoItem = wrap(all.get(0));
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/d27a47d5/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/repo/ToDoItemsTest_finders.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/repo/ToDoItemsTest_finders.java b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/repo/ToDoItemsTest_finders.java
index dcc9398..68f3fcd 100644
--- a/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/repo/ToDoItemsTest_finders.java
+++ b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/repo/ToDoItemsTest_finders.java
@@ -18,32 +18,38 @@
  */
 package integration.tests.repo;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-import integration.tests.ToDoIntegTest;
-
-import java.util.List;
-
 import dom.todo.ToDoItem;
 import dom.todo.ToDoItems;
 import fixture.todo.integtests.ToDoItemsIntegTestFixture;
+import integration.tests.ToDoIntegTest;
 
+import java.util.List;
+import javax.inject.Inject;
 import org.hamcrest.Matchers;
 import org.junit.Before;
 import org.junit.Test;
 
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
 public class ToDoItemsTest_finders extends ToDoIntegTest {
 
+    @Before
+    public void setUpData() throws Exception {
+        scenarioExecution().install(new ToDoItemsIntegTestFixture());
+    }
+
+    @Inject
+    private ToDoItems toDoItems;
+
     private int notYetCompletedSize;
     private int completedSize;
 
     @Before
     public void setUp() throws Exception {
-        scenarioExecution().install(new ToDoItemsIntegTestFixture());
+        final List<ToDoItem> notYetCompleteItems = wrap(toDoItems).notYetComplete();
+        final List<ToDoItem> completedItems = wrap(toDoItems).complete();
 
-        final List<ToDoItem> notYetCompleteItems = wrap(service(ToDoItems.class)).notYetComplete();
-        final List<ToDoItem> completedItems = wrap(service(ToDoItems.class)).complete();
-        
         notYetCompletedSize = notYetCompleteItems.size();
         completedSize = completedItems.size();
         

http://git-wip-us.apache.org/repos/asf/isis/blob/d27a47d5/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/repo/ToDoItemsTest_newToDo_and_delete.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/repo/ToDoItemsTest_newToDo_and_delete.java b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/repo/ToDoItemsTest_newToDo_and_delete.java
index 0fa2e35..7d75a95 100644
--- a/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/repo/ToDoItemsTest_newToDo_and_delete.java
+++ b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/repo/ToDoItemsTest_newToDo_and_delete.java
@@ -18,23 +18,34 @@
  */
 package integration.tests.repo;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-import integration.tests.ToDoIntegTest;
 import dom.todo.ToDoItem;
-import dom.todo.ToDoItems;
 import dom.todo.ToDoItem.Category;
 import dom.todo.ToDoItem.Subcategory;
+import dom.todo.ToDoItems;
+import integration.tests.ToDoIntegTest;
 
+import javax.inject.Inject;
+import org.junit.Before;
 import org.junit.Test;
 
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
 public class ToDoItemsTest_newToDo_and_delete extends ToDoIntegTest {
 
+    @Before
+    public void setUpData() throws Exception {
+        // none
+    }
+
+    @Inject
+    private ToDoItems toDoItems;
+
     @Test
     public void happyCase() throws Exception {
         
         // given
-        int size = wrap(service(ToDoItems.class)).notYetComplete().size();
+        int size = wrap(toDoItems).notYetComplete().size();
         
         // when
         final ToDoItem newToDo = wrap(service(ToDoItems.class)).newToDo("new todo", Category.Professional, Subcategory.OpenSource, null, null);

http://git-wip-us.apache.org/repos/asf/isis/blob/d27a47d5/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/smoke/ToDoItemTest_title.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/smoke/ToDoItemTest_title.java b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/smoke/ToDoItemTest_title.java
index 932d7bf..6850a33 100644
--- a/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/smoke/ToDoItemTest_title.java
+++ b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/smoke/ToDoItemTest_title.java
@@ -18,35 +18,39 @@
  */
 package integration.tests.smoke;
 
-import static org.hamcrest.CoreMatchers.containsString;
-import static org.hamcrest.CoreMatchers.not;
-import static org.junit.Assert.assertThat;
-import integration.tests.ToDoIntegTest;
-
-import java.util.List;
-
 import dom.todo.ToDoItem;
 import dom.todo.ToDoItems;
 import fixture.todo.integtests.ToDoItemsIntegTestFixture;
+import integration.tests.ToDoIntegTest;
 
+import java.util.List;
+import javax.inject.Inject;
 import org.joda.time.LocalDate;
 import org.junit.Before;
 import org.junit.Test;
-
 import org.apache.isis.applib.clock.Clock;
 
+import static org.hamcrest.CoreMatchers.containsString;
+import static org.hamcrest.CoreMatchers.not;
+import static org.junit.Assert.assertThat;
+
 public class ToDoItemTest_title extends ToDoIntegTest {
 
+    @Before
+    public void setUpData() throws Exception {
+        scenarioExecution().install(new ToDoItemsIntegTestFixture());
+    }
+
+    @Inject
+    private ToDoItems toDoItems;
+
     private ToDoItem toDoItem;
     private LocalDate dueBy;
 
-
     @Before
     public void setUp() throws Exception {
 
-        scenarioExecution().install(new ToDoItemsIntegTestFixture());
-        
-        final List<ToDoItem> all = wrap(service(ToDoItems.class)).notYetComplete();
+        final List<ToDoItem> all = wrap(toDoItems).notYetComplete();
         toDoItem = wrap(all.get(0));
 
         dueBy = toDoItem.getDueBy();

http://git-wip-us.apache.org/repos/asf/isis/blob/d27a47d5/example/application/simple_wicket_restful_jdo/integtests/src/test/java/integration/tests/SimpleAppIntegTest.java
----------------------------------------------------------------------
diff --git a/example/application/simple_wicket_restful_jdo/integtests/src/test/java/integration/tests/SimpleAppIntegTest.java b/example/application/simple_wicket_restful_jdo/integtests/src/test/java/integration/tests/SimpleAppIntegTest.java
index 566a2d9..301678b 100644
--- a/example/application/simple_wicket_restful_jdo/integtests/src/test/java/integration/tests/SimpleAppIntegTest.java
+++ b/example/application/simple_wicket_restful_jdo/integtests/src/test/java/integration/tests/SimpleAppIntegTest.java
@@ -27,7 +27,6 @@ import org.apache.isis.core.integtestsupport.scenarios.ScenarioExecutionForInteg
 
 public abstract class SimpleAppIntegTest extends IntegrationTestAbstract {
 
-    
     @BeforeClass
     public static void initClass() {
         org.apache.log4j.PropertyConfigurator.configure("logging.properties");

http://git-wip-us.apache.org/repos/asf/isis/blob/d27a47d5/example/application/simple_wicket_restful_jdo/integtests/src/test/java/integration/tests/smoke/SimpleObjectsTest_listAll_and_create.java
----------------------------------------------------------------------
diff --git a/example/application/simple_wicket_restful_jdo/integtests/src/test/java/integration/tests/smoke/SimpleObjectsTest_listAll_and_create.java b/example/application/simple_wicket_restful_jdo/integtests/src/test/java/integration/tests/smoke/SimpleObjectsTest_listAll_and_create.java
index 988d8a2..2a19af8 100644
--- a/example/application/simple_wicket_restful_jdo/integtests/src/test/java/integration/tests/smoke/SimpleObjectsTest_listAll_and_create.java
+++ b/example/application/simple_wicket_restful_jdo/integtests/src/test/java/integration/tests/smoke/SimpleObjectsTest_listAll_and_create.java
@@ -18,39 +18,33 @@
  */
 package integration.tests.smoke;
 
-import static org.hamcrest.CoreMatchers.*;
-import static org.junit.Assert.assertThat;
-import integration.tests.SimpleAppIntegTest;
-
-import java.util.List;
-
 import dom.simple.SimpleObject;
 import dom.simple.SimpleObjects;
 import fixture.simple.SimpleObjectsFixture;
+import integration.tests.SimpleAppIntegTest;
 
-import org.joda.time.LocalDate;
+import java.util.List;
+import javax.inject.Inject;
 import org.junit.Before;
 import org.junit.Test;
 
-import org.apache.isis.applib.clock.Clock;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
 
 public class SimpleObjectsTest_listAll_and_create extends SimpleAppIntegTest {
 
-    private SimpleObjects simpleObjects;
-
     @Before
-    public void setUp() throws Exception {
-
+    public void setUpData() throws Exception {
         scenarioExecution().install(new SimpleObjectsFixture());
-        
-        simpleObjects = wrap(service(SimpleObjects.class));
     }
 
-    
+    @Inject
+    private SimpleObjects simpleObjects;
+
     @Test
     public void listAll() throws Exception {
 
-        final List<SimpleObject> all = simpleObjects.listAll();
+        final List<SimpleObject> all = wrap(simpleObjects).listAll();
         assertThat(all.size(), is(3));
         
         SimpleObject simpleObject = wrap(all.get(0));
@@ -59,10 +53,10 @@ public class SimpleObjectsTest_listAll_and_create extends SimpleAppIntegTest {
     
     @Test
     public void create() throws Exception {
+
+        wrap(simpleObjects).create("Faz");
         
-        simpleObjects.create("Faz");
-        
-        final List<SimpleObject> all = simpleObjects.listAll();
+        final List<SimpleObject> all = wrap(simpleObjects).listAll();
         assertThat(all.size(), is(4));
     }
 


[2/2] git commit: ISIS-783: further minor improvements to integtest framework

Posted by da...@apache.org.
ISIS-783: further minor improvements to integtest framework

* IntegrationTestAbstract#nextSession(), to supplement nextTransaction(); causes a new Isis/DataNucleus session (ie clear caches)
* IsisSystemForTest new openSession and closeSession
* ScenarioExecution new openSession and closeSesssion
* ScenarioExecution#injectServicesInto support @javax.inject.Inject for fields.


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/27144fc3
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/27144fc3
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/27144fc3

Branch: refs/heads/master
Commit: 27144fc302e43f0cf06718eb796f980c06c975bb
Parents: d27a47d
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Sun May 18 17:51:33 2014 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Sun May 18 17:51:33 2014 +0100

----------------------------------------------------------------------
 .../IntegrationTestAbstract.java                |  9 ++-
 .../integtestsupport/IsisSystemForTest.java     | 15 +++-
 .../ScenarioExecutionForIntegration.java        | 28 +++++++
 .../scenarios/ScenarioExecution.java            | 82 +++++++++++++++++++-
 4 files changed, 127 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/27144fc3/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IntegrationTestAbstract.java
----------------------------------------------------------------------
diff --git a/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IntegrationTestAbstract.java b/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IntegrationTestAbstract.java
index df15345..54a3130 100644
--- a/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IntegrationTestAbstract.java
+++ b/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IntegrationTestAbstract.java
@@ -70,7 +70,14 @@ public abstract class IntegrationTestAbstract {
         scenarioExecution().endTran(true);
         scenarioExecution().beginTran();
     }
-    
+
+    protected void nextSession() {
+        scenarioExecution().endTran(true);
+        scenarioExecution().closeSession();
+        scenarioExecution().openSession();
+        scenarioExecution().beginTran();
+    }
+
     // //////////////////////////////////////
 
     

http://git-wip-us.apache.org/repos/asf/isis/blob/27144fc3/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisSystemForTest.java
----------------------------------------------------------------------
diff --git a/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisSystemForTest.java b/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisSystemForTest.java
index fb52ea6..5683b21 100644
--- a/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisSystemForTest.java
+++ b/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisSystemForTest.java
@@ -373,11 +373,22 @@ public class IsisSystemForTest implements org.junit.rules.TestRule, DomainServic
 
     public void bounceSystem() throws Exception {
         firePreBounceSystem();
-        tearDownSystem(FireListeners.DONT_FIRE);
-        setUpSystem(FireListeners.DONT_FIRE);
+        closeSession();
+        openSession();
         firePostBounceSystem();
     }
 
+    public void openSession() throws Exception {
+        openSession(authenticationSession);
+    }
+
+    public void openSession(AuthenticationSession authenticationSession) throws Exception {
+        IsisContext.openSession(authenticationSession);
+    }
+
+    public void closeSession() throws Exception {
+        IsisContext.closeSession();
+    }
 
     private IsisSystemDefault createIsisSystem(List<Object> services) {
         final IsisSystemDefault system = new IsisSystemDefault(DeploymentType.UNIT_TESTING, services) {

http://git-wip-us.apache.org/repos/asf/isis/blob/27144fc3/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/scenarios/ScenarioExecutionForIntegration.java
----------------------------------------------------------------------
diff --git a/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/scenarios/ScenarioExecutionForIntegration.java b/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/scenarios/ScenarioExecutionForIntegration.java
index 68476b5..1c36461 100644
--- a/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/scenarios/ScenarioExecutionForIntegration.java
+++ b/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/scenarios/ScenarioExecutionForIntegration.java
@@ -18,6 +18,7 @@ package org.apache.isis.core.integtestsupport.scenarios;
 
 import org.apache.isis.applib.fixtures.InstallableFixture;
 import org.apache.isis.applib.services.wrapper.WrapperFactory;
+import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.integtestsupport.IsisSystemForTest;
 import org.apache.isis.core.specsupport.scenarios.ScenarioExecution;
 import org.apache.isis.core.specsupport.scenarios.ScenarioExecutionScope;
@@ -78,4 +79,31 @@ public class ScenarioExecutionForIntegration extends ScenarioExecution  {
         }
     }
 
+    @Override
+    public void openSession() {
+        try {
+            isft.openSession();
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    @Override
+    public void openSession(AuthenticationSession authenticationSession) {
+        try {
+            isft.openSession(authenticationSession);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    @Override
+    public void closeSession() {
+        try {
+            isft.closeSession();
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/27144fc3/core/specsupport/src/main/java/org/apache/isis/core/specsupport/scenarios/ScenarioExecution.java
----------------------------------------------------------------------
diff --git a/core/specsupport/src/main/java/org/apache/isis/core/specsupport/scenarios/ScenarioExecution.java b/core/specsupport/src/main/java/org/apache/isis/core/specsupport/scenarios/ScenarioExecution.java
index 7a6179c..962c750 100644
--- a/core/specsupport/src/main/java/org/apache/isis/core/specsupport/scenarios/ScenarioExecution.java
+++ b/core/specsupport/src/main/java/org/apache/isis/core/specsupport/scenarios/ScenarioExecution.java
@@ -16,19 +16,24 @@
  */
 package org.apache.isis.core.specsupport.scenarios;
 
+import java.lang.reflect.Field;
 import java.lang.reflect.Method;
+import java.util.Arrays;
+import java.util.List;
 import java.util.Map;
-
+import javax.inject.Inject;
+import com.google.common.base.Predicate;
+import com.google.common.collect.Iterables;
 import com.google.common.collect.Maps;
-
 import org.jmock.Mockery;
 import org.jmock.Sequence;
 import org.jmock.States;
 import org.jmock.internal.ExpectationBuilder;
-
 import org.apache.isis.applib.DomainObjectContainer;
 import org.apache.isis.applib.fixtures.InstallableFixture;
 import org.apache.isis.applib.services.wrapper.WrapperFactory;
+import org.apache.isis.core.commons.authentication.AuthenticationSession;
+import org.apache.isis.core.metamodel.exceptions.MetaModelException;
 
 
 /**
@@ -133,6 +138,7 @@ public abstract class ScenarioExecution {
     }
 
 
+
     // //////////////////////////////////////
 
     /**
@@ -372,6 +378,41 @@ public abstract class ScenarioExecution {
     // //////////////////////////////////////
 
     /**
+     * For Cucumber hooks to call.
+     *
+     * <p>
+     * This implementation is a no-op, but subclasses of this class tailored to
+     * supporting integration specs are expected to override.
+     */
+    public void openSession() {
+        // do nothing
+    }
+
+    /**
+     * For Cucumber hooks to call.
+     *
+     * <p>
+     * This implementation is a no-op, but subclasses of this class tailored to
+     * supporting integration specs are expected to override.
+     */
+    public void openSession(AuthenticationSession authenticationSession) {
+        // do nothing
+    }
+
+    /**
+     * For Cucumber hooks to call.
+     *
+     * <p>
+     * This implementation is a no-op, but subclasses of this class tailored to
+     * supporting integration specs are expected to override.
+     */
+    public void closeSession() {
+        // do nothing
+    }
+
+    // //////////////////////////////////////
+
+    /**
      * For Cucumber hooks to call, performing transaction management around each step.
      * 
      * <p>
@@ -408,20 +449,53 @@ public abstract class ScenarioExecution {
                 final Class<?> serviceClass = parameterTypes[0];
                 if(method.getName().startsWith("inject")) {
                     final Object service = service(serviceClass);
-                        method.invoke(obj, service);
+                    method.invoke(obj, service);
                 }
                 if(method.getName().startsWith("set") && serviceClass == DomainObjectContainer.class) {
                     final Object container = container();
                     method.invoke(obj, container);
                 }
             }
+            autowireViaFields(obj, obj.getClass());
+
             return obj;
         } catch (Exception e) {
             throw new RuntimeException(e);
         }
     }
 
+    private void autowireViaFields(final Object object, final Class<?> cls) {
+        final List<Field> fields = Arrays.asList(cls.getDeclaredFields());
+        final Iterable<Field> injectFields = Iterables.filter(fields, new Predicate<Field>() {
+            @Override
+            public boolean apply(Field input) {
+                final Inject annotation = input.getAnnotation(javax.inject.Inject.class);
+                return annotation != null;
+            }
+        });
 
+        for (final Field field : injectFields) {
+            final Object service = service(field.getType());
+            final Class<?> serviceClass = service.getClass();
+            field.setAccessible(true);
+            invokeInjectorField(field, object, service);
+        }
 
+        // recurse up the hierarchy
+        final Class<?> superclass = cls.getSuperclass();
+        if(superclass != null) {
+            autowireViaFields(object, superclass);
+        }
+    }
+
+    private static void invokeInjectorField(final Field field, final Object target, final Object parameter) {
+        try {
+            field.set(target, parameter);
+        } catch (IllegalArgumentException e) {
+            throw new MetaModelException(e);
+        } catch (IllegalAccessException e) {
+            throw new MetaModelException(String.format("Cannot access the %s field in %s", field.getName(), target.getClass().getName()));
+        }
+    }
 
 }