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
+
+