diff --git a/src/test/java/group/rohlik/acceptance/steps/CartSteps.java b/src/test/java/group/rohlik/acceptance/steps/CartSteps.java index 8f08aa3..6bf3aad 100644 --- a/src/test/java/group/rohlik/acceptance/steps/CartSteps.java +++ b/src/test/java/group/rohlik/acceptance/steps/CartSteps.java @@ -3,6 +3,7 @@ import group.rohlik.entity.Cart; import group.rohlik.entity.CartLine; import group.rohlik.entity.CartRepository; +import group.rohlik.entity.Discount; import io.cucumber.gherkin.internal.com.eclipsesource.json.JsonObject; import io.cucumber.java.Before; import io.cucumber.java.en.Given; @@ -16,6 +17,9 @@ import org.springframework.http.HttpMethod; import org.springframework.http.MediaType; +import java.math.BigDecimal; +import java.math.RoundingMode; + @RequiredArgsConstructor public class CartSteps { @@ -54,17 +58,35 @@ public void addProductUnitsToMyCart(int quantity, String sku) { @When("I remove product {string} of my cart") public void removeProductOfMyCart(String sku) { - SetupSteps.notImplemented(); + addProductUnitsToMyCart(0, sku); } @Then("the cart's total cost should be {double} euro(s)") public void cartTotalCost(double amount) { - SetupSteps.notImplemented(); + Cart cart = currentCart(); + double totalProducts = cart + .getLines() + .stream() + .mapToDouble(currentCartLine -> currentCartLine.getQuantity() * currentCartLine.getProduct().getPrice()) + .sum(); + double totalDiscounts = cart.getDiscounts().stream().mapToDouble(Discount::getValue).sum(); + double totalPrice = totalProducts - totalDiscounts; + + Assertions.assertEquals(amount, BigDecimal.valueOf(totalPrice).setScale(2, RoundingMode.CEILING).doubleValue()); + } @Then("there should be {int} unit(s) of product {string} in my cart") public void thereShouldBeProductUnitsInMyCart(int quantity, String sku) { - SetupSteps.notImplemented(); + Cart cart = currentCart(); + CartLine cartLine = cart.getLines() + .stream() + .filter(currentCartLine -> currentCartLine.getProduct().getSku().equals(sku)) + .findFirst() + .orElse(null); + + Assertions.assertNotNull(cartLine, String.format("Product %s not found", sku)); + Assertions.assertEquals(quantity, cartLine.getQuantity()); } @Then("there shouldn't be product {string} in my cart") diff --git a/src/test/java/group/rohlik/acceptance/steps/ProductSteps.java b/src/test/java/group/rohlik/acceptance/steps/ProductSteps.java index 3636ee5..56d22de 100644 --- a/src/test/java/group/rohlik/acceptance/steps/ProductSteps.java +++ b/src/test/java/group/rohlik/acceptance/steps/ProductSteps.java @@ -1,11 +1,14 @@ package group.rohlik.acceptance.steps; +import group.rohlik.entity.Product; import group.rohlik.entity.ProductRepository; import io.cucumber.datatable.DataTable; import io.cucumber.java.en.Given; import lombok.AllArgsConstructor; import org.springframework.transaction.annotation.Transactional; +import java.util.Map; + @AllArgsConstructor public class ProductSteps { @@ -14,6 +17,15 @@ public class ProductSteps { @Given("the following products exist:") @Transactional public void theFollowingProductsExists(DataTable table) { - SetupSteps.notImplemented(); + table + .asMaps(String.class, String.class) + .forEach((Map row) -> { + Product product = new Product( + row.get("sku"), + row.get("name"), + Double.parseDouble(row.get("price")) + ); + productRepository.save(product); + }); } }