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 2017/12/07 15:01:11 UTC
[isis] 15/18: ISIS-1794: reworks BDD bootstrapping to support
dependency injection
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 <da...@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" <co...@isis.apache.org>.