diff --git a/libraries/src/main/java/com/baeldung/serenity/spring/AdderController.java b/libraries/src/main/java/com/baeldung/serenity/spring/AdderController.java new file mode 100644 index 0000000000..b89e72d117 --- /dev/null +++ b/libraries/src/main/java/com/baeldung/serenity/spring/AdderController.java @@ -0,0 +1,29 @@ +package com.baeldung.serenity.spring; + +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.*; + +/** + * @author aiet + */ +@RequestMapping(value = "/adder", produces = MediaType.APPLICATION_JSON_UTF8_VALUE) +@RestController +public class AdderController { + + private AdderService adderService; + + public AdderController(AdderService adderService) { + this.adderService = adderService; + } + + @GetMapping("/current") + public int currentNum() { + return adderService.currentBase(); + } + + @PostMapping + public int add(@RequestParam int num) { + return adderService.add(num); + } + +} diff --git a/libraries/src/main/java/com/baeldung/serenity/spring/AdderService.java b/libraries/src/main/java/com/baeldung/serenity/spring/AdderService.java new file mode 100644 index 0000000000..756c05bc2c --- /dev/null +++ b/libraries/src/main/java/com/baeldung/serenity/spring/AdderService.java @@ -0,0 +1,25 @@ +package com.baeldung.serenity.spring; + +import org.springframework.stereotype.Service; + +@Service +public class AdderService { + + private int num; + + public void baseNum(int base) { + this.num = base; + } + + public int currentBase() { + return num; + } + + public int add(int adder) { + return this.num + adder; + } + + public int accumulate(int adder) { + return this.num += adder; + } +} diff --git a/libraries/src/main/java/com/baeldung/serenity/spring/KonamiCodeController.java b/libraries/src/main/java/com/baeldung/serenity/spring/KonamiCodeController.java deleted file mode 100644 index f8ae66c229..0000000000 --- a/libraries/src/main/java/com/baeldung/serenity/spring/KonamiCodeController.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.baeldung.serenity.spring; - -import org.springframework.http.MediaType; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - -/** - * @author aiet - */ -@RequestMapping(value = "/konamicode", produces = MediaType.APPLICATION_JSON_UTF8_VALUE) -@RestController -public class KonamiCodeController { - - private final String classicCode = "↑↑↓↓←→←→BA"; - - @GetMapping("/classic") - public String classicCode() { - return classicCode; - } - - @GetMapping("/cheatable") - public boolean cheatCheck(@RequestParam String cheatcode){ - return classicCode.equals(cheatcode); - } - -} diff --git a/libraries/src/main/java/com/baeldung/serenity/spring/KonamiCodeService.java b/libraries/src/main/java/com/baeldung/serenity/spring/KonamiCodeService.java deleted file mode 100644 index 2aa1804ba5..0000000000 --- a/libraries/src/main/java/com/baeldung/serenity/spring/KonamiCodeService.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.baeldung.serenity.spring; - -import org.springframework.stereotype.Service; - -/** - * refer to Konami Code - */ -@Service -public class KonamiCodeService { - - private String classicCode = "↑↑↓↓←→←→BA"; - - public String getClassicCode() { - return classicCode; - } - - public void alterClassicCode(String newCode) { - classicCode = newCode; - } - - public boolean cheatWith(String cheatcode) { - if ("↑↑↓↓←→←→BA".equals(cheatcode)) { - stageLeft++; - return true; - } - return false; - } - - private int stageLeft = 1; - - public void clearStage() { - stageLeft = 0; - } - - public int stageLeft() { - return stageLeft; - } - -} diff --git a/libraries/src/main/java/com/baeldung/serenity/spring/KonamiCodeServiceInjectionController.java b/libraries/src/main/java/com/baeldung/serenity/spring/KonamiCodeServiceInjectionController.java deleted file mode 100644 index bb80963aa3..0000000000 --- a/libraries/src/main/java/com/baeldung/serenity/spring/KonamiCodeServiceInjectionController.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.baeldung.serenity.spring; - -import org.springframework.http.MediaType; -import org.springframework.web.bind.annotation.*; - -/** - * @author aiet - */ -@RequestMapping(value = "/konamicode", produces = MediaType.APPLICATION_JSON_UTF8_VALUE) -@RestController -public class KonamiCodeServiceInjectionController { - - private KonamiCodeService konamiCodeService; - - public KonamiCodeServiceInjectionController(KonamiCodeService konamiCodeService) { - this.konamiCodeService = konamiCodeService; - } - - @PutMapping("/stages") - public void clearStage(@RequestParam String action) { - if ("clear".equals(action)) { - konamiCodeService.clearStage(); - } - } - - @GetMapping("/classic") - public String classicCode() { - return konamiCodeService.getClassicCode(); - } - - @GetMapping("/cheatable") - public boolean cheatCheck(@RequestParam String cheatcode) { - return konamiCodeService.cheatWith(cheatcode); - } - - @GetMapping("/stages") - public int stageLeft() { - return konamiCodeService.stageLeft(); - } - -} diff --git a/libraries/src/main/java/com/baeldung/serenity/spring/PlainAdderController.java b/libraries/src/main/java/com/baeldung/serenity/spring/PlainAdderController.java new file mode 100644 index 0000000000..888ebaf8bf --- /dev/null +++ b/libraries/src/main/java/com/baeldung/serenity/spring/PlainAdderController.java @@ -0,0 +1,26 @@ +package com.baeldung.serenity.spring; + +import org.apache.commons.lang3.RandomUtils; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.*; + +/** + * @author aiet + */ +@RequestMapping(value = "/adder", produces = MediaType.APPLICATION_JSON_UTF8_VALUE) +@RestController +public class PlainAdderController { + + private final int currentNumber = RandomUtils.nextInt(); + + @GetMapping("/current") + public int currentNum() { + return currentNumber; + } + + @PostMapping + public int add(@RequestParam int num) { + return currentNumber + num; + } + +} diff --git a/libraries/src/test/java/com/baeldung/serenity/spring/AdderClassDirtiesContextIntegrationTest.java b/libraries/src/test/java/com/baeldung/serenity/spring/AdderClassDirtiesContextIntegrationTest.java new file mode 100644 index 0000000000..bb25186cee --- /dev/null +++ b/libraries/src/test/java/com/baeldung/serenity/spring/AdderClassDirtiesContextIntegrationTest.java @@ -0,0 +1,76 @@ +package com.baeldung.serenity.spring; + +import com.baeldung.serenity.spring.steps.AdderServiceSteps; +import net.serenitybdd.junit.runners.SerenityRunner; +import net.serenitybdd.junit.spring.integration.SpringIntegrationClassRule; +import net.thucydides.core.annotations.Steps; +import org.junit.ClassRule; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Suite; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.ContextConfiguration; + +import static com.baeldung.serenity.spring.RandomNumberUtil.randomInt; +import static org.springframework.test.annotation.DirtiesContext.ClassMode.AFTER_CLASS; + +/** + * @author aiet + */ + +@RunWith(Suite.class) +@Suite.SuiteClasses({ + AdderClassDirtiesContextIntegrationTest.DirtiesContextTest.class, AdderClassDirtiesContextIntegrationTest.AnotherDirtiesContextTest.class + }) +public class AdderClassDirtiesContextIntegrationTest { + + @RunWith(SerenityRunner.class) + @ContextConfiguration(classes = AdderService.class) + public static abstract class Base { + + @Steps AdderServiceSteps adderServiceSteps; + + @ClassRule public static SpringIntegrationClassRule springIntegrationClassRule = new SpringIntegrationClassRule(); + + void whenAccumulate_thenSummedUp() { + adderServiceSteps.whenAccumulate(); + adderServiceSteps.summedUp(); + } + + void whenAdd_thenSumWrong() { + adderServiceSteps.whenAdd(); + adderServiceSteps.sumWrong(); + } + + void whenAdd_thenSummedUp() { + adderServiceSteps.whenAdd(); + adderServiceSteps.summedUp(); + } + + } + + @DirtiesContext(classMode = AFTER_CLASS) + public static class AnotherDirtiesContextTest extends Base { + + @Test + public void givenNumber_whenAdd_thenSumWrong() { + super.whenAdd_thenSummedUp(); //expecting zero + adderServiceSteps.givenBaseAndAdder(randomInt(), randomInt()); + super.whenAccumulate_thenSummedUp(); + super.whenAdd_thenSumWrong(); + } + } + + @DirtiesContext(classMode = AFTER_CLASS) + public static class DirtiesContextTest extends Base { + + @Test + public void givenNumber_whenAdd_thenSumWrong() { + super.whenAdd_thenSummedUp(); //expecting zero + adderServiceSteps.givenBaseAndAdder(randomInt(), randomInt()); + super.whenAccumulate_thenSummedUp(); + super.whenAdd_thenSumWrong(); + } + } + +} diff --git a/libraries/src/test/java/com/baeldung/serenity/spring/AdderMethodDirtiesContextDependencyWorkaroundIntegrationTest.java b/libraries/src/test/java/com/baeldung/serenity/spring/AdderMethodDirtiesContextDependencyWorkaroundIntegrationTest.java new file mode 100644 index 0000000000..6524ade190 --- /dev/null +++ b/libraries/src/test/java/com/baeldung/serenity/spring/AdderMethodDirtiesContextDependencyWorkaroundIntegrationTest.java @@ -0,0 +1,54 @@ +package com.baeldung.serenity.spring; + +import com.baeldung.serenity.spring.steps.AdderConstructorDependencySteps; +import net.serenitybdd.junit.runners.SerenityRunner; +import net.serenitybdd.junit.spring.integration.SpringIntegrationMethodRule; +import org.junit.Before; +import org.junit.FixMethodOrder; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.MethodSorters; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.ContextConfiguration; + +import static com.baeldung.serenity.spring.RandomNumberUtil.randomInt; + +/** + * @author aiet + */ +@RunWith(SerenityRunner.class) +@FixMethodOrder(MethodSorters.NAME_ASCENDING) +@ContextConfiguration(classes = AdderService.class) +public class AdderMethodDirtiesContextDependencyWorkaroundIntegrationTest { + + private AdderConstructorDependencySteps adderSteps; + + @Autowired private AdderService adderService; + + @Before + public void init() { + adderSteps = new AdderConstructorDependencySteps(adderService); + } + + @Test + public void _1_givenNumber_whenAdd_thenSumWrong() { + adderSteps.whenAdd(); + adderSteps.summedUp(); + } + + @Rule public SpringIntegrationMethodRule springIntegration = new SpringIntegrationMethodRule(); + + @DirtiesContext + @Test + public void _0_givenNumber_whenAddAndAccumulate_thenSummedUp() { + adderSteps.givenBaseAndAdder(randomInt(), randomInt()); + adderSteps.whenAccumulate(); + adderSteps.summedUp(); + + adderSteps.whenAdd(); + adderSteps.sumWrong(); + } + +} diff --git a/libraries/src/test/java/com/baeldung/serenity/spring/AdderMethodDirtiesContextInitWorkaroundIntegrationTest.java b/libraries/src/test/java/com/baeldung/serenity/spring/AdderMethodDirtiesContextInitWorkaroundIntegrationTest.java new file mode 100644 index 0000000000..87c66f03d9 --- /dev/null +++ b/libraries/src/test/java/com/baeldung/serenity/spring/AdderMethodDirtiesContextInitWorkaroundIntegrationTest.java @@ -0,0 +1,51 @@ +package com.baeldung.serenity.spring; + +import com.baeldung.serenity.spring.steps.AdderServiceSteps; +import net.serenitybdd.junit.runners.SerenityRunner; +import net.serenitybdd.junit.spring.integration.SpringIntegrationMethodRule; +import net.thucydides.core.annotations.Steps; +import org.junit.Before; +import org.junit.FixMethodOrder; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.MethodSorters; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.ContextConfiguration; + +import static com.baeldung.serenity.spring.RandomNumberUtil.randomInt; + +/** + * @author aiet + */ +@RunWith(SerenityRunner.class) +@FixMethodOrder(MethodSorters.NAME_ASCENDING) +@ContextConfiguration(classes = AdderService.class) +public class AdderMethodDirtiesContextInitWorkaroundIntegrationTest { + + @Steps private AdderServiceSteps adderServiceSteps; + + @Before + public void init() { + adderServiceSteps.givenBaseAndAdder(randomInt(), randomInt()); + } + + @Test + public void _1_givenNumber_whenAdd_thenSumWrong() { + adderServiceSteps.whenAdd(); + adderServiceSteps.summedUp(); + } + + @Rule public SpringIntegrationMethodRule springIntegration = new SpringIntegrationMethodRule(); + + @DirtiesContext + @Test + public void _0_givenNumber_whenAddAndAccumulate_thenSummedUp() { + adderServiceSteps.whenAccumulate(); + adderServiceSteps.summedUp(); + + adderServiceSteps.whenAdd(); + adderServiceSteps.sumWrong(); + } + +} diff --git a/libraries/src/test/java/com/baeldung/serenity/spring/AdderMethodDirtiesContextIntegrationTest.java b/libraries/src/test/java/com/baeldung/serenity/spring/AdderMethodDirtiesContextIntegrationTest.java new file mode 100644 index 0000000000..263ffc9854 --- /dev/null +++ b/libraries/src/test/java/com/baeldung/serenity/spring/AdderMethodDirtiesContextIntegrationTest.java @@ -0,0 +1,46 @@ +package com.baeldung.serenity.spring; + +import com.baeldung.serenity.spring.steps.AdderServiceSteps; +import net.serenitybdd.junit.runners.SerenityRunner; +import net.serenitybdd.junit.spring.integration.SpringIntegrationMethodRule; +import net.thucydides.core.annotations.Steps; +import org.junit.FixMethodOrder; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.MethodSorters; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.ContextConfiguration; + +import static com.baeldung.serenity.spring.RandomNumberUtil.randomInt; + +/** + * @author aiet + */ +@RunWith(SerenityRunner.class) +@FixMethodOrder(MethodSorters.NAME_ASCENDING) +@ContextConfiguration(classes = AdderService.class) +public class AdderMethodDirtiesContextIntegrationTest { + + @Steps private AdderServiceSteps adderServiceSteps; + + @Test + public void _1_givenNumber_whenAdd_thenSumWrong() { + adderServiceSteps.whenAdd(); + adderServiceSteps.sumWrong(); + } + + @Rule public SpringIntegrationMethodRule springIntegration = new SpringIntegrationMethodRule(); + + @DirtiesContext + @Test + public void _0_givenNumber_whenAddAndAccumulate_thenSummedUp() { + adderServiceSteps.givenBaseAndAdder(randomInt(), randomInt()); + adderServiceSteps.whenAccumulate(); + adderServiceSteps.summedUp(); + + adderServiceSteps.whenAdd(); + adderServiceSteps.sumWrong(); + } + +} diff --git a/libraries/src/test/java/com/baeldung/serenity/spring/AdderMethodRuleIntegrationTest.java b/libraries/src/test/java/com/baeldung/serenity/spring/AdderMethodRuleIntegrationTest.java new file mode 100644 index 0000000000..bbf07a2b95 --- /dev/null +++ b/libraries/src/test/java/com/baeldung/serenity/spring/AdderMethodRuleIntegrationTest.java @@ -0,0 +1,59 @@ +package com.baeldung.serenity.spring; + +import com.baeldung.serenity.spring.steps.AdderSteps; +import net.serenitybdd.junit.runners.SerenityRunner; +import net.serenitybdd.junit.spring.integration.SpringIntegrationMethodRule; +import net.thucydides.core.annotations.Steps; +import org.junit.*; +import org.junit.runner.RunWith; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.test.context.ContextConfiguration; + +/** + * Unit test for simple App. + */ +@RunWith(SerenityRunner.class) +@ContextConfiguration(locations = "classpath:adder-beans.xml") +public class AdderMethodRuleIntegrationTest { + + private static Logger LOG = LoggerFactory.getLogger(AdderMethodRuleIntegrationTest.class); + + @BeforeClass + public static void initClass() { + LOG.info("static adder before test class: {}", staticAdder); + } + + @AfterClass + public static void destroyClass() { + LOG.info("static adder after test class: {}", staticAdder); + } + + @Before + public void init() { + LOG.info("adder before test: {}", adder); + staticAdder = adder; + } + + @After + public void destroy() { + LOG.info("adder after test: {}", adder); + } + + @Rule public SpringIntegrationMethodRule springMethodIntegration = new SpringIntegrationMethodRule(); + + @Steps private AdderSteps adderSteps; + + @Value("#{props['adder']}") private int adder; + + private static int staticAdder; + + @Test + public void givenNumber_whenAdd_thenSummedUp() { + adderSteps.givenNumber(); + adderSteps.whenAdd(adder); + adderSteps.thenSummedUp(); + } + +} diff --git a/libraries/src/test/java/com/baeldung/serenity/spring/AdderMockMvcIntegrationTest.java b/libraries/src/test/java/com/baeldung/serenity/spring/AdderMockMvcIntegrationTest.java new file mode 100644 index 0000000000..2b2777f0ed --- /dev/null +++ b/libraries/src/test/java/com/baeldung/serenity/spring/AdderMockMvcIntegrationTest.java @@ -0,0 +1,33 @@ +package com.baeldung.serenity.spring; + +import com.baeldung.serenity.spring.steps.AdderRestSteps; +import io.restassured.module.mockmvc.RestAssuredMockMvc; +import net.serenitybdd.junit.runners.SerenityRunner; +import net.thucydides.core.annotations.Steps; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; + +import static com.baeldung.serenity.spring.RandomNumberUtil.randomInt; + +/** + * @author aiet + */ +@RunWith(SerenityRunner.class) +public class AdderMockMvcIntegrationTest { + + @Before + public void init() { + RestAssuredMockMvc.standaloneSetup(new PlainAdderController()); + } + + @Steps AdderRestSteps steps; + + @Test + public void givenNumber_whenAdd_thenSummedUp() throws Exception { + steps.givenCurrentNumber(); + steps.whenAddNumber(randomInt()); + steps.thenSummedUp(); + } + +} diff --git a/libraries/src/test/java/com/baeldung/serenity/spring/AdderServiceIntegrationTest.java b/libraries/src/test/java/com/baeldung/serenity/spring/AdderServiceIntegrationTest.java new file mode 100644 index 0000000000..5f2aae8e3f --- /dev/null +++ b/libraries/src/test/java/com/baeldung/serenity/spring/AdderServiceIntegrationTest.java @@ -0,0 +1,26 @@ +package com.baeldung.serenity.spring; + +import com.baeldung.serenity.spring.steps.AdderServiceSteps; +import net.serenitybdd.junit.runners.SerenityRunner; +import net.thucydides.core.annotations.Steps; +import org.junit.Test; +import org.junit.runner.RunWith; + +import static com.baeldung.serenity.spring.RandomNumberUtil.randomInt; + +/** + * @author aiet + */ +@RunWith(SerenityRunner.class) +public class AdderServiceIntegrationTest { + + @Steps private AdderServiceSteps adderServiceSteps; + + @Test + public void givenNumber_whenAdd_thenSummedUp() { + adderServiceSteps.givenBaseAndAdder(randomInt(), randomInt()); + adderServiceSteps.whenAdd(); + adderServiceSteps.summedUp(); + } + +} diff --git a/libraries/src/test/java/com/baeldung/serenity/spring/AdderSpringSerenityRunnerIntegrationTest.java b/libraries/src/test/java/com/baeldung/serenity/spring/AdderSpringSerenityRunnerIntegrationTest.java new file mode 100644 index 0000000000..cdabc17980 --- /dev/null +++ b/libraries/src/test/java/com/baeldung/serenity/spring/AdderSpringSerenityRunnerIntegrationTest.java @@ -0,0 +1,29 @@ +package com.baeldung.serenity.spring; + +import com.baeldung.serenity.spring.steps.AdderSteps; +import net.serenitybdd.junit.spring.integration.SpringIntegrationSerenityRunner; +import net.thucydides.core.annotations.Steps; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.test.context.ContextConfiguration; + +/** + * Unit test for simple App. + */ +@RunWith(SpringIntegrationSerenityRunner.class) +@ContextConfiguration(locations = "classpath:adder-beans.xml") +public class AdderSpringSerenityRunnerIntegrationTest { + + @Steps private AdderSteps adderSteps; + + @Value("#{props['adder']}") private int adder; + + @Test + public void givenNumber_whenAdd_thenSummedUp() { + adderSteps.givenNumber(); + adderSteps.whenAdd(adder); + adderSteps.thenSummedUp(); + } + +} diff --git a/libraries/src/test/java/com/baeldung/serenity/spring/KonamiCodeTest.java b/libraries/src/test/java/com/baeldung/serenity/spring/AdderTest.java similarity index 55% rename from libraries/src/test/java/com/baeldung/serenity/spring/KonamiCodeTest.java rename to libraries/src/test/java/com/baeldung/serenity/spring/AdderTest.java index d2e5fd30f6..a57b924211 100644 --- a/libraries/src/test/java/com/baeldung/serenity/spring/KonamiCodeTest.java +++ b/libraries/src/test/java/com/baeldung/serenity/spring/AdderTest.java @@ -9,14 +9,14 @@ import org.springframework.test.context.ContextConfiguration; /** * @author aiet */ -@ContextConfiguration(classes = { KonamiCodeServiceInjectionController.class, KonamiCodeService.class }) -public class KonamiCodeTest extends SerenityStory { +@ContextConfiguration(classes = { AdderController.class, AdderService.class }) +public class AdderTest extends SerenityStory { - @Autowired private KonamiCodeService konamiCodeService; + @Autowired private AdderService adderService; @BeforeStory public void init() { - RestAssuredMockMvc.standaloneSetup(new KonamiCodeServiceInjectionController(konamiCodeService)); + RestAssuredMockMvc.standaloneSetup(new AdderController(adderService)); } } diff --git a/libraries/src/test/java/com/baeldung/serenity/spring/KonamCheatClassDirtiesContextIntegrationTest.java b/libraries/src/test/java/com/baeldung/serenity/spring/KonamCheatClassDirtiesContextIntegrationTest.java deleted file mode 100644 index 2e2fcd676f..0000000000 --- a/libraries/src/test/java/com/baeldung/serenity/spring/KonamCheatClassDirtiesContextIntegrationTest.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.baeldung.serenity.spring; - -import com.baeldung.serenity.spring.steps.KonamiCodeServiceInjectionSteps; -import net.serenitybdd.junit.runners.SerenityRunner; -import net.serenitybdd.junit.spring.integration.SpringIntegrationClassRule; -import net.thucydides.core.annotations.Steps; -import net.thucydides.core.annotations.Title; -import org.junit.ClassRule; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.Suite; -import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.context.ContextConfiguration; - -import static org.springframework.test.annotation.DirtiesContext.ClassMode.AFTER_CLASS; - -/** - * @author aiet - */ - -@RunWith(Suite.class) -@Suite.SuiteClasses({ - KonamCheatClassDirtiesContextIntegrationTest.DirtiesContextTest.class, KonamCheatClassDirtiesContextIntegrationTest.AnotherDirtiesContextTest.class - }) -public class KonamCheatClassDirtiesContextIntegrationTest { - - @RunWith(SerenityRunner.class) - @ContextConfiguration(classes = KonamiCodeService.class) - public static abstract class Base { - - @Steps KonamiCodeServiceInjectionSteps cheatSteps; - - @ClassRule public static SpringIntegrationClassRule springIntegrationClassRule = new SpringIntegrationClassRule(); - - void hiddenStageShouldBeUnlockedAfterCheating() { - fetchAndCheat(); - cheatSteps.aStageRemains(); - - cheatSteps.letsHack(); - - fetchAndCheat(); - cheatSteps.noStageRemains(); - } - - private void fetchAndCheat() { - cheatSteps.gameStageCleared(); - cheatSteps.fetchLatestCheatcode(); - cheatSteps.cheatWithLatestcode(); - } - - } - - @DirtiesContext(classMode = AFTER_CLASS) - public static class AnotherDirtiesContextTest extends Base { - - @Test - @Title("altering the cheatcode after unlocking would stop others from cheating, not affected by other tests (another)") - public void givenGameStageCleared_whenCheat_thenHiddenStageUnlocked() { - super.hiddenStageShouldBeUnlockedAfterCheating(); - } - } - - @DirtiesContext(classMode = AFTER_CLASS) - public static class DirtiesContextTest extends Base { - - @Test - @Title("altering the cheatcode after unlocking would stop others from cheating, not affected by other tests") - public void givenGameStageCleared_whenCheat_thenHiddenStageUnlocked() { - super.hiddenStageShouldBeUnlockedAfterCheating(); - } - } - - -} diff --git a/libraries/src/test/java/com/baeldung/serenity/spring/KonamCheatWithDirtyActionIntegrationTest.java b/libraries/src/test/java/com/baeldung/serenity/spring/KonamCheatWithDirtyActionIntegrationTest.java deleted file mode 100644 index bbda1566af..0000000000 --- a/libraries/src/test/java/com/baeldung/serenity/spring/KonamCheatWithDirtyActionIntegrationTest.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.baeldung.serenity.spring; - -import com.baeldung.serenity.spring.steps.KonamiCodeConstructorDependencySteps; -import net.serenitybdd.junit.runners.SerenityRunner; -import net.serenitybdd.junit.spring.integration.SpringIntegrationMethodRule; -import net.thucydides.core.annotations.Title; -import org.junit.Before; -import org.junit.FixMethodOrder; -import org.junit.Rule; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.MethodSorters; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.context.ContextConfiguration; - -/** - * @author aiet - */ -@RunWith(SerenityRunner.class) -@FixMethodOrder(MethodSorters.NAME_ASCENDING) -@ContextConfiguration(classes = KonamiCodeService.class) -public class KonamCheatWithDirtyActionIntegrationTest { - - private KonamiCodeConstructorDependencySteps cheatSteps; - - @Autowired private KonamiCodeService codeService; - - @Before - public void init() { - cheatSteps = new KonamiCodeConstructorDependencySteps(codeService); - } - - @Test - @Title("hidden stage should be unlocked after cheating (run in service with dirty action)") - public void givenGameStageCleared_whenCheat_thenHiddenStageUnlocked() { - fetchCodeAndCheat(); - cheatSteps.aStageRemains(); - } - - @Rule public SpringIntegrationMethodRule springIntegration = new SpringIntegrationMethodRule(); - - @DirtiesContext - @Test - @Title("altering the cheatcode after unlocking would stop others from cheating") - public void givenGameStageCleared_whenCheatAndHack_thenAnotherCheatFail() { - fetchCodeAndCheat(); - cheatSteps.aStageRemains(); - - cheatSteps.letsHack(); - - fetchCodeAndCheat(); - cheatSteps.noStageRemains(); - } - - private void fetchCodeAndCheat() { - cheatSteps.gameStageCleared(); - cheatSteps.fetchLatestCheatcode(); - cheatSteps.cheatWithLatestcode(); - } - -} diff --git a/libraries/src/test/java/com/baeldung/serenity/spring/KonamCheatWithDirtyActionWithImplicitInjectionIntegrationTest.java b/libraries/src/test/java/com/baeldung/serenity/spring/KonamCheatWithDirtyActionWithImplicitInjectionIntegrationTest.java deleted file mode 100644 index d9b8bd2cc7..0000000000 --- a/libraries/src/test/java/com/baeldung/serenity/spring/KonamCheatWithDirtyActionWithImplicitInjectionIntegrationTest.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.baeldung.serenity.spring; - -import com.baeldung.serenity.spring.steps.KonamiCodeServiceInjectionSteps; -import net.serenitybdd.junit.runners.SerenityRunner; -import net.serenitybdd.junit.spring.integration.SpringIntegrationMethodRule; -import net.thucydides.core.annotations.Steps; -import net.thucydides.core.annotations.Title; -import org.junit.FixMethodOrder; -import org.junit.Rule; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.MethodSorters; -import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.context.ContextConfiguration; - -/** - * @author aiet - */ -@RunWith(SerenityRunner.class) -@FixMethodOrder(MethodSorters.NAME_ASCENDING) -@ContextConfiguration(classes = KonamiCodeService.class) -public class KonamCheatWithDirtyActionWithImplicitInjectionIntegrationTest { - - @Steps private KonamiCodeServiceInjectionSteps cheatSteps; - - @Test - @Title("hidden stage is not unlocked after cheating (cheatcode hacked)") - public void givenGameStageCleared_whenCheat_thenCheatFail() { - fetchCodeAndCheat(); - cheatSteps.noStageRemains(); - } - - private void fetchCodeAndCheat() { - cheatSteps.gameStageCleared(); - cheatSteps.fetchLatestCheatcode(); - cheatSteps.cheatWithLatestcode(); - } - - @Rule public SpringIntegrationMethodRule springIntegration = new SpringIntegrationMethodRule(); - - @DirtiesContext - @Test - @Title("altering the cheatcode after unlocking would stop others from cheating") - public void givenGameStageCleared_whenCheatAndHack_thenAnotherCheatFail() { - fetchCodeAndCheat(); - cheatSteps.aStageRemains(); - - cheatSteps.letsHack(); - - fetchCodeAndCheat(); - cheatSteps.noStageRemains(); - } - -} diff --git a/libraries/src/test/java/com/baeldung/serenity/spring/KonamCheatWithServiceIntegrationTest.java b/libraries/src/test/java/com/baeldung/serenity/spring/KonamCheatWithServiceIntegrationTest.java deleted file mode 100644 index ad8a00ec90..0000000000 --- a/libraries/src/test/java/com/baeldung/serenity/spring/KonamCheatWithServiceIntegrationTest.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.baeldung.serenity.spring; - -import com.baeldung.serenity.spring.steps.KonamiCodeServiceInjectionSteps; -import net.serenitybdd.junit.runners.SerenityRunner; -import net.thucydides.core.annotations.Steps; -import net.thucydides.core.annotations.Title; -import org.junit.Test; -import org.junit.runner.RunWith; - -/** - * @author aiet - */ -@RunWith(SerenityRunner.class) -public class KonamCheatWithServiceIntegrationTest { - - @Steps private KonamiCodeServiceInjectionSteps cheatSteps; - - @Test - @Title("hidden stage should be unlocked after cheating (mockmvc)") - public void givenGameStageCleared_whenCheat_thenHiddenStageUnlocked() { - cheatSteps.gameStageCleared(); - cheatSteps.fetchLatestCheatcode(); - cheatSteps.cheatWithLatestcode(); - cheatSteps.aStageRemains(); - } - -} diff --git a/libraries/src/test/java/com/baeldung/serenity/spring/KonamiCheatWithIntegrationMethodRulesIntegrationTest.java b/libraries/src/test/java/com/baeldung/serenity/spring/KonamiCheatWithIntegrationMethodRulesIntegrationTest.java deleted file mode 100644 index 634ac92fd9..0000000000 --- a/libraries/src/test/java/com/baeldung/serenity/spring/KonamiCheatWithIntegrationMethodRulesIntegrationTest.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.baeldung.serenity.spring; - -import com.baeldung.serenity.spring.steps.KonamiCheatSteps; -import net.serenitybdd.junit.runners.SerenityRunner; -import net.serenitybdd.junit.spring.integration.SpringIntegrationMethodRule; -import net.thucydides.core.annotations.Steps; -import net.thucydides.core.annotations.Title; -import org.junit.*; -import org.junit.runner.RunWith; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.test.context.ContextConfiguration; - -/** - * Unit test for simple App. - */ -@RunWith(SerenityRunner.class) -@ContextConfiguration(locations = "classpath:konami-cheat-beans.xml") -public class KonamiCheatWithIntegrationMethodRulesIntegrationTest { - - private static Logger LOG = LoggerFactory.getLogger(KonamiCheatWithIntegrationMethodRulesIntegrationTest.class); - - @BeforeClass - public static void initClass() { - LOG.info("static chaincode before test class: {}", staticCheatCode); - } - - @AfterClass - public static void destroyClass() { - LOG.info("static chaincode after test class: {}", staticCheatCode); - } - - @Before - public void init() { - staticCheatCode = cheatCode; - LOG.info("cheatcode before test: {}", cheatCode); - } - - @After - public void destroy() { - LOG.info("cheatcode after test: {}", cheatCode); - } - - @Rule public SpringIntegrationMethodRule springMethodIntegration = new SpringIntegrationMethodRule(); - - @Steps private KonamiCheatSteps konamiCheatSteps; - - @Value("#{konami_props['code']}") private String cheatCode; - - private static String staticCheatCode; - - @Test - @Title("hidden stage should be unlocked after cheating (rule integration)") - public void givenGameStageCleared_whenCheat_thenHiddenStageUnlocked() { - konamiCheatSteps.gameStageCleared(); - konamiCheatSteps.cheatWith(cheatCode); - konamiCheatSteps.aStageRemains(); - } - -} diff --git a/libraries/src/test/java/com/baeldung/serenity/spring/KonamiCheatWithIntegrationRunnerIntegrationTest.java b/libraries/src/test/java/com/baeldung/serenity/spring/KonamiCheatWithIntegrationRunnerIntegrationTest.java deleted file mode 100644 index 81c1571cc5..0000000000 --- a/libraries/src/test/java/com/baeldung/serenity/spring/KonamiCheatWithIntegrationRunnerIntegrationTest.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.baeldung.serenity.spring; - -import com.baeldung.serenity.spring.steps.KonamiCheatSteps; -import net.serenitybdd.junit.spring.integration.SpringIntegrationSerenityRunner; -import net.thucydides.core.annotations.Steps; -import net.thucydides.core.annotations.Title; -import org.junit.*; -import org.junit.runner.RunWith; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.test.context.ContextConfiguration; - -/** - * Unit test for simple App. - */ -@RunWith(SpringIntegrationSerenityRunner.class) -@ContextConfiguration(locations = "classpath:konami-cheat-beans.xml") -public class KonamiCheatWithIntegrationRunnerIntegrationTest { - - private static Logger LOG = LoggerFactory.getLogger(KonamiCheatWithIntegrationRunnerIntegrationTest.class); - - @BeforeClass - public static void initClass() { - LOG.info("static chaincode before test class: {}", staticCheatCode); - } - - @AfterClass - public static void destroyClass() { - LOG.info("static chaincode after test class: {}", staticCheatCode); - } - - @Before - public void init() { - staticCheatCode = cheatCode; - LOG.info("cheatcode before test: {}", cheatCode); - } - - @After - public void destroy() { - LOG.info("cheatcode after test: {}", cheatCode); - } - - @Steps private KonamiCheatSteps konamiCheatSteps; - - @Value("#{konami_props['code']}") private String cheatCode; - - private static String staticCheatCode; - - @Test - @Title("hidden stage should be unlocked after cheating (with integration runner)") - public void givenGameStageCleared_whenCheat_thenHiddenStageUnlocked() { - konamiCheatSteps.gameStageCleared(); - konamiCheatSteps.cheatWith(cheatCode); - konamiCheatSteps.aStageRemains(); - } - -} diff --git a/libraries/src/test/java/com/baeldung/serenity/spring/KonamiCodeMockMvcIntegrationTest.java b/libraries/src/test/java/com/baeldung/serenity/spring/KonamiCodeMockMvcIntegrationTest.java deleted file mode 100644 index 12514f8d4a..0000000000 --- a/libraries/src/test/java/com/baeldung/serenity/spring/KonamiCodeMockMvcIntegrationTest.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.baeldung.serenity.spring; - -import com.baeldung.serenity.spring.steps.KonamiCodeRestSteps; -import io.restassured.module.mockmvc.RestAssuredMockMvc; -import net.serenitybdd.junit.runners.SerenityRunner; -import net.thucydides.core.annotations.Steps; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; - -/** - * @author aiet - */ -@RunWith(SerenityRunner.class) -public class KonamiCodeMockMvcIntegrationTest { - - @Before - public void init() { - RestAssuredMockMvc.standaloneSetup(new KonamiCodeController()); - } - - @Steps KonamiCodeRestSteps steps; - - @Test - public void givenOfficialClassicCheatcode_whenCheat_ThenTheCodeShouldDoTheTrick() throws Exception { - steps.givenClassicCheatCode(); - steps.whenCheat(); - steps.thenClassicCodeCanDoTheTrick(); - } - -} diff --git a/libraries/src/test/java/com/baeldung/serenity/spring/RandomNumberUtil.java b/libraries/src/test/java/com/baeldung/serenity/spring/RandomNumberUtil.java new file mode 100644 index 0000000000..42a532da42 --- /dev/null +++ b/libraries/src/test/java/com/baeldung/serenity/spring/RandomNumberUtil.java @@ -0,0 +1,13 @@ +package com.baeldung.serenity.spring; + +import org.apache.commons.lang3.RandomUtils; + +/** + * @author aiet + */ +public class RandomNumberUtil { + + public static int randomInt() { + return RandomUtils.nextInt(1, 10); + } +} diff --git a/libraries/src/test/java/com/baeldung/serenity/spring/steps/AdderConstructorDependencySteps.java b/libraries/src/test/java/com/baeldung/serenity/spring/steps/AdderConstructorDependencySteps.java new file mode 100644 index 0000000000..2bf6b0e6d6 --- /dev/null +++ b/libraries/src/test/java/com/baeldung/serenity/spring/steps/AdderConstructorDependencySteps.java @@ -0,0 +1,44 @@ +package com.baeldung.serenity.spring.steps; + +import com.baeldung.serenity.spring.AdderService; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; + +/** + * @author aiet + */ +public class AdderConstructorDependencySteps { + + private AdderService adderService; + + public AdderConstructorDependencySteps(AdderService adderService) { + this.adderService = adderService; + } + + private int givenNumber; + private int base; + private int sum; + + public void givenBaseAndAdder(int base, int adder) { + this.base = base; + adderService.baseNum(base); + this.givenNumber = adder; + } + + public void whenAdd() { + sum = adderService.add(givenNumber); + } + + public void summedUp() { + assertEquals(base + givenNumber, sum); + } + + public void sumWrong() { + assertNotEquals(base + givenNumber, sum); + } + + public void whenAccumulate() { + sum = adderService.accumulate(givenNumber); + } +} diff --git a/libraries/src/test/java/com/baeldung/serenity/spring/steps/AdderRestSteps.java b/libraries/src/test/java/com/baeldung/serenity/spring/steps/AdderRestSteps.java new file mode 100644 index 0000000000..0d77ed0849 --- /dev/null +++ b/libraries/src/test/java/com/baeldung/serenity/spring/steps/AdderRestSteps.java @@ -0,0 +1,46 @@ +package com.baeldung.serenity.spring.steps; + +import io.restassured.module.mockmvc.response.MockMvcResponse; +import net.thucydides.core.annotations.Step; + +import java.io.UnsupportedEncodingException; + +import static io.restassured.module.mockmvc.RestAssuredMockMvc.given; +import static org.hamcrest.core.IsEqual.equalTo; + +/** + * @author aiet + */ +public class AdderRestSteps { + + private MockMvcResponse mockMvcResponse; + private int currentNum; + + @Step("get the current number") + public void givenCurrentNumber() throws UnsupportedEncodingException { + currentNum = Integer.valueOf(given() + .when() + .get("/adder/current") + .mvcResult() + .getResponse() + .getContentAsString()); + } + + @Step("adding {0}") + public void whenAddNumber(int num) { + mockMvcResponse = given() + .queryParam("num", num) + .when() + .post("/adder"); + currentNum += num; + } + + @Step("got the sum") + public void thenSummedUp() { + mockMvcResponse + .then() + .statusCode(200) + .body(equalTo(currentNum + "")); + } + +} diff --git a/libraries/src/test/java/com/baeldung/serenity/spring/steps/AdderServiceSteps.java b/libraries/src/test/java/com/baeldung/serenity/spring/steps/AdderServiceSteps.java new file mode 100644 index 0000000000..b8c2854bf0 --- /dev/null +++ b/libraries/src/test/java/com/baeldung/serenity/spring/steps/AdderServiceSteps.java @@ -0,0 +1,44 @@ +package com.baeldung.serenity.spring.steps; + +import com.baeldung.serenity.spring.AdderService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; + +/** + * @author aiet + */ +@ContextConfiguration(classes = AdderService.class) +public class AdderServiceSteps { + + @Autowired private AdderService adderService; + + private int givenNumber; + private int base; + private int sum; + + public void givenBaseAndAdder(int base, int adder) { + this.base = base; + adderService.baseNum(base); + this.givenNumber = adder; + } + + public void whenAdd() { + sum = adderService.add(givenNumber); + } + + public void summedUp() { + assertEquals(base + givenNumber, sum); + } + + public void sumWrong() { + assertNotEquals(base + givenNumber, sum); + } + + public void whenAccumulate() { + sum = adderService.accumulate(givenNumber); + } + +} diff --git a/libraries/src/test/java/com/baeldung/serenity/spring/steps/AdderSteps.java b/libraries/src/test/java/com/baeldung/serenity/spring/steps/AdderSteps.java new file mode 100644 index 0000000000..6d8d26673b --- /dev/null +++ b/libraries/src/test/java/com/baeldung/serenity/spring/steps/AdderSteps.java @@ -0,0 +1,29 @@ +package com.baeldung.serenity.spring.steps; + +import net.thucydides.core.annotations.Step; + +import static com.baeldung.serenity.spring.RandomNumberUtil.randomInt; + +/** + * @author aiet + */ +public class AdderSteps { + + int currentNumber; + int sum; + + @Step("given current number") + public void givenNumber() { + currentNumber = randomInt(); + } + + @Step("add up {0}") + public void whenAdd(int adder) { + sum = currentNumber + adder; + } + + @Step("summed up") + public void thenSummedUp() { + } + +} diff --git a/libraries/src/test/java/com/baeldung/serenity/spring/steps/KonamiCheatSteps.java b/libraries/src/test/java/com/baeldung/serenity/spring/steps/KonamiCheatSteps.java deleted file mode 100644 index 0bb408bda0..0000000000 --- a/libraries/src/test/java/com/baeldung/serenity/spring/steps/KonamiCheatSteps.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.baeldung.serenity.spring.steps; - -import net.thucydides.core.annotations.Step; - -import static org.junit.Assert.assertEquals; - -/** - * @author aiet - */ -public class KonamiCheatSteps { - - @Step("all stages of the game are cleared") - public void gameStageCleared() { - } - - @Step("input the classic 'Konami Code': {0} ") - public void cheatWith(String cheatcode) { - assertEquals("cheatcode wrong", "↑↑↓↓←→←→BA", cheatcode); - } - - @Step("there is still a stage left") - public void aStageRemains() { - } - -} diff --git a/libraries/src/test/java/com/baeldung/serenity/spring/steps/KonamiCodeConstructorDependencySteps.java b/libraries/src/test/java/com/baeldung/serenity/spring/steps/KonamiCodeConstructorDependencySteps.java deleted file mode 100644 index 2bec25b58f..0000000000 --- a/libraries/src/test/java/com/baeldung/serenity/spring/steps/KonamiCodeConstructorDependencySteps.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.baeldung.serenity.spring.steps; - -import com.baeldung.serenity.spring.KonamiCodeService; -import net.thucydides.core.annotations.Step; -import org.apache.commons.lang3.RandomStringUtils; - -import static org.hamcrest.core.IsEqual.equalTo; -import static org.junit.Assert.*; - -/** - * @author aiet - */ -public class KonamiCodeConstructorDependencySteps { - - private String latestCheatcode; - private boolean cheatSuccess; - - private KonamiCodeService konamiCodeService; - - public KonamiCodeConstructorDependencySteps(KonamiCodeService konamiCodeService) { - this.konamiCodeService = konamiCodeService; - } - - @Step("fetch latest cheat code") - public void fetchLatestCheatcode() { - latestCheatcode = konamiCodeService.getClassicCode(); - } - - @Step("cheat with latest code") - public void cheatWithLatestcode() { - cheatSuccess = konamiCodeService.cheatWith(latestCheatcode); - } - - @Step("all stages of the game are cleared") - public void gameStageCleared() { - konamiCodeService.clearStage(); - } - - @Step("there is still a stage left") - public void aStageRemains() { - assertTrue("cheatcode wrong", cheatSuccess); - assertThat(konamiCodeService.stageLeft(), equalTo(1)); - } - - // @Rule public SpringIntegrationMethodRule methodRule = new SpringIntegrationMethodRule(); - - // @DirtiesContext - @Step - public void letsHack() { - konamiCodeService.alterClassicCode(RandomStringUtils.random(4)); - } - - @Step("there is no stage left") - public void noStageRemains() { - assertFalse(cheatSuccess); - assertThat(konamiCodeService.stageLeft(), equalTo(0)); - } -} diff --git a/libraries/src/test/java/com/baeldung/serenity/spring/steps/KonamiCodeRestSteps.java b/libraries/src/test/java/com/baeldung/serenity/spring/steps/KonamiCodeRestSteps.java deleted file mode 100644 index 3f06d42414..0000000000 --- a/libraries/src/test/java/com/baeldung/serenity/spring/steps/KonamiCodeRestSteps.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.baeldung.serenity.spring.steps; - -import io.restassured.module.mockmvc.response.MockMvcResponse; -import net.thucydides.core.annotations.Step; - -import java.io.UnsupportedEncodingException; - -import static io.restassured.module.mockmvc.RestAssuredMockMvc.given; -import static org.hamcrest.core.IsEqual.equalTo; - -/** - * @author aiet - */ -public class KonamiCodeRestSteps { - - MockMvcResponse mockMvcResponse; - String cheatcode; - - @Step("get the classic cheat code") - public void givenClassicCheatCode() throws UnsupportedEncodingException { - cheatcode = given() - .when() - .get("/konamicode/classic") - .mvcResult() - .getResponse() - .getContentAsString(); - } - - @Step("check if the cheat code works") - public void whenCheat() { - mockMvcResponse = given() - .queryParam("cheatcode", cheatcode) - .when() - .get("/konamicode/cheatable"); - } - - @Step("classic cheat code matches") - public void thenClassicCodeCanDoTheTrick() { - mockMvcResponse - .then() - .statusCode(200) - .body(equalTo("true")); - } - - @Step("all stage cleared") - public void stageCleared() { - given() - .queryParam("action", "clear") - .when() - .put("/konamicode/stages"); - given() - .when() - .get("/konamicode/stages") - .then() - .body(equalTo("0")); - } - - @Step("one more stage to play") - public void thenMoreStages() { - given() - .when() - .get("/konamicode/stages") - .then() - .body(equalTo("1")); - } - -} - diff --git a/libraries/src/test/java/com/baeldung/serenity/spring/steps/KonamiCodeServiceInjectionSteps.java b/libraries/src/test/java/com/baeldung/serenity/spring/steps/KonamiCodeServiceInjectionSteps.java deleted file mode 100644 index b57186ba14..0000000000 --- a/libraries/src/test/java/com/baeldung/serenity/spring/steps/KonamiCodeServiceInjectionSteps.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.baeldung.serenity.spring.steps; - -import com.baeldung.serenity.spring.KonamiCodeService; -import net.thucydides.core.annotations.Step; -import org.apache.commons.lang3.RandomStringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.test.context.ContextConfiguration; - -import static org.hamcrest.core.IsEqual.equalTo; -import static org.junit.Assert.*; - -/** - * @author aiet - */ -@ContextConfiguration(classes = KonamiCodeService.class) -public class KonamiCodeServiceInjectionSteps { - - private String latestCheatcode; - private boolean cheatSuccess; - - @Autowired private KonamiCodeService konamiCodeService; - - @Step("fetch latest cheat code") - public void fetchLatestCheatcode() { - latestCheatcode = konamiCodeService.getClassicCode(); - } - - @Step("cheat with latest code") - public void cheatWithLatestcode() { - cheatSuccess = konamiCodeService.cheatWith(latestCheatcode); - } - - @Step("all stages of the game are cleared") - public void gameStageCleared() { - konamiCodeService.clearStage(); - } - - @Step("there is still a stage left") - public void aStageRemains() { - assertTrue("cheatcode wrong", cheatSuccess); - assertThat(konamiCodeService.stageLeft(), equalTo(1)); - } - - @Step("altering default cheat code") - public void letsHack() { - konamiCodeService.alterClassicCode(RandomStringUtils.random(4)); - } - - @Step("there is no stage left") - public void noStageRemains() { - assertFalse(cheatSuccess); - assertThat(konamiCodeService.stageLeft(), equalTo(0)); - } - -} diff --git a/libraries/src/test/java/com/baeldung/serenity/spring/stories/AdderStory.java b/libraries/src/test/java/com/baeldung/serenity/spring/stories/AdderStory.java new file mode 100644 index 0000000000..b9fa8f1ae0 --- /dev/null +++ b/libraries/src/test/java/com/baeldung/serenity/spring/stories/AdderStory.java @@ -0,0 +1,31 @@ +package com.baeldung.serenity.spring.stories; + +import com.baeldung.serenity.spring.steps.AdderRestSteps; +import net.thucydides.core.annotations.Steps; +import org.jbehave.core.annotations.Given; +import org.jbehave.core.annotations.Then; +import org.jbehave.core.annotations.When; + +/** + * @author aiet + */ +public class AdderStory { + + @Steps AdderRestSteps restSteps; + + @Given("a number") + public void givenANumber() throws Exception { + restSteps.givenCurrentNumber(); + } + + @When("I submit another number $num to adder") + public void whenISubmitToAdderWithNumber(int num) { + restSteps.whenAddNumber(num); + } + + @Then("I get a sum of the numbers") + public void thenIGetTheSum() { + restSteps.thenSummedUp(); + } + +} diff --git a/libraries/src/test/java/com/baeldung/serenity/spring/stories/KonamiCodeStory.java b/libraries/src/test/java/com/baeldung/serenity/spring/stories/KonamiCodeStory.java deleted file mode 100644 index 090eb63215..0000000000 --- a/libraries/src/test/java/com/baeldung/serenity/spring/stories/KonamiCodeStory.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.baeldung.serenity.spring.stories; - -import com.baeldung.serenity.spring.steps.KonamiCodeRestSteps; -import net.thucydides.core.annotations.Steps; -import org.jbehave.core.annotations.Given; -import org.jbehave.core.annotations.Then; -import org.jbehave.core.annotations.When; - -/** - * @author aiet - */ -public class KonamiCodeStory { - - @Steps KonamiCodeRestSteps restSteps; - - @Given("game stage cleared") - public void givenStageCleared(){ - restSteps.stageCleared(); - } - - @Given("KONAMI cheat code") - public void givenKONAMICheatCode() throws Exception{ - restSteps.givenClassicCheatCode(); - } - - @When("I input the cheat code") - public void whenIInputTheCheatCode() { - restSteps.whenCheat(); - } - - @Then("a hidden stage will be unlocked") - public void thenAHiddenStageWillBeUnlocked() { - restSteps.thenClassicCodeCanDoTheTrick(); - restSteps.thenMoreStages(); - } - -} diff --git a/libraries/src/test/resources/konami-cheat-beans.xml b/libraries/src/test/resources/adder-beans.xml similarity index 82% rename from libraries/src/test/resources/konami-cheat-beans.xml rename to libraries/src/test/resources/adder-beans.xml index 221d058337..2fbdbd378f 100644 --- a/libraries/src/test/resources/konami-cheat-beans.xml +++ b/libraries/src/test/resources/adder-beans.xml @@ -3,11 +3,11 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"> - - - ↑↑↓↓←→←→BA + + + 4 - + diff --git a/libraries/src/test/resources/stories/spring/adder_test.story b/libraries/src/test/resources/stories/spring/adder_test.story new file mode 100644 index 0000000000..e8de2cf076 --- /dev/null +++ b/libraries/src/test/resources/stories/spring/adder_test.story @@ -0,0 +1,11 @@ +Meta: + +Narrative: +As user +I want to add a number +So that I can have the sum + +Scenario: A user can submit a number to adder and get current sum +Given a number +When I submit another number 5 to adder +Then I get a sum of the numbers \ No newline at end of file diff --git a/libraries/src/test/resources/stories/spring/konami_code_test.story b/libraries/src/test/resources/stories/spring/konami_code_test.story deleted file mode 100644 index bba8ad7ade..0000000000 --- a/libraries/src/test/resources/stories/spring/konami_code_test.story +++ /dev/null @@ -1,12 +0,0 @@ -Meta: - -Narrative: -As a KONAMI player -I want to cheat -So that I can unlock hidden stages of the game - -Scenario: A KONAMI player can use the cheatcode to unlock hidden stages -Given game stage cleared -And KONAMI cheat code -When I input the cheat code -Then a hidden stage will be unlocked \ No newline at end of file