From 4208c9ffd71795aa24a32868e6f0240844e063ab Mon Sep 17 00:00:00 2001 From: Alexey Buzdin Date: Wed, 3 Feb 2016 12:40:55 +0200 Subject: [PATCH] Fixed #10 Scenarios are now isolated one from another. No params or body will be spilled to next Scenario --- .../lv/ctco/cukesrest/CukesRestPlugin.java | 11 ++-- .../lv/ctco/cukesrest/api/CucumberHooks.java | 24 ++++++++ .../cukesrest/internal/CucumberFacade.java | 55 +++++++++++++++++++ .../cukesrest/internal/ResponseFacade.java | 3 + 4 files changed, 88 insertions(+), 5 deletions(-) create mode 100644 cukes-rest/src/main/java/lv/ctco/cukesrest/api/CucumberHooks.java create mode 100644 cukes-rest/src/main/java/lv/ctco/cukesrest/internal/CucumberFacade.java diff --git a/cukes-rest/src/main/java/lv/ctco/cukesrest/CukesRestPlugin.java b/cukes-rest/src/main/java/lv/ctco/cukesrest/CukesRestPlugin.java index 53fa714b..5a4f7146 100644 --- a/cukes-rest/src/main/java/lv/ctco/cukesrest/CukesRestPlugin.java +++ b/cukes-rest/src/main/java/lv/ctco/cukesrest/CukesRestPlugin.java @@ -2,14 +2,15 @@ public interface CukesRestPlugin { - // TODO - void beforeFeature(); + void beforeAllTests(); + + void afterAllTests(); - // TODO void beforeScenario(); - // TODO - void beforeStep(); + void afterScenario(); void beforeRequest(); + + void afterRequest(); } diff --git a/cukes-rest/src/main/java/lv/ctco/cukesrest/api/CucumberHooks.java b/cukes-rest/src/main/java/lv/ctco/cukesrest/api/CucumberHooks.java new file mode 100644 index 00000000..ad75c366 --- /dev/null +++ b/cukes-rest/src/main/java/lv/ctco/cukesrest/api/CucumberHooks.java @@ -0,0 +1,24 @@ +package lv.ctco.cukesrest.api; + +import com.google.inject.*; +import cucumber.api.java.*; +import lv.ctco.cukesrest.internal.*; + +public class CucumberHooks { + + @Inject + CucumberFacade cucumberFacade; + + @Before + public void beforeScenario() { + if (cucumberFacade.firstScenario()) { + cucumberFacade.beforeAllTests(); + } + cucumberFacade.beforeScenario(); + } + + @After + public void afterScenario() { + cucumberFacade.afterScenario(); + } +} diff --git a/cukes-rest/src/main/java/lv/ctco/cukesrest/internal/CucumberFacade.java b/cukes-rest/src/main/java/lv/ctco/cukesrest/internal/CucumberFacade.java new file mode 100644 index 00000000..117f515b --- /dev/null +++ b/cukes-rest/src/main/java/lv/ctco/cukesrest/internal/CucumberFacade.java @@ -0,0 +1,55 @@ +package lv.ctco.cukesrest.internal; + +import com.google.inject.*; +import lv.ctco.cukesrest.*; + +import java.util.*; + +@Singleton +public class CucumberFacade { + + /* Ugly Hack proposed by Cucumber developers: https://github.com/cucumber/cucumber-jvm/pull/295 */ + public static boolean firstRun = true; + + @Inject + Set pluginSet; + + @Inject + RequestSpecificationFacade requestSpecificationFacade; + + public boolean firstScenario() { + return firstRun; + } + + public void beforeAllTests() { + firstRun = false; + for (CukesRestPlugin cukesRestPlugin : pluginSet) { + cukesRestPlugin.beforeAllTests(); + } + Runtime.getRuntime().addShutdownHook(new Thread() { + @Override + public void run() { + afterAllTests(); + } + }); + } + + public void beforeScenario() { + for (CukesRestPlugin cukesRestPlugin : pluginSet) { + cukesRestPlugin.beforeScenario(); + } + } + + public void afterScenario() { + for (CukesRestPlugin cukesRestPlugin : pluginSet) { + cukesRestPlugin.afterScenario(); + } + requestSpecificationFacade.initNewSpecification(); + } + + public void afterAllTests() { + for (CukesRestPlugin cukesRestPlugin : pluginSet) { + cukesRestPlugin.afterAllTests(); + } + } +} diff --git a/cukes-rest/src/main/java/lv/ctco/cukesrest/internal/ResponseFacade.java b/cukes-rest/src/main/java/lv/ctco/cukesrest/internal/ResponseFacade.java index 9ad40896..f1f134f5 100644 --- a/cukes-rest/src/main/java/lv/ctco/cukesrest/internal/ResponseFacade.java +++ b/cukes-rest/src/main/java/lv/ctco/cukesrest/internal/ResponseFacade.java @@ -62,6 +62,9 @@ public ResponseWrapper call() throws Exception { cukesRestPlugin.beforeRequest(); } response = method.doRequest(specification.value(), url); + for (CukesRestPlugin cukesRestPlugin : pluginSet) { + cukesRestPlugin.afterRequest(); + } return new ResponseWrapper(response); } };