This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 0f8b103f794091927b4325823918e24791f3d5fe
Author: Dan Haywood <d...@haywood-associates.co.uk>
AuthorDate: Wed Dec 6 06:35:31 2017 +0000

    ISIS-1794: reworks BDD bootstrapping to support dependency injection
    
    ... to use new integrationTest3, and have a consistent programming model 
for the glue, similar to integration tests.
    
    Currently this is just in the example simpleapp, need to generalize and 
refactor.
---
 .../scenarios/ObjectFactoryForIntegration.java     | 55 ++++++++++++++++
 .../simpleapp/application/lib/.gitignore           |  5 --
 ...arDown.java => DomainAppApplicationModule.java} | 17 +++--
 .../fixture/scenarios/DomainAppDemo.java           | 24 +++----
 .../application/manifest/DomainAppAppManifest.java | 25 +++----
 .../manifest/DomainAppAppManifestWithFixtures.java |  4 +-
 .../bdd/specglue/BootstrappingGlue.java            | 17 ++++-
 .../bdd/specglue/CatalogOfFixturesGlue.java        |  8 ++-
 .../application/bdd/specs/RunIntegBddSpecs.java    |  3 +-
 .../SimpleObjectSpec_listAllAndCreate.feature      |  4 +-
 .../integtests/DomainAppIntegTestAbstract.java     | 13 ++--
 .../application/integtests/Smoke_IntegTest.java    | 10 ++-
 .../src/test/resources/cucumber.properties         |  1 +
 ...leModuleDomSubmodule.java => SimpleModule.java} | 30 ++++++++-
 .../modules/simple/SimpleModuleManifest.java       |  9 +--
 .../simple/dom/impl/SimpleObjectRepository.java    | 10 +++
 ...pleObjectData.java => SimpleObjectBuilder.java} | 49 +++++++-------
 ...leObjectData.java => SimpleObject_persona.java} | 22 +++++--
 .../fixture/scenario/CreateSimpleObjects.java      | 77 ----------------------
 .../integtests/SimpleModuleIntegTestAbstract.java  | 14 ++--
 .../tests/SimpleObjectMenu_IntegTest.java          | 38 ++++++-----
 .../integtests/tests/SimpleObject_IntegTest.java   | 12 +---
 .../simple/specglue/SimpleObjectMenuGlue.java      | 11 ++--
 23 files changed, 241 insertions(+), 217 deletions(-)

diff --git 
a/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/scenarios/ObjectFactoryForIntegration.java
 
