This is an automated email from the ASF dual-hosted git repository. danhaywood pushed a commit to branch attempting-to-bring-in-bdd-specs in repository https://gitbox.apache.org/repos/asf/isis-app-simpleapp.git
commit 4626255afce6d5098c83f1b432473a71a9d21533 Author: Dan Haywood <[email protected]> AuthorDate: Tue Aug 30 22:22:18 2022 +0100 reintroduces bdd tests, though not yet being found... --- pom.xml | 2 + webapp-tests/pom.xml | 85 ++++++++++++++++++++++ .../domainapp/webapp/bdd/CucumberTestAbstract.java | 34 +++++++++ .../domainapp/webapp/bdd/specs/CucumberSpec.java | 37 ++++++++++ .../webapp/bdd/stepdefs/BddStepDefsModule.java | 13 ++++ .../bdd/stepdefs/domain/SimpleObjectsContext.java | 21 ++++++ .../domain/SimpleObjectsGivenThenStepDef.java | 54 ++++++++++++++ .../stepdefs/domain/SimpleObjectsWhenStepDef.java | 41 +++++++++++ .../stepdefs/fixtures/DomainAppDemoStepDef.java | 21 ++++++ .../stepdefs/infrastructure/BootstrapStepDef.java | 14 ++++ .../infrastructure/TransactionalStepDef.java | 50 +++++++++++++ .../webapp/integtests/WebAppIntegTestAbstract.java | 2 + .../metamodel/lockdown/current/.gitignore | 1 + .../unittests/archunit/ArchitectureTests.java | 64 ++++++++++++++++ .../mavendeps/lockdown/current/.gitignore | 1 + .../SimpleObjectSpec_listAllAndCreate.feature | 14 ++++ .../bdd/specs/SimpleObjectSpec_updateName.feature | 16 ++++ .../src/test/resources/junit-platform.properties | 19 +++++ 18 files changed, 489 insertions(+) diff --git a/pom.xml b/pom.xml index 1e28a6f..4fce2f5 100644 --- a/pom.xml +++ b/pom.xml @@ -20,6 +20,8 @@ <properties> <java.version>11</java.version> + <maven-cucumber-reporting.version>5.3.0</maven-cucumber-reporting.version> + <skipBDD>${skipTests}</skipBDD> </properties> <dependencyManagement> diff --git a/webapp-tests/pom.xml b/webapp-tests/pom.xml index f717f29..b29c5f7 100644 --- a/webapp-tests/pom.xml +++ b/webapp-tests/pom.xml @@ -30,6 +30,67 @@ </excludes> </testResource> </testResources> + <plugins> + + <!-- generate cucumber json result --> +<!-- + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-antrun-plugin</artifactId> + <executions> + <execution> + <id>cucumber-cli</id> + <phase>integration-test</phase> + <goals> + <goal>run</goal> + </goals> + <configuration> + <skip>${skipBDD}</skip> + <target> + <echo message="Running Cucumber CLI" /> + <java classname="io.cucumber.core.cli.Main" + fork="true" + failonerror="true" + newenvironment="true" + maxmemory="1024m" + classpathref="maven.test.classpath"> + <arg value="--plugin" /> + <arg value="json:${project.build.directory}/cucumber-no-clobber.json" /> + </java> + </target> + </configuration> + </execution> + </executions> + </plugin> +--> + + <!-- generate html report from cucumber json result --> +<!-- + <plugin> + <groupId>net.masterthought</groupId> + <artifactId>maven-cucumber-reporting</artifactId> + <version>${maven-cucumber-reporting.version}</version> + <executions> + <execution> + <id>default</id> + <phase>post-integration-test</phase> + <goals> + <goal>generate</goal> + </goals> + <configuration> + <projectName>SimpleApp</projectName> + <outputDirectory>${project.build.directory}</outputDirectory> + <inputDirectory>${project.build.directory}</inputDirectory> + <jsonFiles> + <param>**/cucumber-no-clobber.json</param> + </jsonFiles> + <skip>${skipBDD}</skip> + </configuration> + </execution> + </executions> + </plugin> +--> + </plugins> </build> <dependencies> @@ -48,6 +109,12 @@ <scope>test</scope> </dependency> + <dependency> + <groupId>org.apache.isis.testing</groupId> + <artifactId>isis-testing-specsupport-applib</artifactId> + <scope>test</scope> + </dependency> + <dependency> <groupId>org.apache.isis.testing</groupId> <artifactId>isis-testing-fakedata-applib</artifactId> @@ -60,6 +127,24 @@ <scope>test</scope> </dependency> + <dependency> + <groupId>org.junit.platform</groupId> + <artifactId>junit-platform-suite-api</artifactId> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>com.tngtech.archunit</groupId> + <artifactId>archunit-junit5-api</artifactId> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>com.tngtech.archunit</groupId> + <artifactId>archunit-junit5-engine</artifactId> + <scope>test</scope> + </dependency> + </dependencies> </project> diff --git a/webapp-tests/src/test/java/domainapp/webapp/bdd/CucumberTestAbstract.java b/webapp-tests/src/test/java/domainapp/webapp/bdd/CucumberTestAbstract.java new file mode 100644 index 0000000..43c9e50 --- /dev/null +++ b/webapp-tests/src/test/java/domainapp/webapp/bdd/CucumberTestAbstract.java @@ -0,0 +1,34 @@ +/* + * 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.webapp.bdd; + +import domainapp.webapp.integtests.WebAppIntegTestAbstract; +import io.cucumber.spring.CucumberContextConfiguration; + +/** + * + * Provides the App's Spring Context for testing with Cucumber. + * + */ +@CucumberContextConfiguration +public abstract class CucumberTestAbstract extends WebAppIntegTestAbstract { + + // any cucumber specific stuff might go here + +} diff --git a/webapp-tests/src/test/java/domainapp/webapp/bdd/specs/CucumberSpec.java b/webapp-tests/src/test/java/domainapp/webapp/bdd/specs/CucumberSpec.java new file mode 100644 index 0000000..1198cb1 --- /dev/null +++ b/webapp-tests/src/test/java/domainapp/webapp/bdd/specs/CucumberSpec.java @@ -0,0 +1,37 @@ +/* + * 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.webapp.bdd.specs; + +import org.junit.platform.suite.api.ConfigurationParameter; +import org.junit.platform.suite.api.IncludeEngines; +import org.junit.platform.suite.api.SelectClasspathResource; +import org.junit.platform.suite.api.Suite; + +import static io.cucumber.junit.platform.engine.Constants.GLUE_PROPERTY_NAME; + +/** + * Cucumber will scan under the specified {@link SelectClasspathResource classpath} for feature files. + */ +@Suite +@IncludeEngines("cucumber") +@SelectClasspathResource("domainapp/webapp/bdd/specs") +//@ConfigurationParameter(key = GLUE_PROPERTY_NAME, value = "domainapp.webapp.bdd.stepdefs") +public class CucumberSpec { + +} diff --git a/webapp-tests/src/test/java/domainapp/webapp/bdd/stepdefs/BddStepDefsModule.java b/webapp-tests/src/test/java/domainapp/webapp/bdd/stepdefs/BddStepDefsModule.java new file mode 100644 index 0000000..ae49680 --- /dev/null +++ b/webapp-tests/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-tests/src/test/java/domainapp/webapp/bdd/stepdefs/domain/SimpleObjectsContext.java b/webapp-tests/src/test/java/domainapp/webapp/bdd/stepdefs/domain/SimpleObjectsContext.java new file mode 100644 index 0000000..707bc2d --- /dev/null +++ b/webapp-tests/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-tests/src/test/java/domainapp/webapp/bdd/stepdefs/domain/SimpleObjectsGivenThenStepDef.java b/webapp-tests/src/test/java/domainapp/webapp/bdd/stepdefs/domain/SimpleObjectsGivenThenStepDef.java new file mode 100644 index 0000000..77f3b10 --- /dev/null +++ b/webapp-tests/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-tests/src/test/java/domainapp/webapp/bdd/stepdefs/domain/SimpleObjectsWhenStepDef.java b/webapp-tests/src/test/java/domainapp/webapp/bdd/stepdefs/domain/SimpleObjectsWhenStepDef.java new file mode 100644 index 0000000..ab7efb4 --- /dev/null +++ b/webapp-tests/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-tests/src/test/java/domainapp/webapp/bdd/stepdefs/fixtures/DomainAppDemoStepDef.java b/webapp-tests/src/test/java/domainapp/webapp/bdd/stepdefs/fixtures/DomainAppDemoStepDef.java new file mode 100644 index 0000000..6f1953a --- /dev/null +++ b/webapp-tests/src/test/java/domainapp/webapp/bdd/stepdefs/fixtures/DomainAppDemoStepDef.java @@ -0,0 +1,21 @@ +package domainapp.webapp.bdd.stepdefs.fixtures; + +import javax.inject.Inject; + +import org.apache.isis.applib.annotation.PriorityPrecedence; +import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScripts; + +import domainapp.webapp.application.fixture.scenarios.DomainAppDemo; + +public class DomainAppDemoStepDef { + + @Inject private FixtureScripts fixtureScripts; + + @io.cucumber.java.Before(value="@DomainAppDemo", order= PriorityPrecedence.MIDPOINT) + public void runDomainAppDemo() { + + fixtureScripts.runFixtureScript(new DomainAppDemo(), null); // <1> + + } + +} diff --git a/webapp-tests/src/test/java/domainapp/webapp/bdd/stepdefs/infrastructure/BootstrapStepDef.java b/webapp-tests/src/test/java/domainapp/webapp/bdd/stepdefs/infrastructure/BootstrapStepDef.java new file mode 100644 index 0000000..cb62838 --- /dev/null +++ b/webapp-tests/src/test/java/domainapp/webapp/bdd/stepdefs/infrastructure/BootstrapStepDef.java @@ -0,0 +1,14 @@ +package domainapp.webapp.bdd.stepdefs.infrastructure; + +import org.apache.isis.applib.annotation.PriorityPrecedence; + +import domainapp.webapp.bdd.CucumberTestAbstract; + +public class BootstrapStepDef extends CucumberTestAbstract { + + @io.cucumber.java.Before(order= PriorityPrecedence.FIRST) + public void bootstrap() { + // empty + } + +} diff --git a/webapp-tests/src/test/java/domainapp/webapp/bdd/stepdefs/infrastructure/TransactionalStepDef.java b/webapp-tests/src/test/java/domainapp/webapp/bdd/stepdefs/infrastructure/TransactionalStepDef.java new file mode 100644 index 0000000..b14eae3 --- /dev/null +++ b/webapp-tests/src/test/java/domainapp/webapp/bdd/stepdefs/infrastructure/TransactionalStepDef.java @@ -0,0 +1,50 @@ +package domainapp.webapp.bdd.stepdefs.infrastructure; + +import javax.inject.Inject; + +import org.springframework.transaction.PlatformTransactionManager; +import org.springframework.transaction.support.TransactionTemplate; + +import org.apache.isis.applib.annotation.PriorityPrecedence; +import org.apache.isis.applib.services.iactnlayer.InteractionContext; +import org.apache.isis.applib.services.iactnlayer.InteractionService; +import org.apache.isis.applib.services.user.UserMemento; + +import lombok.val; + +/** + * equivalent to the Spring @Transactional attribute + */ +public class TransactionalStepDef { + + private Runnable afterScenario; + + @io.cucumber.java.Before(order = PriorityPrecedence.EARLY) + public void beforeScenario(){ + + //open InteractionSession to be closed after scenario (see below) + interactionService.openInteraction(InteractionContext.ofUserWithSystemDefaults(UserMemento.ofName("initialization"))); + + val txTemplate = new TransactionTemplate(txMan); + val status = txTemplate.getTransactionManager().getTransaction(null); + afterScenario = () -> { + txTemplate.getTransactionManager().rollback(status); + interactionService.closeInteractionLayers(); + }; + + status.flush(); + } + + @io.cucumber.java.After + public void afterScenario(){ + if(afterScenario==null) { + return; + } + afterScenario.run(); + afterScenario = null; + } + + @Inject private InteractionService interactionService; + @Inject private PlatformTransactionManager txMan; + +} diff --git a/webapp-tests/src/test/java/domainapp/webapp/integtests/WebAppIntegTestAbstract.java b/webapp-tests/src/test/java/domainapp/webapp/integtests/WebAppIntegTestAbstract.java index 5859b65..5bd91c0 100644 --- a/webapp-tests/src/test/java/domainapp/webapp/integtests/WebAppIntegTestAbstract.java +++ b/webapp-tests/src/test/java/domainapp/webapp/integtests/WebAppIntegTestAbstract.java @@ -18,11 +18,13 @@ import org.apache.isis.testing.integtestsupport.applib.IsisIntegrationTestAbstra import domainapp.modules.simple.SimpleModule; import domainapp.webapp.application.ApplicationModule; +import domainapp.webapp.bdd.stepdefs.BddStepDefsModule; @SpringBootTest( classes = { // we use a slightly different configuration compared to the production (AppManifest/webapp) WebAppIntegTestAbstract.TestApp.class, + BddStepDefsModule.class, ApplicationModule.class, } ) diff --git a/webapp-tests/src/test/java/domainapp/webapp/integtests/metamodel/lockdown/current/.gitignore b/webapp-tests/src/test/java/domainapp/webapp/integtests/metamodel/lockdown/current/.gitignore new file mode 100644 index 0000000..b81c795 --- /dev/null +++ b/webapp-tests/src/test/java/domainapp/webapp/integtests/metamodel/lockdown/current/.gitignore @@ -0,0 +1 @@ +*.xml \ No newline at end of file diff --git a/webapp-tests/src/test/java/domainapp/webapp/unittests/archunit/ArchitectureTests.java b/webapp-tests/src/test/java/domainapp/webapp/unittests/archunit/ArchitectureTests.java new file mode 100644 index 0000000..a6af148 --- /dev/null +++ b/webapp-tests/src/test/java/domainapp/webapp/unittests/archunit/ArchitectureTests.java @@ -0,0 +1,64 @@ +package domainapp.webapp.unittests.archunit; + +import javax.persistence.Entity; +import javax.persistence.EntityListeners; +import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; + +import com.tngtech.archunit.base.DescribedPredicate; +import com.tngtech.archunit.core.domain.JavaAnnotation; +import com.tngtech.archunit.core.importer.ImportOption; +import com.tngtech.archunit.junit.AnalyzeClasses; +import com.tngtech.archunit.junit.ArchTest; +import com.tngtech.archunit.lang.ArchRule; + +import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.classes; +import static com.tngtech.archunit.library.Architectures.layeredArchitecture; + +import org.apache.commons.math3.geometry.spherical.oned.Arc; + +import org.apache.isis.applib.annotation.DomainObject; +import org.apache.isis.applib.annotation.DomainObjectLayout; +import org.apache.isis.persistence.jpa.applib.integration.IsisEntityListener; + +import domainapp.modules.simple.SimpleModule; +import domainapp.webapp.SimpleApp; + +@AnalyzeClasses( + packagesOf = {SimpleModule.class, SimpleApp.class}, + importOptions = { + ImportOption.DoNotIncludeTests.class + }) +public class ArchitectureTests { + + @ArchTest + static ArchRule package_dependencies = + layeredArchitecture() + .layer("simple module").definedBy("domainapp.modules.simple..") + .layer("webapp").definedBy("domainapp.webapp..") + .whereLayer("simple module").mayOnlyBeAccessedByLayers("webapp"); + +// @ArchTest +// static ArchRule classes_annotated_with_PersistenceCapable_are_also_annotated_with_DomainObject = +// classes() +// .that().areAnnotatedWith(PersistenceCapable.class) +// .should().beAnnotatedWith(DomainObject.class); + +// @ArchTest +// static ArchRule classes_annotated_with_PersistenceCapable_are_also_annotated_with_XmlJavaTypeAdapter = +// classes() +// .that().areAnnotatedWith(PersistenceCapable.class) +// .should().beAnnotatedWith(XmlJavaTypeAdapter.class); + + @ArchTest + static ArchRule classes_annotated_with_Entity_are_also_annotated_with_EntityListeners = + classes() + .that().areAnnotatedWith(Entity.class) + .should().beAnnotatedWith(EntityListeners.class); + + @ArchTest + static ArchRule classes_annotated_with_DomainObject_are_also_annotated_with_DomainObjectLayout = + classes() + .that().areAnnotatedWith(DomainObject.class) + .should().beAnnotatedWith(DomainObjectLayout.class); + +} diff --git a/webapp-tests/src/test/java/domainapp/webapp/unittests/mavendeps/lockdown/current/.gitignore b/webapp-tests/src/test/java/domainapp/webapp/unittests/mavendeps/lockdown/current/.gitignore new file mode 100644 index 0000000..e66bc56 --- /dev/null +++ b/webapp-tests/src/test/java/domainapp/webapp/unittests/mavendeps/lockdown/current/.gitignore @@ -0,0 +1 @@ +*.received.txt \ No newline at end of file diff --git a/webapp-tests/src/test/resources/domainapp/webapp/bdd/specs/SimpleObjectSpec_listAllAndCreate.feature b/webapp-tests/src/test/resources/domainapp/webapp/bdd/specs/SimpleObjectSpec_listAllAndCreate.feature new file mode 100644 index 0000000..ca807b4 --- /dev/null +++ b/webapp-tests/src/test/resources/domainapp/webapp/bdd/specs/SimpleObjectSpec_listAllAndCreate.feature @@ -0,0 +1,14 @@ +Feature: List and Create New Simple Objects + + @DomainAppDemo + Scenario: Existing simple objects can be listed and new ones created + Given there are initially 10 simple objects + When I create a new simple object + Then there are 11 simple objects + + Scenario: When there are no objects at all + Given there are initially 0 simple objects + When I create a new simple object + And I create another new simple object + Then there are 2 simple objects + diff --git a/webapp-tests/src/test/resources/domainapp/webapp/bdd/specs/SimpleObjectSpec_updateName.feature b/webapp-tests/src/test/resources/domainapp/webapp/bdd/specs/SimpleObjectSpec_updateName.feature new file mode 100644 index 0000000..1b021e2 --- /dev/null +++ b/webapp-tests/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 + + diff --git a/webapp-tests/src/test/resources/junit-platform.properties b/webapp-tests/src/test/resources/junit-platform.properties new file mode 100644 index 0000000..17785d9 --- /dev/null +++ b/webapp-tests/src/test/resources/junit-platform.properties @@ -0,0 +1,19 @@ +# as per https://github.com/cucumber/cucumber-jvm/tree/master/junit-platform-engine#configuration-options +cucumber.publish.quiet=true +cucumber.filter.tags=not @backlog and not @ignore + +#cucumber.glue=domainapp.webapp.bdd.stepdefs +#we are using built-in reporting plugins +cucumber.plugin=pretty, html:target/cucumber-reports/cucumber-report.html + +cucumber.junit-platform.naming-strategy=long + +# WARNING: +# +# cucumber.plugin=..., json:target/cucumber-reports/cucumber-report.json, ... +# +# will cause an empty file to be created when running from mvn. +# +# this is why the maven configuration to execute cucumber using the CLI (antrun:run@cucumber-cli) +# is configured to use --plugins json:target/cucumber-no-clobber.json +#
