From d53488926f250b6994dcfb3bebe12c783fc4b749 Mon Sep 17 00:00:00 2001 From: Ninitha701 Date: Sat, 17 Apr 2021 12:17:57 -0400 Subject: [PATCH 1/2] Implementing Cucumber Scenario. Exercise 1 --- pom.xml | 12 ++++++ src/main/java/caffeinateme/Barrista_NB.java | 42 ++++++++++++++++++ src/main/java/caffeinateme/Customer_NB.java | 32 ++++++++++++++ src/main/java/caffeinateme/Order_NB.java | 40 +++++++++++++++++ .../caffeinateme/OrderCoffeeSteps_NB.java | 43 +++++++++++++++++++ .../resources/features/Order-a-coffee.feature | 23 ++++++++++ 6 files changed, 192 insertions(+) create mode 100644 src/main/java/caffeinateme/Barrista_NB.java create mode 100644 src/main/java/caffeinateme/Customer_NB.java create mode 100644 src/main/java/caffeinateme/Order_NB.java create mode 100644 src/test/java/caffeinateme/OrderCoffeeSteps_NB.java create mode 100644 src/test/resources/features/Order-a-coffee.feature diff --git a/pom.xml b/pom.xml index b003d38..1362e06 100644 --- a/pom.xml +++ b/pom.xml @@ -95,6 +95,18 @@ 1.3 test + + io.cucumber + cucumber-java + 2.1.0 + test + + + io.cucumber + cucumber-java + 6.9.1 + test + diff --git a/src/main/java/caffeinateme/Barrista_NB.java b/src/main/java/caffeinateme/Barrista_NB.java new file mode 100644 index 0000000..98d475e --- /dev/null +++ b/src/main/java/caffeinateme/Barrista_NB.java @@ -0,0 +1,42 @@ +package caffeinateme; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +public class Barrista_NB { + List receivedOrders= new ArrayList<>() ; + public void addToReceivedOrders(Order_NB order) + { + this.receivedOrders.add(order); + } + + public List getPendingOrders() { + return receivedOrders; + } + + public List getUrgentOrders() { + List results = new ArrayList<>(); + for(int i=0;i Date: Wed, 21 Apr 2021 22:20:07 -0400 Subject: [PATCH 2/2] Complete a order feature --- src/main/java/caffeinateme/Order.java | 12 ++++++++++ .../OrderACoffeeStepDefinitions.java | 22 ++++++++++++++++++ .../UserRegistrationStepDefinitions.java | 2 +- src/test/java/caffeinateme/steps/Barista.java | 14 ++++++++++- .../steps/CoffeeOrdersClient.java | 10 ++++++++ .../java/caffeinateme/steps/Customer.java | 9 ++++++++ .../resources/features/Order-a-coffee.feature | 23 ------------------- 7 files changed, 67 insertions(+), 25 deletions(-) delete mode 100644 src/test/resources/features/Order-a-coffee.feature diff --git a/src/main/java/caffeinateme/Order.java b/src/main/java/caffeinateme/Order.java index b1004f6..5b2ce7f 100644 --- a/src/main/java/caffeinateme/Order.java +++ b/src/main/java/caffeinateme/Order.java @@ -5,12 +5,15 @@ public class Order { private final int quantity; private final String product; private int etaInMinutes; + private String orderStatus; + public Order(long customerId, int quantity, String product) { this.customerId = customerId; this.quantity = quantity; this.product = product; + this.orderStatus = "Pending"; } public OrderReceipt getReceipt() { @@ -29,6 +32,15 @@ public String getProduct() { return product; } + public void completeOrder() + { + this.orderStatus="Complete"; + } + public String getOrderStatus() + { + return orderStatus; + } + @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/src/test/java/caffeinateme/OrderACoffeeStepDefinitions.java b/src/test/java/caffeinateme/OrderACoffeeStepDefinitions.java index f720b70..867bf8f 100644 --- a/src/test/java/caffeinateme/OrderACoffeeStepDefinitions.java +++ b/src/test/java/caffeinateme/OrderACoffeeStepDefinitions.java @@ -37,6 +37,7 @@ public void sheOrdersA(String order) throws Throwable { Serenity.setSessionVariable("orderReceipt").to(orderReceipt); } + @Then("^Barry should receive the order$") public void barryShouldReceiveTheOrder() throws Throwable { assertThat(barry.pendingOrders()).contains(Order.matching(orderReceipt)); @@ -99,4 +100,25 @@ public ReceiptLineItem convertToReceiptLineItem(Map receiptLineI public void theReceiptShouldContainTheLineItems(List expectedLineItems) throws Throwable { assertThat(receipt.getLineItems()).containsExactlyElementsOf(expectedLineItems); } + + @Given("^(.*) is a barista") + public void barry_is_a_barista(String name) { + barry.isCalled(name); + } + + @When("^Barry marks the order as (.*)") + public void barry_marks_the_order_as_complete(String orderStatus) { + barry.completeOrder(orderReceipt); + } + + @Then("the order should no longer appear in the pending orders") + public void the_order_should_no_longer_appear_in_the_pending_orders() { + assertThat(barry.pendingOrders()).doesNotContain(Order.matching(orderReceipt)); + } + + @Then("Sarah should see the order in her order history") + public void sarah_should_see_the_order_in_her_order_history() { + assertThat(customer.getOrderHistoryFor(orderReceipt.getCustomerId())).contains(Order.matching(orderReceipt)); + } + } diff --git a/src/test/java/caffeinateme/UserRegistrationStepDefinitions.java b/src/test/java/caffeinateme/UserRegistrationStepDefinitions.java index d158d12..4846594 100644 --- a/src/test/java/caffeinateme/UserRegistrationStepDefinitions.java +++ b/src/test/java/caffeinateme/UserRegistrationStepDefinitions.java @@ -13,7 +13,7 @@ public class UserRegistrationStepDefinitions { @Steps(shared = true) Customer customer; - @Given("^(.*) has a Caffeinate-Me account") + @Given("^(.*) (?:has|is) a (?:Caffeinate-Me account|registered customer)") public void userHasACaffeinateMeAccount(String userName) { userRegistrations.registerUser(customer); customer.isCalled(userName); diff --git a/src/test/java/caffeinateme/steps/Barista.java b/src/test/java/caffeinateme/steps/Barista.java index d6c6f76..4ce9b3e 100644 --- a/src/test/java/caffeinateme/steps/Barista.java +++ b/src/test/java/caffeinateme/steps/Barista.java @@ -1,10 +1,12 @@ package caffeinateme.steps; import caffeinateme.Order; +import caffeinateme.OrderReceipt; import net.serenitybdd.core.steps.ScenarioActor; import net.thucydides.core.annotations.Steps; import java.util.List; +import java.util.stream.Collectors; public class Barista extends ScenarioActor { @@ -12,6 +14,16 @@ public class Barista extends ScenarioActor { CoffeeOrdersClient coffeeOrders; public List pendingOrders() { - return coffeeOrders.getOrders(); + return coffeeOrders.getOrders().stream() + .filter(order -> order.getOrderStatus() != "Complete") + .collect(Collectors.toList()); + } + + public void completeOrder(OrderReceipt orderReceipt) { + coffeeOrders.getOrders().stream().filter(order -> order.getCustomerId()==orderReceipt.getCustomerId()) + .forEach(order ->order.completeOrder()); + // coffeeOrders.getOrders().stream().filter(order -> order.getCustomerId()==orderReceipt.getCustomerId()) + //.forEach(order -> coffeeOrders.setOrderHistory(order)); + //coffeeOrders.getOrders().removeIf(order -> order.getCustomerId() == orderReceipt.getCustomerId()); } } diff --git a/src/test/java/caffeinateme/steps/CoffeeOrdersClient.java b/src/test/java/caffeinateme/steps/CoffeeOrdersClient.java index b55201e..f29a057 100644 --- a/src/test/java/caffeinateme/steps/CoffeeOrdersClient.java +++ b/src/test/java/caffeinateme/steps/CoffeeOrdersClient.java @@ -11,6 +11,7 @@ import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; +import java.util.stream.Stream; public class CoffeeOrdersClient { @@ -18,6 +19,7 @@ public class CoffeeOrdersClient { ProductCatalog productCatalog; List orders = new ArrayList<>(); + List orderHistory = new ArrayList<>(); @Step("Place order for customer {0} for {1} x {2}") public OrderReceipt placeOrder(long customerId, int quantity, String product) { @@ -65,4 +67,12 @@ private double roundedTo2DecimalPlaces(double value) { private double subtotalFor(Order order) { return productCatalog.priceOf(order.getProduct()) * order.getQuantity(); } + + public List getOrderHistory(long customerId){ + return orders.stream().filter(order -> order.getCustomerId()==customerId) + .filter(order -> order.getOrderStatus()=="Complete") + .collect(Collectors.toList()); + } + + } diff --git a/src/test/java/caffeinateme/steps/Customer.java b/src/test/java/caffeinateme/steps/Customer.java index eb09be1..6e5924e 100644 --- a/src/test/java/caffeinateme/steps/Customer.java +++ b/src/test/java/caffeinateme/steps/Customer.java @@ -1,11 +1,15 @@ package caffeinateme.steps; +import caffeinateme.Order; import caffeinateme.OrderReceipt; import caffeinateme.Receipt; import net.serenitybdd.core.steps.ScenarioActor; import net.thucydides.core.annotations.Step; import net.thucydides.core.annotations.Steps; +import java.util.List; +import java.util.stream.Collectors; + public class Customer extends ScenarioActor { private long customerId; @@ -35,4 +39,9 @@ public void updatesHerETATo(int minutesAway) { public Receipt requestsAReceipt() { return coffeeOrders.getReceiptFor(customerId); } + + public List getOrderHistoryFor(long customerId) + { + return coffeeOrders.getOrderHistory(customerId); + } } diff --git a/src/test/resources/features/Order-a-coffee.feature b/src/test/resources/features/Order-a-coffee.feature deleted file mode 100644 index d110ea1..0000000 --- a/src/test/resources/features/Order-a-coffee.feature +++ /dev/null @@ -1,23 +0,0 @@ -Feature: Order a coffee - - In order to save time when I pick up my morning coffee - As a coffee lover - I want to be able to order my coffee in advance - - Scenario: Buyer orders a coffee when they are close to the coffee shop - Given Cathy is 100 meters from the coffee shop - When Cathy orders a large cappuccino - Then Barry should receive the order - And Barry should know that the coffee is Urgent - - Scenario: Buyer orders a coffee when they are close to the coffee shop - Given Cathy is 50 meters from the coffee shop - When Cathy orders a large cappuccino - Then Barry should receive the order - And Barry should know that the coffee is Urgent - - Scenario: Buyer orders a coffee when they are close to the coffee shop - Given Cathy is 300 meters from the coffee shop - When Cathy orders a large cappuccino - Then Barry should receive the order - And Barry should know that the coffee is Normal