b/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/scenarios/ObjectFactoryForIntegration.java
new file mode 100644
index 0000000..a52868a
--- /dev/null
+++ 
b/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/scenarios/ObjectFactoryForIntegration.java
@@ -0,0 +1,55 @@
+package org.apache.isis.core.integtestsupport.scenarios;
+
+import java.lang.reflect.Constructor;
+import java.util.Map;
+
+import com.google.common.collect.Maps;
+
+import org.apache.isis.core.specsupport.scenarios.ScenarioExecution;
+
+import cucumber.api.java.ObjectFactory;
+import cucumber.runtime.CucumberException;
+
+public class ObjectFactoryForIntegration implements ObjectFactory {
+    private final Map<Class<?>, Object> instances = Maps.newHashMap();
+
+    public void start() { }
+
+    public void stop() {
+        this.instances.clear();
+    }
+
+    public boolean addClass(Class<?> clazz) {
+        return true;
+    }
+
+    public <T> T getInstance(Class<T> type) {
+        T instance = type.cast(this.instances.get(type));
+        if (instance == null) {
+            instance = this.newInstance(type);
+            if(ScenarioExecution.peek() != null) {
+                instance = this.cacheInstance(type, instance);
+                ScenarioExecution.current().injectServices(instance);
+            } else {
+                // don't cache
+            }
+        }
+        return instance;
+    }
+
+    private <T> T cacheInstance(Class<T> type, T instance) {
+        this.instances.put(type, instance);
+        return instance;
+    }
+
+    private <T> T newInstance(Class<T> type) {
+        try {
+            Constructor<T> constructor = type.getConstructor();
+            return constructor.newInstance();
+        } catch (NoSuchMethodException var4) {
+            throw new CucumberException(String.format("%s doesn't have an 
empty constructor.", type), var4);
+        } catch (Exception var5) {
+            throw new CucumberException(String.format("Failed to instantiate 
%s", type), var5);
+        }
+    }
+}
diff --git a/example/application/simpleapp/application/lib/.gitignore 
b/example/application/simpleapp/application/lib/.gitignore
deleted file mode 100644
index 70eee7e..0000000
--- a/example/application/simpleapp/application/lib/.gitignore
+++ /dev/null
@@ -1,5 +0,0 @@
-#
-# explicitly ignoring Microsoft JDBC4 jar
-# (cannot redistribute, licensing)
-#
-sqljdbc4.jar
diff --git 
a/example/application/simpleapp/application/src/main/java/domainapp/application/fixture/teardown/DomainAppTearDown.java
 
b/example/application/simpleapp/application/src/main/java/domainapp/application/DomainAppApplicationModule.java
similarity index 68%
rename from 
example/application/simpleapp/application/src/main/java/domainapp/application/fixture/teardown/DomainAppTearDown.java
rename to 
example/application/simpleapp/application/src/main/java/domainapp/application/DomainAppApplicationModule.java
index f7ea288..9dda7e7 100644
--- 
a/example/application/simpleapp/application/src/main/java/domainapp/application/fixture/teardown/DomainAppTearDown.java
+++ 
b/example/application/simpleapp/application/src/main/java/domainapp/application/DomainAppApplicationModule.java
@@ -16,17 +16,22 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package domainapp.application.fixture.teardown;
+package domainapp.application;
 
-import org.apache.isis.applib.fixturescripts.FixtureScript;
+import java.util.Set;
 
-import domainapp.modules.simple.fixture.teardown.SimpleModuleTearDown;
+import com.google.common.collect.Sets;
 
-public class DomainAppTearDown extends FixtureScript {
+import org.apache.isis.applib.Module;
+import org.apache.isis.applib.ModuleAbstract;
+
+import domainapp.modules.simple.SimpleModule;
+
+public class DomainAppApplicationModule extends ModuleAbstract {
 
     @Override
-    protected void execute(ExecutionContext executionContext) {
-        executionContext.executeChild(this, new SimpleModuleTearDown());
+    public Set<Module> getDependencies() {
+        return Sets.<Module>newHashSet(new SimpleModule());
     }
 
 }
diff --git 
a/example/application/simpleapp/application/src/main/java/domainapp/application/fixture/scenarios/DomainAppDemo.java
 
b/example/application/simpleapp/application/src/main/java/domainapp/application/fixture/scenarios/DomainAppDemo.java
index 7f3ce27..eab6c29 100644
--- 
a/example/application/simpleapp/application/src/main/java/domainapp/application/fixture/scenarios/DomainAppDemo.java
+++ 
b/example/application/simpleapp/application/src/main/java/domainapp/application/fixture/scenarios/DomainAppDemo.java
@@ -18,14 +18,11 @@
  */
 package domainapp.application.fixture.scenarios;
 
-import javax.annotation.Nullable;
+import javax.inject.Inject;
 
+import org.apache.isis.applib.AppManifest2;
 import org.apache.isis.applib.fixturescripts.FixtureScript;
-
-import domainapp.application.fixture.teardown.DomainAppTearDown;
-import domainapp.modules.simple.fixture.scenario.CreateSimpleObjects;
-import lombok.Getter;
-import lombok.Setter;
+import org.apache.isis.applib.services.metamodel.MetaModelService4;
 
 public class DomainAppDemo extends FixtureScript {
 
@@ -33,16 +30,13 @@ public class DomainAppDemo extends FixtureScript {
         withDiscoverability(Discoverability.DISCOVERABLE);
     }
 
-    @Nullable
-    @Getter @Setter
-    private Integer number;
-
     @Override
     protected void execute(final ExecutionContext ec) {
-
-        // execute
-        ec.executeChild(this, new DomainAppTearDown());
-        ec.executeChild(this, new CreateSimpleObjects().setNumber(number));
-
+        AppManifest2 appManifest2 = metaModelService4.getAppManifest2();
+        ec.executeChild(this, appManifest2.getTeardownFixture());
+        ec.executeChild(this, appManifest2.getRefDataSetupFixture());
     }
+
+    @Inject
+    MetaModelService4 metaModelService4;
 }
diff --git 
a/example/application/simpleapp/application/src/main/java/domainapp/application/manifest/DomainAppAppManifest.java
 
b/example/application/simpleapp/application/src/main/java/domainapp/application/manifest/DomainAppAppManifest.java
index c52599a..462f82f 100644
--- 
a/example/application/simpleapp/application/src/main/java/domainapp/application/manifest/DomainAppAppManifest.java
+++ 
b/example/application/simpleapp/application/src/main/java/domainapp/application/manifest/DomainAppAppManifest.java
@@ -18,32 +18,25 @@
  */
 package domainapp.application.manifest;
 
-import org.apache.isis.applib.AppManifestAbstract;
+import org.apache.isis.applib.AppManifestAbstract2;
 
-import 
domainapp.application.fixture.DomainAppApplicationModuleFixtureSubmodule;
-import 
domainapp.application.services.DomainAppApplicationModuleServicesSubmodule;
-import domainapp.modules.simple.dom.SimpleModuleDomSubmodule;
+import domainapp.application.DomainAppApplicationModule;
 
 /**
  * Bootstrap the application.
  */
-public class DomainAppAppManifest extends AppManifestAbstract {
+public class DomainAppAppManifest extends AppManifestAbstract2 {
 
-    public static final Builder BUILDER = Builder.forModules(
-                    SimpleModuleDomSubmodule.class,
-                    DomainAppApplicationModuleFixtureSubmodule.class,
-                    DomainAppApplicationModuleServicesSubmodule.class
-            )
-            .withConfigurationPropertiesFile(DomainAppAppManifest.class,
+    public DomainAppAppManifest() {
+        super(Builder2
+                .forModule(new DomainAppApplicationModule())
+                .withConfigurationPropertiesFile(DomainAppAppManifest.class,
                     "isis.properties",
                     "authentication_shiro.properties",
                     "persistor_datanucleus.properties",
                     "viewer_restfulobjects.properties",
-                    "viewer_wicket.properties"
-            ).withAuthMechanism("shiro");
-
-    public DomainAppAppManifest() {
-        super(BUILDER);
+                    "viewer_wicket.properties")
+                .withAuthMechanism("shiro"));
     }
 
 }
diff --git 
a/example/application/simpleapp/application/src/main/java/domainapp/application/manifest/DomainAppAppManifestWithFixtures.java
 
b/example/application/simpleapp/application/src/main/java/domainapp/application/manifest/DomainAppAppManifestWithFixtures.java
index 39331ab..062795e 100644
--- 
a/example/application/simpleapp/application/src/main/java/domainapp/application/manifest/DomainAppAppManifestWithFixtures.java
+++ 
b/example/application/simpleapp/application/src/main/java/domainapp/application/manifest/DomainAppAppManifestWithFixtures.java
@@ -22,7 +22,7 @@ import java.util.List;
 
 import org.apache.isis.applib.fixturescripts.FixtureScript;
 
-import domainapp.modules.simple.fixture.scenario.CreateSimpleObjects;
+import domainapp.modules.simple.fixture.SimpleObjectBuilder;
 
 /**
  * Run the app but setting up any fixtures.
@@ -30,7 +30,7 @@ import 
domainapp.modules.simple.fixture.scenario.CreateSimpleObjects;
 public class DomainAppAppManifestWithFixtures extends DomainAppAppManifest {
 
     @Override protected void overrideFixtures(final List<Class<? extends 
FixtureScript>> fixtureScripts) {
-        fixtureScripts.add(CreateSimpleObjects.class);
+        fixtureScripts.add(SimpleObjectBuilder.class);
     }
 
 }
diff --git 
a/example/application/simpleapp/application/src/test/java/domainapp/application/bdd/specglue/BootstrappingGlue.java
 
b/example/application/simpleapp/application/src/test/java/domainapp/application/bdd/specglue/BootstrappingGlue.java
index 43f59e1..29d13da 100644
--- 
a/example/application/simpleapp/application/src/test/java/domainapp/application/bdd/specglue/BootstrappingGlue.java
+++ 
b/example/application/simpleapp/application/src/test/java/domainapp/application/bdd/specglue/BootstrappingGlue.java
@@ -16,24 +16,37 @@ O *  Licensed to the Apache Software Foundation (ASF) under 
one or more
  */
 package domainapp.application.bdd.specglue;
 
+import org.apache.isis.core.integtestsupport.IntegrationTestAbstract3;
 import org.apache.isis.core.specsupport.scenarios.ScenarioExecutionScope;
 import org.apache.isis.core.specsupport.specs.CukeGlueAbstract;
 
 import cucumber.api.java.After;
 import cucumber.api.java.Before;
-import domainapp.application.integtests.DomainAppIntegTestAbstract;
+import domainapp.application.DomainAppApplicationModule;
 
 public class BootstrappingGlue extends CukeGlueAbstract {
 
     @Before(value={"@integration"}, order=100)
     public void beforeScenarioIntegrationScope() {
-        DomainAppIntegTestAbstract.initSystem();
+
+        IntegrationTestAbstract3 integTest =
+                new IntegrationTestAbstract3(new DomainAppApplicationModule()) 
{};
+        integTest.bootstrapAndSetupIfRequired();
+
         before(ScenarioExecutionScope.INTEGRATION);
+
+        scenarioExecution().putVar(IntegrationTestAbstract3.class.getName(), 
"current", integTest);
     }
 
     @After
     public void afterScenario(cucumber.api.Scenario sc) {
         assertMocksSatisfied();
+
+        IntegrationTestAbstract3 integTest =
+                
scenarioExecution().getVar(IntegrationTestAbstract3.class.getName(), "current",
+                        IntegrationTestAbstract3.class);
+        integTest.tearDownAllModules();
+
         after(sc);
     }
 }
diff --git 
a/example/application/simpleapp/application/src/test/java/domainapp/application/bdd/specglue/CatalogOfFixturesGlue.java
 
b/example/application/simpleapp/application/src/test/java/domainapp/application/bdd/specglue/CatalogOfFixturesGlue.java
index a5adbac..9d6b816 100644
--- 
a/example/application/simpleapp/application/src/test/java/domainapp/application/bdd/specglue/CatalogOfFixturesGlue.java
+++ 
b/example/application/simpleapp/application/src/test/java/domainapp/application/bdd/specglue/CatalogOfFixturesGlue.java
@@ -16,6 +16,9 @@
  */
 package domainapp.application.bdd.specglue;
 
+import javax.inject.Inject;
+
+import org.apache.isis.applib.fixturescripts.FixtureScripts;
 import org.apache.isis.core.specsupport.specs.CukeGlueAbstract;
 
 import cucumber.api.java.Before;
@@ -25,7 +28,10 @@ public class CatalogOfFixturesGlue extends CukeGlueAbstract {
 
     @Before(value={"@integration", "@DomainAppDemo"}, order=20000)
     public void integrationFixtures() throws Throwable {
-        scenarioExecution().install(new DomainAppDemo());
+        fixtureScripts.runFixtureScript(new DomainAppDemo(), null);
     }
 
+    @Inject
+    FixtureScripts fixtureScripts;
+
 }
diff --git 
a/example/application/simpleapp/application/src/test/java/domainapp/application/bdd/specs/RunIntegBddSpecs.java
 
b/example/application/simpleapp/application/src/test/java/domainapp/application/bdd/specs/RunIntegBddSpecs.java
index 4d9f543..77e5a5e 100644
--- 
a/example/application/simpleapp/application/src/test/java/domainapp/application/bdd/specs/RunIntegBddSpecs.java
+++ 
b/example/application/simpleapp/application/src/test/java/domainapp/application/bdd/specs/RunIntegBddSpecs.java
@@ -36,7 +36,8 @@ import cucumber.api.junit.Cucumber;
                 "classpath:domainapp.modules.simple.specglue"
         },
         strict = true,
-        tags = { "~@backlog", "~@ignore" })
+        tags = { "~@backlog", "~@ignore" }
+)
 public class RunIntegBddSpecs {
     // intentionally empty 
 }
diff --git 
a/example/application/simpleapp/application/src/test/java/domainapp/application/bdd/specs/SimpleObjectSpec_listAllAndCreate.feature
 
b/example/application/simpleapp/application/src/test/java/domainapp/application/bdd/specs/SimpleObjectSpec_listAllAndCreate.feature
index 083e2cb..24d69b7 100644
--- 
a/example/application/simpleapp/application/src/test/java/domainapp/application/bdd/specs/SimpleObjectSpec_listAllAndCreate.feature
+++ 
b/example/application/simpleapp/application/src/test/java/domainapp/application/bdd/specs/SimpleObjectSpec_listAllAndCreate.feature
@@ -19,8 +19,8 @@ Feature: List and Create New Simple Objects
 
   @integration
   Scenario: Existing simple objects can be listed and new ones created
-    Given there are initially 3 simple objects
+    Given there are initially 10 simple objects
     When  I create a new simple object
-    Then  there are 4 simple objects 
+    Then  there are 11 simple objects
 
     
\ No newline at end of file
diff --git 
a/example/application/simpleapp/application/src/test/java/domainapp/application/integtests/DomainAppIntegTestAbstract.java
 
b/example/application/simpleapp/application/src/test/java/domainapp/application/integtests/DomainAppIntegTestAbstract.java
index 02ee1e1..675278d 100644
--- 
a/example/application/simpleapp/application/src/test/java/domainapp/application/integtests/DomainAppIntegTestAbstract.java
+++ 
b/example/application/simpleapp/application/src/test/java/domainapp/application/integtests/DomainAppIntegTestAbstract.java
@@ -18,17 +18,14 @@
  */
 package domainapp.application.integtests;
 
-import org.junit.BeforeClass;
+import org.apache.isis.core.integtestsupport.IntegrationTestAbstract3;
 
-import org.apache.isis.core.integtestsupport.IntegrationTestAbstract2;
+import domainapp.application.DomainAppApplicationModule;
 
-import domainapp.application.manifest.DomainAppAppManifest;
+public abstract class DomainAppIntegTestAbstract extends 
IntegrationTestAbstract3 {
 
-public abstract class DomainAppIntegTestAbstract extends 
IntegrationTestAbstract2 {
-
-    @BeforeClass
-    public static void initSystem() {
-        bootstrapUsing(new DomainAppAppManifest());
+    public DomainAppIntegTestAbstract() {
+        super(new DomainAppApplicationModule());
     }
 
 }
diff --git 
a/example/application/simpleapp/application/src/test/java/domainapp/application/integtests/Smoke_IntegTest.java
 
b/example/application/simpleapp/application/src/test/java/domainapp/application/integtests/Smoke_IntegTest.java
index 08e64ef..b724fb9 100644
--- 
a/example/application/simpleapp/application/src/test/java/domainapp/application/integtests/Smoke_IntegTest.java
+++ 
b/example/application/simpleapp/application/src/test/java/domainapp/application/integtests/Smoke_IntegTest.java
@@ -24,10 +24,11 @@ import javax.inject.Inject;
 
 import org.junit.Test;
 
+import org.apache.isis.applib.AppManifest2;
 import org.apache.isis.applib.fixturescripts.FixtureScripts;
+import org.apache.isis.applib.services.metamodel.MetaModelService4;
 import org.apache.isis.applib.services.xactn.TransactionService;
 
-import domainapp.application.fixture.teardown.DomainAppTearDown;
 import domainapp.modules.simple.dom.impl.SimpleObject;
 import domainapp.modules.simple.dom.impl.SimpleObjectMenu;
 import static org.assertj.core.api.Assertions.assertThat;
@@ -41,12 +42,15 @@ public class Smoke_IntegTest extends 
DomainAppIntegTestAbstract {
     @Inject
     SimpleObjectMenu menu;
 
+    @Inject
+    MetaModelService4 metaModelService4;
+
     @Test
     public void create() throws Exception {
 
         // given
-        DomainAppTearDown fs = new DomainAppTearDown();
-        fixtureScripts.runFixtureScript(fs, null);
+        AppManifest2 appManifest2 = metaModelService4.getAppManifest2();
+        fixtureScripts.runFixtureScript(appManifest2.getTeardownFixture(), 
null);
         transactionService.nextTransaction();
 
 
diff --git 
a/example/application/simpleapp/application/src/test/resources/cucumber.properties
 
b/example/application/simpleapp/application/src/test/resources/cucumber.properties
new file mode 100644
index 0000000..683c38a
--- /dev/null
+++ 
b/example/application/simpleapp/application/src/test/resources/cucumber.properties
@@ -0,0 +1 @@
+cucumber.api.java.ObjectFactory=org.apache.isis.core.integtestsupport.scenarios.ObjectFactoryForIntegration
\ No newline at end of file
diff --git 
a/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/dom/SimpleModuleDomSubmodule.java
 
b/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/SimpleModule.java
similarity index 52%
rename from 
example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/dom/SimpleModuleDomSubmodule.java
rename to 
example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/SimpleModule.java
index 7d314e8..e961c22 100644
--- 
a/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/dom/SimpleModuleDomSubmodule.java
+++ 
b/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/SimpleModule.java
@@ -16,10 +16,34 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package domainapp.modules.simple.dom;
+package domainapp.modules.simple;
 
-public final class SimpleModuleDomSubmodule {
-    private SimpleModuleDomSubmodule(){}
+import org.apache.isis.applib.fixturescripts.FixtureScript;
+import org.apache.isis.applib.fixturescripts.setup.PersonaEnumPersistAll;
+import org.apache.isis.applib.fixturescripts.teardown.TeardownFixtureAbstract2;
+import org.apache.isis.applib.ModuleAbstract;
+
+import domainapp.modules.simple.dom.impl.SimpleObject;
+import domainapp.modules.simple.fixture.SimpleObject_persona;
+
+public class SimpleModule extends ModuleAbstract {
+
+    @Override
+    public FixtureScript getRefDataSetupFixture() {
+        // the intention of this method is to initialize ref data rather than 
operational/transactional data
+        // the line below demonstrates how to persist every instance of 
SimpleObject_persona enum easily
+        return new PersonaEnumPersistAll(SimpleObject_persona.class);
+    }
+
+    @Override
+    public FixtureScript getTeardownFixture() {
+        return new TeardownFixtureAbstract2() {
+            @Override
+            protected void execute(ExecutionContext executionContext) {
+                deleteFrom(SimpleObject.class);
+            }
+        };
+    }
 
     public static class PropertyDomainEvent<S,T>
             extends 
org.apache.isis.applib.services.eventbus.PropertyDomainEvent<S,T> {}
diff --git 
a/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/SimpleModuleManifest.java
 
b/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/SimpleModuleManifest.java
index 961695d..32396fa 100644
--- 
a/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/SimpleModuleManifest.java
+++ 
b/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/SimpleModuleManifest.java
@@ -19,19 +19,14 @@
 package domainapp.modules.simple;
 
 import org.apache.isis.applib.AppManifestAbstract;
-
-import domainapp.modules.simple.dom.SimpleModuleDomSubmodule;
-import domainapp.modules.simple.fixture.SimpleModuleFixtureSubmodule;
+import org.apache.isis.applib.Module;
 
 /**
  * Used by <code>isis-maven-plugin</code> (build-time validation of the 
module) and also by module-level integration tests.
  */
 public class SimpleModuleManifest extends AppManifestAbstract {
 
-    public static final Builder BUILDER = Builder.forModules(
-            SimpleModuleDomSubmodule.class,
-            SimpleModuleFixtureSubmodule.class
-    );
+    public static final Builder BUILDER = Module.Util.builderFor(new 
SimpleModule());
 
     public SimpleModuleManifest() {
         super(BUILDER);
diff --git 
a/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/dom/impl/SimpleObjectRepository.java
 
b/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/dom/impl/SimpleObjectRepository.java
index 1b652d5..8e2fc91 100644
--- 
a/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/dom/impl/SimpleObjectRepository.java
+++ 
b/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/dom/impl/SimpleObjectRepository.java
@@ -47,6 +47,16 @@ public class SimpleObjectRepository {
                 .executeList();
     }
 
+    public SimpleObject findByNameExact(final String name) {
+        TypesafeQuery<SimpleObject> q = 
isisJdoSupport.newTypesafeQuery(SimpleObject.class);
+        final QSimpleObject cand = QSimpleObject.candidate();
+        q = q.filter(
+                cand.name.eq(q.stringParameter("name"))
+        );
+        return q.setParameter("name", name)
+                .executeUnique();
+    }
+
     public SimpleObject create(final String name) {
         return repositoryService.persist(new SimpleObject(name));
     }
diff --git 
a/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/fixture/scenario/SimpleObjectData.java
 
b/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/fixture/SimpleObjectBuilder.java
similarity index 59%
copy from 
example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/fixture/scenario/SimpleObjectData.java
copy to 
example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/fixture/SimpleObjectBuilder.java
index 8cf4270..bda6adb 100644
--- 
a/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/fixture/scenario/SimpleObjectData.java
+++ 
b/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/fixture/SimpleObjectBuilder.java
@@ -17,33 +17,34 @@
  *  under the License.
  */
 
-package domainapp.modules.simple.fixture.scenario;
+package domainapp.modules.simple.fixture;
+
+import org.apache.isis.applib.fixturescripts.BuilderScriptAbstract;
 
 import domainapp.modules.simple.dom.impl.SimpleObject;
 import domainapp.modules.simple.dom.impl.SimpleObjectMenu;
-import lombok.AllArgsConstructor;
-
-@AllArgsConstructor
-public enum SimpleObjectData {
-
-    FOO("Foo"),
-    BAR("Bar"),
-    BAZ("Baz"),
-    FRODO("Frodo"),
-    FROYO("Froyo"),
-    FIZZ("Fizz"),
-    BIP("Bip"),
-    BOP("Bop"),
-    BANG("Bang"),
-    BOO("Boo");
-
-    private final String name;
-
-    public SimpleObject createWith(final SimpleObjectMenu menu) {
-        return menu.create(name);
-    }
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.Accessors;
+
+@Accessors(chain = true)
+public class SimpleObjectBuilder extends BuilderScriptAbstract<SimpleObject, 
SimpleObjectBuilder> {
+
+    @Getter @Setter
+    private String name;
+
+    @Getter
+    private SimpleObject object;
 
-    public SimpleObject findWith(final SimpleObjectMenu menu) {
-        return menu.findByName(name).get(0);
+    @Override
+    protected void execute(final ExecutionContext ec) {
+
+        checkParam("name", ec, String.class);
+
+        object = wrap(simpleObjectMenu).create(name);
     }
+
+    @javax.inject.Inject
+    SimpleObjectMenu simpleObjectMenu;
+
 }
diff --git 
a/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/fixture/scenario/SimpleObjectData.java
 
b/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/fixture/SimpleObject_persona.java
similarity index 58%
rename from 
example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/fixture/scenario/SimpleObjectData.java
rename to 
example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/fixture/SimpleObject_persona.java
index 8cf4270..6786d95 100644
--- 
a/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/fixture/scenario/SimpleObjectData.java
+++ 
b/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/fixture/SimpleObject_persona.java
@@ -17,14 +17,19 @@
  *  under the License.
  */
 
-package domainapp.modules.simple.fixture.scenario;
+package domainapp.modules.simple.fixture;
+
+import org.apache.isis.applib.fixturescripts.PersonaWithBuilderScript;
+import org.apache.isis.applib.fixturescripts.PersonaWithFinder;
+import org.apache.isis.applib.services.registry.ServiceRegistry2;
 
 import domainapp.modules.simple.dom.impl.SimpleObject;
-import domainapp.modules.simple.dom.impl.SimpleObjectMenu;
+import domainapp.modules.simple.dom.impl.SimpleObjectRepository;
 import lombok.AllArgsConstructor;
 
 @AllArgsConstructor
-public enum SimpleObjectData {
+public enum SimpleObject_persona implements 
PersonaWithBuilderScript<SimpleObject, SimpleObjectBuilder>,
+        PersonaWithFinder<SimpleObject> {
 
     FOO("Foo"),
     BAR("Bar"),
@@ -39,11 +44,14 @@ public enum SimpleObjectData {
 
     private final String name;
 
-    public SimpleObject createWith(final SimpleObjectMenu menu) {
-        return menu.create(name);
+    @Override
+    public SimpleObjectBuilder builder() {
+        return new SimpleObjectBuilder().setName(name);
     }
 
-    public SimpleObject findWith(final SimpleObjectMenu menu) {
-        return menu.findByName(name).get(0);
+    @Override
+    public SimpleObject findUsing(final ServiceRegistry2 serviceRegistry) {
+        SimpleObjectRepository simpleObjectRepository = 
serviceRegistry.lookupService(SimpleObjectRepository.class);
+        return simpleObjectRepository.findByNameExact(name);
     }
 }
diff --git 
a/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/fixture/scenario/CreateSimpleObjects.java
 
b/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/fixture/scenario/CreateSimpleObjects.java
deleted file mode 100644
index 2fc9e55..0000000
--- 
a/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/fixture/scenario/CreateSimpleObjects.java
+++ /dev/null
@@ -1,77 +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 domainapp.modules.simple.fixture.scenario;
-
-import java.util.List;
-
-import javax.annotation.Nullable;
-
-import com.google.common.collect.Lists;
-
-import org.apache.isis.applib.fixturescripts.FixtureScript;
-
-import domainapp.modules.simple.dom.impl.SimpleObject;
-import domainapp.modules.simple.dom.impl.SimpleObjectMenu;
-import lombok.Getter;
-import lombok.Setter;
-import lombok.experimental.Accessors;
-
-@Accessors(chain = true)
-public class CreateSimpleObjects extends FixtureScript {
-
-    /**
-     * The number of objects to create, up to 10; optional, defaults to 3.
-     */
-    @Nullable
-    @Getter @Setter
-    private Integer number;
-
-    /**
-     * The objects created by this fixture (output).
-     */
-    @Getter
-    private final List<SimpleObject> simpleObjects = Lists.newArrayList();
-
-    @Override
-    protected void execute(final ExecutionContext ec) {
-
-        int max = SimpleObjectData.values().length;
-
-        // defaults
-        final int number = defaultParam("number", ec, 3);
-
-        // validate
-        if(number < 0 || number > max) {
-            throw new IllegalArgumentException(String.format("number must be 
in range [0,%d)", max));
-        }
-
-        // execute
-        for (int i = 0; i < number; i++) {
-            final SimpleObjectData data = SimpleObjectData.values()[i];
-            final SimpleObject simpleObject =  
data.createWith(wrap(simpleObjectMenu));
-            ec.addResult(this, simpleObject);
-            simpleObjects.add(simpleObject);
-        }
-    }
-
-    @javax.inject.Inject
-    SimpleObjectMenu simpleObjectMenu;
-
-}
diff --git 
a/example/application/simpleapp/module-simple/src/test/java/domainapp/modules/simple/integtests/SimpleModuleIntegTestAbstract.java
 
b/example/application/simpleapp/module-simple/src/test/java/domainapp/modules/simple/integtests/SimpleModuleIntegTestAbstract.java
index 18ff06b..bf3cf52 100644
--- 
a/example/application/simpleapp/module-simple/src/test/java/domainapp/modules/simple/integtests/SimpleModuleIntegTestAbstract.java
+++ 
b/example/application/simpleapp/module-simple/src/test/java/domainapp/modules/simple/integtests/SimpleModuleIntegTestAbstract.java
@@ -18,17 +18,15 @@
  */
 package domainapp.modules.simple.integtests;
 
-import org.junit.BeforeClass;
+import org.apache.isis.core.integtestsupport.IntegrationTestAbstract3;
 
-import org.apache.isis.core.integtestsupport.IntegrationTestAbstract2;
+import domainapp.modules.simple.SimpleModule;
 
-import domainapp.modules.simple.SimpleModuleManifest;
+public abstract class SimpleModuleIntegTestAbstract extends 
IntegrationTestAbstract3 {
 
-public abstract class SimpleModuleIntegTestAbstract extends 
IntegrationTestAbstract2 {
-
-    @BeforeClass
-    public static void initSystem() {
-        
bootstrapUsing(SimpleModuleManifest.BUILDER.withConfigurationProperty("isis.objects.editing","false"));
+    public SimpleModuleIntegTestAbstract() {
+        super(new 
SimpleModule().withConfigurationProperty("isis.objects.editing","false"));
     }
 
+
 }
diff --git 
a/example/application/simpleapp/module-simple/src/test/java/domainapp/modules/simple/integtests/tests/SimpleObjectMenu_IntegTest.java
 
b/example/application/simpleapp/module-simple/src/test/java/domainapp/modules/simple/integtests/tests/SimpleObjectMenu_IntegTest.java
index 88016a9..8e8b030 100644
--- 
a/example/application/simpleapp/module-simple/src/test/java/domainapp/modules/simple/integtests/tests/SimpleObjectMenu_IntegTest.java
+++ 
b/example/application/simpleapp/module-simple/src/test/java/domainapp/modules/simple/integtests/tests/SimpleObjectMenu_IntegTest.java
@@ -32,12 +32,14 @@ import org.junit.Test;
 
 import org.apache.isis.applib.fixturescripts.FixtureScript;
 import org.apache.isis.applib.fixturescripts.FixtureScripts;
+import org.apache.isis.applib.fixturescripts.teardown.TeardownFixtureAbstract2;
 import org.apache.isis.applib.services.xactn.TransactionService;
 
+import domainapp.modules.simple.SimpleModule;
 import domainapp.modules.simple.dom.impl.SimpleObject;
 import domainapp.modules.simple.dom.impl.SimpleObjectMenu;
-import domainapp.modules.simple.fixture.scenario.CreateSimpleObjects;
-import domainapp.modules.simple.fixture.teardown.SimpleModuleTearDown;
+import domainapp.modules.simple.fixture.SimpleObjectBuilder;
+import domainapp.modules.simple.fixture.SimpleObject_persona;
 import domainapp.modules.simple.integtests.SimpleModuleIntegTestAbstract;
 import static org.assertj.core.api.Assertions.assertThat;
 
@@ -55,27 +57,23 @@ public class SimpleObjectMenu_IntegTest extends 
SimpleModuleIntegTestAbstract {
         @Test
         public void happyCase() throws Exception {
 
-            // given
-            fixtureScripts.runFixtureScript(new SimpleModuleTearDown(), null);
-            CreateSimpleObjects fs = new CreateSimpleObjects();
-            fixtureScripts.runFixtureScript(fs, null);
-            transactionService.nextTransaction();
-
             // when
             final List<SimpleObject> all = wrap(menu).listAll();
 
             // then
-            assertThat(all).hasSize(fs.getSimpleObjects().size());
-
-            SimpleObject simpleObject = wrap(all.get(0));
-            
assertThat(simpleObject.getName()).isEqualTo(fs.getSimpleObjects().get(0).getName());
+            assertThat(all).hasSize(SimpleObject_persona.values().length);
         }
 
         @Test
         public void whenNone() throws Exception {
 
             // given
-            FixtureScript fs = new SimpleModuleTearDown();
+            FixtureScript fs = new TeardownFixtureAbstract2() {
+                @Override
+                protected void execute(ExecutionContext executionContext) {
+                    deleteFrom(SimpleObject.class);
+                }
+            };
             fixtureScripts.runFixtureScript(fs, null);
             transactionService.nextTransaction();
 
@@ -93,7 +91,12 @@ public class SimpleObjectMenu_IntegTest extends 
SimpleModuleIntegTestAbstract {
         public void happyCase() throws Exception {
 
             // given
-            FixtureScript fs = new SimpleModuleTearDown();
+            FixtureScript fs = new TeardownFixtureAbstract2() {
+                @Override
+                protected void execute(ExecutionContext executionContext) {
+                    deleteFrom(SimpleObject.class);
+                }
+            };
             fixtureScripts.runFixtureScript(fs, null);
             transactionService.nextTransaction();
 
@@ -109,7 +112,12 @@ public class SimpleObjectMenu_IntegTest extends 
SimpleModuleIntegTestAbstract {
         public void whenAlreadyExists() throws Exception {
 
             // given
-            FixtureScript fs = new SimpleModuleTearDown();
+            FixtureScript fs = new TeardownFixtureAbstract2() {
+                @Override
+                protected void execute(ExecutionContext executionContext) {
+                    deleteFrom(SimpleObject.class);
+                }
+            };
             fixtureScripts.runFixtureScript(fs, null);
             transactionService.nextTransaction();
             wrap(menu).create("Faz");
diff --git 
a/example/application/simpleapp/module-simple/src/test/java/domainapp/modules/simple/integtests/tests/SimpleObject_IntegTest.java
 
b/example/application/simpleapp/module-simple/src/test/java/domainapp/modules/simple/integtests/tests/SimpleObject_IntegTest.java
index c7f99ab..a974686 100644
--- 
a/example/application/simpleapp/module-simple/src/test/java/domainapp/modules/simple/integtests/tests/SimpleObject_IntegTest.java
+++ 
b/example/application/simpleapp/module-simple/src/test/java/domainapp/modules/simple/integtests/tests/SimpleObject_IntegTest.java
@@ -35,9 +35,7 @@ import 
org.apache.isis.core.metamodel.services.jdosupport.Persistable_datanucleu
 
 import domainapp.modules.simple.dom.impl.SimpleObject;
 import domainapp.modules.simple.dom.impl.SimpleObjectMenu;
-import domainapp.modules.simple.fixture.scenario.CreateSimpleObjects;
-import domainapp.modules.simple.fixture.scenario.SimpleObjectData;
-import domainapp.modules.simple.fixture.teardown.SimpleModuleTearDown;
+import domainapp.modules.simple.fixture.SimpleObject_persona;
 import domainapp.modules.simple.integtests.SimpleModuleIntegTestAbstract;
 import static org.assertj.core.api.Assertions.assertThat;
 
@@ -54,13 +52,7 @@ public class SimpleObject_IntegTest extends 
SimpleModuleIntegTestAbstract {
 
     @Before
     public void setUp() throws Exception {
-        // given
-        fixtureScripts.runFixtureScript(new SimpleModuleTearDown(), null);
-        CreateSimpleObjects fs = new CreateSimpleObjects().setNumber(1);
-        fixtureScripts.runFixtureScript(fs, null);
-        transactionService.nextTransaction();
-
-        simpleObject = SimpleObjectData.FOO.findWith(wrap(simpleObjectMenu));
+        simpleObject = SimpleObject_persona.FOO.findUsing(serviceRegistry);
 
         assertThat(simpleObject).isNotNull();
     }
diff --git 
a/example/application/simpleapp/module-simple/src/test/java/domainapp/modules/simple/specglue/SimpleObjectMenuGlue.java
 
b/example/application/simpleapp/module-simple/src/test/java/domainapp/modules/simple/specglue/SimpleObjectMenuGlue.java
index c0b887e..ffa3ba2 100644
--- 
a/example/application/simpleapp/module-simple/src/test/java/domainapp/modules/simple/specglue/SimpleObjectMenuGlue.java
+++ 
b/example/application/simpleapp/module-simple/src/test/java/domainapp/modules/simple/specglue/SimpleObjectMenuGlue.java
@@ -19,6 +19,8 @@ package domainapp.modules.simple.specglue;
 import java.util.List;
 import java.util.UUID;
 
+import javax.inject.Inject;
+
 import org.apache.isis.core.specsupport.specs.CukeGlueAbstract;
 
 import cucumber.api.java.en.Given;
@@ -33,7 +35,7 @@ public class SimpleObjectMenuGlue extends CukeGlueAbstract {
     @Given("^there are.* (\\d+) simple objects$")
     public void there_are_N_simple_objects(int n) throws Throwable {
         try {
-            final List<SimpleObject> list = simpleObjectMenu().listAll();
+            final List<SimpleObject> list = wrap(simpleObjectMenu).listAll();
             assertThat(list.size(), is(n));
             putVar("java.util.List", "simpleObjects", list);
         } finally {
@@ -43,11 +45,10 @@ public class SimpleObjectMenuGlue extends CukeGlueAbstract {
     
     @When("^.*create a .*simple object$")
     public void create_a_simple_object() throws Throwable {
-        simpleObjectMenu().create(UUID.randomUUID().toString());
+        wrap(simpleObjectMenu).create(UUID.randomUUID().toString());
     }
 
-    private SimpleObjectMenu simpleObjectMenu() {
-        return service(SimpleObjectMenu.class);
-    }
+    @Inject
+    SimpleObjectMenu simpleObjectMenu;
 
 }

-- 
To stop receiving notification emails like this one, please contact
"commits@isis.apache.org" <commits@isis.apache.org>.

Reply via email to