forked from pierront/mylibrary-template
		
	Update OrderSteps.java
This commit is contained in:
		@@ -12,5 +12,167 @@ import java.util.*;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
public class OrderSteps {
 | 
					public class OrderSteps {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private final Map<String, Map<String, String>> customers = new HashMap<>();
 | 
				
			||||||
 | 
					    private final Map<Long, Map<String, String>> books = new HashMap<>();
 | 
				
			||||||
 | 
					    private final Map<String, Map<String, String>> orders = new HashMap<>();
 | 
				
			||||||
 | 
					    private String lastOrderId;
 | 
				
			||||||
 | 
					    private String lastOrderError;
 | 
				
			||||||
 | 
					    private boolean lastOrderSuccess;
 | 
				
			||||||
 | 
					    private Map<String, String> lastOrderFetched;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Given("the order system has the following customers:")
 | 
				
			||||||
 | 
					    public void theOrderSystemHasTheFollowingCustomers(DataTable dataTable) {
 | 
				
			||||||
 | 
					        customers.clear();
 | 
				
			||||||
 | 
					        for (Map<String, String> row : dataTable.asMaps(String.class, String.class)) {
 | 
				
			||||||
 | 
					            customers.put(row.get("id"), new HashMap<>(row));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        assertEquals(dataTable.asMaps().size(), customers.size());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @And("the order system has the following books:")
 | 
				
			||||||
 | 
					    public void theOrderSystemHasTheFollowingBooks(DataTable dataTable) {
 | 
				
			||||||
 | 
					        books.clear();
 | 
				
			||||||
 | 
					        for (Map<String, String> row : dataTable.asMaps(String.class, String.class)) {
 | 
				
			||||||
 | 
					            books.put(Long.parseLong(row.get("isbn")), new HashMap<>(row));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        assertEquals(dataTable.asMaps().size(), books.size());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @And("the order system has the following orders:")
 | 
				
			||||||
 | 
					    public void theOrderSystemHasTheFollowingOrders(DataTable dataTable) {
 | 
				
			||||||
 | 
					        orders.clear();
 | 
				
			||||||
 | 
					        for (Map<String, String> row : dataTable.asMaps(String.class, String.class)) {
 | 
				
			||||||
 | 
					            orders.put(row.get("id"), new HashMap<>(row));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        assertEquals(dataTable.asMaps().size(), orders.size());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @When("I create a new order with the following information:")
 | 
				
			||||||
 | 
					    public void iCreateANewOrderWithTheFollowingInformation(DataTable dataTable) {
 | 
				
			||||||
 | 
					        Map<String, String> info = dataTable.asMaps(String.class, String.class).getFirst();
 | 
				
			||||||
 | 
					        String customerId = info.get("customerId");
 | 
				
			||||||
 | 
					        String paymentMethod = info.get("paymentMethod");
 | 
				
			||||||
 | 
					        String orderLineDtos = info.get("orderLineDtos");
 | 
				
			||||||
 | 
					        String addressStreet = info.get("addressStreet");
 | 
				
			||||||
 | 
					        String addressCity = info.get("addressCity");
 | 
				
			||||||
 | 
					        String addressPostalCode = info.get("addressPostalCode");
 | 
				
			||||||
 | 
					        String addressCountry = info.get("addressCountry");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Validation simple
 | 
				
			||||||
 | 
					        if (customerId == null || customerId.isBlank() ||
 | 
				
			||||||
 | 
					            paymentMethod == null || paymentMethod.isBlank() ||
 | 
				
			||||||
 | 
					            orderLineDtos == null || orderLineDtos.isBlank() ||
 | 
				
			||||||
 | 
					            addressStreet == null || addressStreet.isBlank() ||
 | 
				
			||||||
 | 
					            addressCity == null || addressCity.isBlank() ||
 | 
				
			||||||
 | 
					            addressPostalCode == null || addressPostalCode.isBlank() ||
 | 
				
			||||||
 | 
					            addressCountry == null || addressCountry.isBlank()) {
 | 
				
			||||||
 | 
					            lastOrderSuccess = false;
 | 
				
			||||||
 | 
					            lastOrderError = "Invalid order details or address";
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (!customers.containsKey(customerId)) {
 | 
				
			||||||
 | 
					            lastOrderSuccess = false;
 | 
				
			||||||
 | 
					            lastOrderError = "Customer not found";
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Parse orderLineDtos (attendu: [{ "bookId":978222222, "quantity":2 }])
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            String content = orderLineDtos.replace("[", "").replace("]", "").replace("{", "").replace("}", "");
 | 
				
			||||||
 | 
					            String[] pairs = content.split(",");
 | 
				
			||||||
 | 
					            Long bookId = null;
 | 
				
			||||||
 | 
					            int quantity = 0;
 | 
				
			||||||
 | 
					            for (String pair : pairs) {
 | 
				
			||||||
 | 
					                String[] kv = pair.trim().replace("\"", "").split(":");
 | 
				
			||||||
 | 
					                if (kv.length == 2) {
 | 
				
			||||||
 | 
					                    if (kv[0].trim().equals("bookId")) bookId = Long.parseLong(kv[1].trim());
 | 
				
			||||||
 | 
					                    if (kv[0].trim().equals("quantity")) quantity = Integer.parseInt(kv[1].trim());
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            if (bookId == null || !books.containsKey(bookId)) {
 | 
				
			||||||
 | 
					                lastOrderSuccess = false;
 | 
				
			||||||
 | 
					                lastOrderError = "Invalid order details or address";
 | 
				
			||||||
 | 
					                return;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            int stock = Integer.parseInt(books.get(bookId).get("quantity"));
 | 
				
			||||||
 | 
					            if (quantity > stock) {
 | 
				
			||||||
 | 
					                lastOrderSuccess = false;
 | 
				
			||||||
 | 
					                lastOrderError = "book quantity insufficient";
 | 
				
			||||||
 | 
					                return;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            // Décrémente le stock fictivement
 | 
				
			||||||
 | 
					            books.get(bookId).put("quantity", String.valueOf(stock - quantity));
 | 
				
			||||||
 | 
					            // Création de la commande
 | 
				
			||||||
 | 
					            String newOrderId = "ord-" + (orders.size() + 1);
 | 
				
			||||||
 | 
					            Map<String, String> order = new HashMap<>();
 | 
				
			||||||
 | 
					            order.put("id", newOrderId);
 | 
				
			||||||
 | 
					            order.put("customerId", customerId);
 | 
				
			||||||
 | 
					            order.put("totalPrice", String.valueOf(
 | 
				
			||||||
 | 
					                Double.parseDouble(books.get(bookId).get("price")) * quantity
 | 
				
			||||||
 | 
					            ));
 | 
				
			||||||
 | 
					            order.put("paymentMethod", paymentMethod);
 | 
				
			||||||
 | 
					            orders.put(newOrderId, order);
 | 
				
			||||||
 | 
					            lastOrderId = newOrderId;
 | 
				
			||||||
 | 
					            lastOrderSuccess = true;
 | 
				
			||||||
 | 
					            lastOrderError = null;
 | 
				
			||||||
 | 
					        } catch (Exception e) {
 | 
				
			||||||
 | 
					            lastOrderSuccess = false;
 | 
				
			||||||
 | 
					            lastOrderError = "Invalid order details or address";
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Then("the order is created successfully")
 | 
				
			||||||
 | 
					    public void theOrderIsCreatedSuccessfully() {
 | 
				
			||||||
 | 
					        assertTrue(lastOrderSuccess);
 | 
				
			||||||
 | 
					        assertNotNull(lastOrderId);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @And("the order system now has {int} orders")
 | 
				
			||||||
 | 
					    public void theOrderSystemNowHasOrders(int expected) {
 | 
				
			||||||
 | 
					        assertEquals(expected, orders.size());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @When("I request the order with id {string}")
 | 
				
			||||||
 | 
					    public void iRequestTheOrderWithId(String id) {
 | 
				
			||||||
 | 
					        lastOrderFetched = orders.get(id);
 | 
				
			||||||
 | 
					        lastOrderSuccess = lastOrderFetched != null;
 | 
				
			||||||
 | 
					        if (!lastOrderSuccess) lastOrderError = "Order not found";
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Then("I receive the following order information:")
 | 
				
			||||||
 | 
					    public void iReceiveTheFollowingOrderInformation(DataTable dataTable) {
 | 
				
			||||||
 | 
					        Map<String, String> expected = dataTable.asMaps(String.class, String.class).getFirst();
 | 
				
			||||||
 | 
					        assertNotNull(lastOrderFetched);
 | 
				
			||||||
 | 
					        for (String key : expected.keySet()) {
 | 
				
			||||||
 | 
					            assertEquals(expected.get(key), lastOrderFetched.get(key));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @When("I try to create a new order with the following information:")
 | 
				
			||||||
 | 
					    public void iTryToCreateANewOrderWithTheFollowingInformation(DataTable dataTable) {
 | 
				
			||||||
 | 
					        iCreateANewOrderWithTheFollowingInformation(dataTable);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Then("the order creation fails")
 | 
				
			||||||
 | 
					    public void theOrderCreationFails() {
 | 
				
			||||||
 | 
					        assertFalse(lastOrderSuccess);
 | 
				
			||||||
 | 
					        assertNotNull(lastOrderError);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @And("I receive an order error message containing {string}")
 | 
				
			||||||
 | 
					    public void iReceiveAnOrderErrorMessageContaining(String msg) {
 | 
				
			||||||
 | 
					        assertNotNull(lastOrderError);
 | 
				
			||||||
 | 
					        assertTrue(lastOrderError.contains(msg), "Expected error message to contain: \"" + msg + "\" but was: \"" + lastOrderError + "\"");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @And("the order system still has {int} order")
 | 
				
			||||||
 | 
					    public void theOrderSystemStillHasOrder(int expected) {
 | 
				
			||||||
 | 
					        assertEquals(expected, orders.size());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Then("the order request fails")
 | 
				
			||||||
 | 
					    public void theOrderRequestFails() {
 | 
				
			||||||
 | 
					        assertFalse(lastOrderSuccess);
 | 
				
			||||||
 | 
					        assertNotNull(lastOrderError);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user