From d9371a8b747b47e297bf9733afd7487c9ac571f2 Mon Sep 17 00:00:00 2001 From: clouless Date: Sat, 13 Oct 2018 15:15:54 +0200 Subject: [PATCH] simple cucumber bdd tests for active objects --- pom.xml | 21 ++++++- ...rsAndPets_Scenario_FindOwnersWithPets.java | 32 ++++++++++ .../features/Feature_OwnersAndPets_Test.java | 60 +++++++++++++++++++ .../ao/service/seed/DatabaseSeedHelper.java | 11 ++++ .../ao/service/features/OwnersAndPets.feature | 7 +++ 5 files changed, 130 insertions(+), 1 deletion(-) create mode 100644 src/test/java/ut/com/comsysto/poc/ao/service/features/Feature_OwnersAndPets_Scenario_FindOwnersWithPets.java create mode 100644 src/test/java/ut/com/comsysto/poc/ao/service/features/Feature_OwnersAndPets_Test.java create mode 100644 src/test/resources/ut/com/comsysto/poc/ao/service/features/OwnersAndPets.feature diff --git a/pom.xml b/pom.xml index dae11ea..61e30db 100644 --- a/pom.xml +++ b/pom.xml @@ -38,7 +38,13 @@ junit junit - 4.10 + 4.12 + test + + + org.slf4j + slf4j-jdk14 + 1.7.25 test @@ -137,6 +143,19 @@ 1.3 test + + + io.cucumber + cucumber-java8 + 4.0.1 + test + + + io.cucumber + cucumber-junit + 4.0.1 + test + diff --git a/src/test/java/ut/com/comsysto/poc/ao/service/features/Feature_OwnersAndPets_Scenario_FindOwnersWithPets.java b/src/test/java/ut/com/comsysto/poc/ao/service/features/Feature_OwnersAndPets_Scenario_FindOwnersWithPets.java new file mode 100644 index 0000000..b3aba04 --- /dev/null +++ b/src/test/java/ut/com/comsysto/poc/ao/service/features/Feature_OwnersAndPets_Scenario_FindOwnersWithPets.java @@ -0,0 +1,32 @@ +package ut.com.comsysto.poc.ao.service.features; + +import com.comsysto.poc.ao.model.OwnerEntity; +import com.comsysto.poc.ao.service.PetAndOwnerDataAccessServiceImpl; +import cucumber.api.java8.En; + +import static org.hamcrest.CoreMatchers.*; +import static org.hamcrest.MatcherAssert.assertThat; + +public class Feature_OwnersAndPets_Scenario_FindOwnersWithPets implements En { + + // Dependency + private PetAndOwnerDataAccessServiceImpl petAndOwnerDataAccessService; + // Subject + private OwnerEntity[] ownerEntities; + + public Feature_OwnersAndPets_Scenario_FindOwnersWithPets() { + Given("PetAndOwnerDataAccessService to query for pets and owners", () -> { + petAndOwnerDataAccessService = Feature_OwnersAndPets_Test.petAndOwnerDataAccessService; + assertThat(this.petAndOwnerDataAccessService, is(notNullValue())); + }); + When("we query the database via method getOwnersWhoHavePets", () -> { + ownerEntities = petAndOwnerDataAccessService.getOwnersWhoHavePets(); + }); + Then("we should only retrieve owners who actually have pets", () -> { + assertThat(ownerEntities, is(notNullValue())); + assertThat(ownerEntities.length, is(1)); + assertThat(ownerEntities[0].getName(), is(equalTo("jim"))); + }); + } + +} diff --git a/src/test/java/ut/com/comsysto/poc/ao/service/features/Feature_OwnersAndPets_Test.java b/src/test/java/ut/com/comsysto/poc/ao/service/features/Feature_OwnersAndPets_Test.java new file mode 100644 index 0000000..d8815d6 --- /dev/null +++ b/src/test/java/ut/com/comsysto/poc/ao/service/features/Feature_OwnersAndPets_Test.java @@ -0,0 +1,60 @@ +package ut.com.comsysto.poc.ao.service.features; + +import com.atlassian.activeobjects.external.ActiveObjects; +import com.atlassian.activeobjects.test.TestActiveObjects; +import com.comsysto.poc.ao.model.OwnerEntity; +import com.comsysto.poc.ao.model.PetEntity; +import com.comsysto.poc.ao.service.PetAndOwnerDataAccessServiceImpl; +import cucumber.api.CucumberOptions; +import cucumber.api.junit.Cucumber; +import net.java.ao.EntityManager; +import net.java.ao.test.converters.NameConverters; +import net.java.ao.test.jdbc.Data; +import net.java.ao.test.jdbc.DatabaseUpdater; +import net.java.ao.test.junit.ActiveObjectsJUnitRunner; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.JUnitCore; +import org.junit.runner.RunWith; +import ut.com.comsysto.poc.ao.service.seed.DatabaseSeedHelper; + +import static org.junit.Assert.assertNotNull; + +@RunWith(ActiveObjectsJUnitRunner.class) +@Data(Feature_OwnersAndPets_Test.CucumberRunnerTestDatabaseUpdater.class) +@NameConverters +public class Feature_OwnersAndPets_Test { + + private EntityManager entityManager; + private ActiveObjects activeObjects; + // Make available to tests + public static PetAndOwnerDataAccessServiceImpl petAndOwnerDataAccessService; + + @Before + public void setUp() throws Exception { + assertNotNull(entityManager); + activeObjects = new TestActiveObjects(entityManager); + petAndOwnerDataAccessService = new PetAndOwnerDataAccessServiceImpl(activeObjects); + } + + public static class CucumberRunnerTestDatabaseUpdater implements DatabaseUpdater { + @Override + public void update(EntityManager entityManager) throws Exception { + entityManager.migrate(PetEntity.class, OwnerEntity.class); + DatabaseSeedHelper.seed(entityManager); + } + } + + // ------ + + @Test + public void subRunner() throws Exception { + assert(JUnitCore.runClasses(SubRunner.class).wasSuccessful()); + } + + @RunWith(Cucumber.class) + @CucumberOptions( + features = "src/test/resources/ut/com/comsysto/poc/ao/service/features", + plugin = {"pretty"}) + public static class SubRunner { } +} \ No newline at end of file diff --git a/src/test/java/ut/com/comsysto/poc/ao/service/seed/DatabaseSeedHelper.java b/src/test/java/ut/com/comsysto/poc/ao/service/seed/DatabaseSeedHelper.java index 9b1e81b..c143579 100644 --- a/src/test/java/ut/com/comsysto/poc/ao/service/seed/DatabaseSeedHelper.java +++ b/src/test/java/ut/com/comsysto/poc/ao/service/seed/DatabaseSeedHelper.java @@ -1,6 +1,7 @@ package ut.com.comsysto.poc.ao.service.seed; import com.comsysto.poc.ao.model.OwnerEntity; +import com.comsysto.poc.ao.model.PetEntity; import net.java.ao.EntityManager; public class DatabaseSeedHelper { @@ -8,5 +9,15 @@ public static void seed(EntityManager entityManager) throws Exception { OwnerEntity owner = entityManager.create(OwnerEntity.class); owner.setName("bob"); owner.save(); + + OwnerEntity owner2 = entityManager.create(OwnerEntity.class); + owner2.setName("jim"); + owner2.save(); + + PetEntity pet = entityManager.create(PetEntity.class); + pet.setName("snorre"); + pet.setType("CAT"); + pet.setOwnerId((long) owner2.getID()); + pet.save(); } } diff --git a/src/test/resources/ut/com/comsysto/poc/ao/service/features/OwnersAndPets.feature b/src/test/resources/ut/com/comsysto/poc/ao/service/features/OwnersAndPets.feature new file mode 100644 index 0000000..448eded --- /dev/null +++ b/src/test/resources/ut/com/comsysto/poc/ao/service/features/OwnersAndPets.feature @@ -0,0 +1,7 @@ +Feature: Owners and Pets are stored in he Database + We can query the database for owners and pets + + Scenario: find owners with pets + Given PetAndOwnerDataAccessService to query for pets and owners + When we query the database via method getOwnersWhoHavePets + Then we should only retrieve owners who actually have pets