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 2021/01/06 19:43:31 UTC
[isis-app-simpleapp] branch master updated: extends BDD example
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-app-simpleapp.git
The following commit(s) were added to refs/heads/master by this push:
new 57b1cf1 extends BDD example
57b1cf1 is described below
commit 57b1cf1c6f0f3711fa19fe3622df2db98d53e0a1
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Jan 6 19:43:20 2021 +0000
extends BDD example
---
.../webapp/bdd/stepdefs/BddStepDefsModule.java | 13 ++++++
.../bdd/stepdefs/domain/SimpleObjectsContext.java | 21 +++++++++
.../domain/SimpleObjectsGivenThenStepDef.java | 54 ++++++++++++++++++++++
.../bdd/stepdefs/domain/SimpleObjectsStepDef.java | 34 --------------
.../stepdefs/domain/SimpleObjectsWhenStepDef.java | 41 ++++++++++++++++
.../integtests/ApplicationIntegTestAbstract.java | 2 +
.../bdd/specs/SimpleObjectSpec_updateName.feature | 16 +++++++
7 files changed, 147 insertions(+), 34 deletions(-)
diff --git a/webapp/src/test/java/domainapp/webapp/bdd/stepdefs/BddStepDefsModule.java b/webapp/src/test/java/domainapp/webapp/bdd/stepdefs/BddStepDefsModule.java
new file mode 100644
index 0000000..ae49680
--- /dev/null
+++ b/webapp/src/test/java/domainapp/webapp/bdd/stepdefs/BddStepDefsModule.java
@@ -0,0 +1,13 @@
+package domainapp.webapp.bdd.stepdefs;
+
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Import;
+
+import domainapp.modules.simple.SimpleModule;
+
+@Configuration
+@ComponentScan
+public class BddStepDefsModule {
+
+}
diff --git a/webapp/src/test/java/domainapp/webapp/bdd/stepdefs/domain/SimpleObjectsContext.java b/webapp/src/test/java/domainapp/webapp/bdd/stepdefs/domain/SimpleObjectsContext.java
new file mode 100644
index 0000000..707bc2d
--- /dev/null
+++ b/webapp/src/test/java/domainapp/webapp/bdd/stepdefs/domain/SimpleObjectsContext.java
@@ -0,0 +1,21 @@
+package domainapp.webapp.bdd.stepdefs.domain;
+
+import org.springframework.stereotype.Service;
+
+import org.apache.isis.applib.services.wrapper.InvalidException;
+
+import lombok.Data;
+
+import domainapp.modules.simple.dom.so.SimpleObject;
+import io.cucumber.spring.ScenarioScope;
+
+@Service
+@ScenarioScope
+@Data
+public class SimpleObjectsContext {
+
+ private SimpleObject simpleObject;
+ private String originalName;
+ private InvalidException ex;
+
+}
diff --git a/webapp/src/test/java/domainapp/webapp/bdd/stepdefs/domain/SimpleObjectsGivenThenStepDef.java b/webapp/src/test/java/domainapp/webapp/bdd/stepdefs/domain/SimpleObjectsGivenThenStepDef.java
new file mode 100644
index 0000000..77f3b10
--- /dev/null
+++ b/webapp/src/test/java/domainapp/webapp/bdd/stepdefs/domain/SimpleObjectsGivenThenStepDef.java
@@ -0,0 +1,54 @@
+package domainapp.webapp.bdd.stepdefs.domain;
+
+import java.util.List;
+
+import javax.inject.Inject;
+
+import org.assertj.core.api.Assertions;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+import lombok.val;
+
+import domainapp.modules.simple.dom.so.SimpleObject;
+import domainapp.modules.simple.dom.so.SimpleObjects;
+import domainapp.webapp.bdd.CucumberTestAbstract;
+import io.cucumber.java.en.Given;
+import io.cucumber.java.en.Then;
+
+public class SimpleObjectsGivenThenStepDef extends CucumberTestAbstract {
+
+ @Inject protected SimpleObjects simpleObjects;
+ @Inject protected SimpleObjectsContext context;
+
+ @Given("a simple object")
+ public void a_simple_object() {
+ val simpleObject = wrap(simpleObjects).listAll().get(0);
+ context.setSimpleObject(simpleObject);
+ context.setOriginalName(simpleObject.getName());
+ }
+
+ @Given("^there (?:is|are).* (\\d+) simple object[s]?$")
+ public void there_are_N_simple_objects(int n) {
+ final List<SimpleObject> list = wrap(simpleObjects).listAll();
+ assertThat(list.size(), is(n));
+ }
+
+ @Then("the name is now {string}")
+ public void the_name_is_now(String name) {
+ Assertions.assertThat(context.getSimpleObject().getName()).isEqualTo(name);
+ }
+
+ @Then("the name is unchanged")
+ public void the_name_is_unchanged() {
+ Assertions.assertThat(context.getSimpleObject().getName()).isEqualTo(context.getOriginalName());
+ }
+
+ @Then("a warning is raised")
+ public void a_warning_is_raised() {
+ Assertions.assertThat(context.getEx()).isNotNull();
+ }
+
+
+}
diff --git a/webapp/src/test/java/domainapp/webapp/bdd/stepdefs/domain/SimpleObjectsStepDef.java b/webapp/src/test/java/domainapp/webapp/bdd/stepdefs/domain/SimpleObjectsStepDef.java
deleted file mode 100644
index 561fc51..0000000
--- a/webapp/src/test/java/domainapp/webapp/bdd/stepdefs/domain/SimpleObjectsStepDef.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package domainapp.webapp.bdd.stepdefs.domain;
-
-import java.util.List;
-import java.util.UUID;
-
-import javax.inject.Inject;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
-
-import domainapp.modules.simple.dom.so.SimpleObject;
-import domainapp.modules.simple.dom.so.SimpleObjects;
-import domainapp.webapp.bdd.CucumberTestAbstract;
-import io.cucumber.java.en.Given;
-import io.cucumber.java.en.When;
-
-public class SimpleObjectsStepDef extends CucumberTestAbstract {
-
- @Given("^there (?:is|are).* (\\d+) simple object[s]?$")
- public void there_are_N_simple_objects(int n) {
-
- final List<SimpleObject> list = wrap(simpleObjects).listAll();
- assertThat(list.size(), is(n));
- }
-
- @When("^.*create (?:a|another) .*simple object$")
- public void create_a_simple_object() {
-
- wrap(simpleObjects).create(UUID.randomUUID().toString());
- }
-
- @Inject protected SimpleObjects simpleObjects;
-
-}
diff --git a/webapp/src/test/java/domainapp/webapp/bdd/stepdefs/domain/SimpleObjectsWhenStepDef.java b/webapp/src/test/java/domainapp/webapp/bdd/stepdefs/domain/SimpleObjectsWhenStepDef.java
new file mode 100644
index 0000000..ab7efb4
--- /dev/null
+++ b/webapp/src/test/java/domainapp/webapp/bdd/stepdefs/domain/SimpleObjectsWhenStepDef.java
@@ -0,0 +1,41 @@
+package domainapp.webapp.bdd.stepdefs.domain;
+
+import java.util.UUID;
+
+import javax.inject.Inject;
+
+import static org.junit.jupiter.api.Assertions.fail;
+
+import org.apache.isis.applib.services.wrapper.InvalidException;
+
+import domainapp.modules.simple.dom.so.SimpleObjects;
+import domainapp.webapp.bdd.CucumberTestAbstract;
+import io.cucumber.java.en.When;
+
+public class SimpleObjectsWhenStepDef extends CucumberTestAbstract {
+
+ @Inject protected SimpleObjects simpleObjects;
+ @Inject protected SimpleObjectsContext context;
+
+ @When("^.*create (?:a|another) .*simple object$")
+ public void create_a_simple_object() {
+
+ wrap(simpleObjects).create(UUID.randomUUID().toString());
+ }
+
+ @When("^.*modify the name to '(.*)'")
+ public void modify_the_name_to(String newName) {
+ wrap(context.getSimpleObject()).updateName(newName);
+ }
+
+ @When("^.*attempt to change the name to '(.*)'")
+ public void attempt_to_change_the_name_to(String newName) {
+ try {
+ wrap(context.getSimpleObject()).updateName(newName);
+ fail();
+ } catch(InvalidException ex) {
+ this.context.setEx(ex);
+ }
+ }
+
+}
diff --git a/webapp/src/test/java/domainapp/webapp/integtests/ApplicationIntegTestAbstract.java b/webapp/src/test/java/domainapp/webapp/integtests/ApplicationIntegTestAbstract.java
index 9347e29..121ee86 100644
--- a/webapp/src/test/java/domainapp/webapp/integtests/ApplicationIntegTestAbstract.java
+++ b/webapp/src/test/java/domainapp/webapp/integtests/ApplicationIntegTestAbstract.java
@@ -14,6 +14,7 @@ import org.apache.isis.testing.fixtures.applib.IsisModuleTestingFixturesApplib;
import org.apache.isis.testing.integtestsupport.applib.IsisIntegrationTestAbstract;
import domainapp.webapp.application.ApplicationModule;
+import domainapp.webapp.bdd.stepdefs.BddStepDefsModule;
@SpringBootTest(
// we use a slightly different AppManifest compared to the production webapp (defined below)
@@ -41,6 +42,7 @@ public abstract class ApplicationIntegTestAbstract extends IsisIntegrationTestAb
IsisModuleSecurityBypass.class,
IsisModuleTestingFixturesApplib.class,
+ BddStepDefsModule.class,
ApplicationModule.class,
})
public static class AppManifest {
diff --git a/webapp/src/test/resources/domainapp/webapp/bdd/specs/SimpleObjectSpec_updateName.feature b/webapp/src/test/resources/domainapp/webapp/bdd/specs/SimpleObjectSpec_updateName.feature
new file mode 100644
index 0000000..1b021e2
--- /dev/null
+++ b/webapp/src/test/resources/domainapp/webapp/bdd/specs/SimpleObjectSpec_updateName.feature
@@ -0,0 +1,16 @@
+Feature: Can modify name (with restrictions)
+
+ @DomainAppDemo
+ Scenario: Can modify name with most characters
+ Given a simple object
+ When I modify the name to 'abc'
+ Then the name is now 'abc'
+
+ @DomainAppDemo
+ Scenario: Cannot modify name if has invalid character
+ Given a simple object
+ When I attempt to change the name to 'abc&'
+ Then the name is unchanged
+ And a warning is raised
+
+