Commit 4abed227 authored by Bhargava Rellu's avatar Bhargava Rellu

Changes according to the review comments,

Added test cases.
parent e3fd38fc
...@@ -31,14 +31,22 @@ public class OrderManagement { ...@@ -31,14 +31,22 @@ public class OrderManagement {
* functionality regarding the selected option in the console. * functionality regarding the selected option in the console.
*/ */
public void menu() { public void menu() {
String option1 = "1. Add product to your stock";
String option2 = "2. Order Product";
String option3 = "3. Get order details";
String option4 = "4. Exit";
String toExit = "To exit please enter 4";
String toAddMore = "To Add more enter 1";
String enterForMenu = "Please enter 5 for menu";
boolean flag = true; boolean flag = true;
logger.info("Welcome to RetailStore Business Management"); logger.info("Welcome to RetailStore Business Management");
RetailStore gap = new RetailStoreService(); RetailStore gap = new RetailStoreService();
String menu = "\n------------------------\nMenu\n------------------------\n" + String menu = "\n------------------------\nMenu\n------------------------\n" +
"1. Add product to your stock\n------------------------\n" + option1 + "\n------------------------\n" +
"2. Order Product\n------------------------\n" + option2 + "\n------------------------\n" +
"3. Get order details\n------------------------\n" + option3 + "\n------------------------\n" +
"4. Exit"; option4;
logger.info(menu); logger.info(menu);
while (flag) { while (flag) {
int menuOption; int menuOption;
......
package com.retail_store.order_management.model; package com.retail_store.order_management.model;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter; import lombok.Getter;
import java.time.LocalDate; import java.time.LocalDate;
...@@ -13,6 +14,7 @@ import java.util.List; ...@@ -13,6 +14,7 @@ import java.util.List;
*/ */
@Getter @Getter
@AllArgsConstructor @AllArgsConstructor
@Builder
public class Order { public class Order {
private String orderId; private String orderId;
private LocalDate orderDate; private LocalDate orderDate;
......
package com.retail_store.order_management.service; package com.retailstore.ordermanagement.service;
import com.retail_store.order_management.constants.Category; import com.retailstore.ordermanagement.constants.Category;
import com.retail_store.order_management.constants.Color; import com.retailstore.ordermanagement.constants.Color;
import com.retail_store.order_management.constants.Gender; import com.retailstore.ordermanagement.constants.Gender;
import com.retail_store.order_management.model.Order; import com.retailstore.ordermanagement.model.Order;
import com.retail_store.order_management.model.Product; import com.retailstore.ordermanagement.model.Product;
import java.sql.Connection; import java.sql.Connection;
import java.util.Map; import java.util.Map;
......
package com.retail_store.order_management.service; package com.retailstore.ordermanagement.service;
import com.retail_store.order_management.model.OrderedProduct; import com.retailstore.ordermanagement.model.OrderedProduct;
import com.retail_store.order_management.model.Product; import com.retailstore.ordermanagement.model.Product;
import java.sql.Connection; import java.sql.Connection;
import java.util.Collection; import java.util.Collection;
......
package com.retail_store.order_management.service; package com.retailstore.ordermanagement.service;
import com.retail_store.order_management.constants.Category; import com.retailstore.ordermanagement.constants.Category;
import com.retail_store.order_management.constants.Color; import com.retailstore.ordermanagement.constants.Color;
import com.retail_store.order_management.constants.Gender; import com.retailstore.ordermanagement.constants.Gender;
import com.retail_store.order_management.constants.Size; import com.retailstore.ordermanagement.constants.Size;
import com.retail_store.order_management.model.Order; import com.retailstore.ordermanagement.model.Order;
import com.retail_store.order_management.model.OrderedProduct; import com.retailstore.ordermanagement.model.OrderedProduct;
import com.retail_store.order_management.model.Product; import com.retailstore.ordermanagement.model.Product;
import com.retailstore.ordermanagement.utils.Database;
import com.retailstore.ordermanagement.utils.Utility;
import java.sql.Date; import java.sql.Date;
import java.sql.*; import java.sql.*;
...@@ -15,9 +17,6 @@ import java.time.LocalTime; ...@@ -15,9 +17,6 @@ import java.time.LocalTime;
import java.util.*; import java.util.*;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
import static com.retail_store.order_management.utils.Database.getConnection;
import static com.retail_store.order_management.utils.Utility.*;
/** /**
* Class RetailStoreService * Class RetailStoreService
* This class implements from previous interfaces RetailStore and ProductFilter so * This class implements from previous interfaces RetailStore and ProductFilter so
...@@ -27,24 +26,24 @@ public class RetailStoreService implements RetailStore, ProductFilter { ...@@ -27,24 +26,24 @@ public class RetailStoreService implements RetailStore, ProductFilter {
public boolean addProducts() { public boolean addProducts() {
boolean productAdded = false; boolean productAdded = false;
String id = productIdGenerator(); String id = Utility.productIdGenerator();
getLogger().info("Enter Product details \n Enter Product Name"); Utility.getLogger().info("Enter Product details \n Enter Product Name");
String name = getScanner().nextLine(); String name = Utility.getScanner().nextLine();
Category category = getCategory(true, "Enter Product Category"); Category category = Utility.getCategory(true, "Enter Product Category");
if (category == null) { if (category == null) {
return false; return false;
} }
Color color = getColor(true, "Select color of the product"); Color color = Utility.getColor(true, "Select color of the product");
if (category == null) { if (category == null) {
return false; return false;
} }
Gender gender = getGender(true, "Product is ideal for"); Gender gender = Utility.getGender(true, "Product is ideal for");
if (category == null) { if (category == null) {
return false; return false;
} }
double price = getDouble(true, "Enter price of the product"); double price = Utility.getDouble(true, "Enter price of the product");
Map<Size, Integer> size = getProductSizes(); Map<Size, Integer> size = Utility.getProductSizes();
Connection connection = getConnection(); Connection connection = Database.getConnection();
try { try {
PreparedStatement preparedStatement = connection.prepareStatement("insert into products values(?,?,?,?,?,?,?,?,?,?,?)"); PreparedStatement preparedStatement = connection.prepareStatement("insert into products values(?,?,?,?,?,?,?,?,?,?,?)");
preparedStatement.setString(1, id); preparedStatement.setString(1, id);
...@@ -60,22 +59,22 @@ public class RetailStoreService implements RetailStore, ProductFilter { ...@@ -60,22 +59,22 @@ public class RetailStoreService implements RetailStore, ProductFilter {
preparedStatement.setInt(11, size.get(Size.XXL)); preparedStatement.setInt(11, size.get(Size.XXL));
productAdded = preparedStatement.executeUpdate() > 0; productAdded = preparedStatement.executeUpdate() > 0;
if (productAdded) { if (productAdded) {
getLogger().info("Your product with name : " + name + " is added successfully"); Utility.getLogger().info("Your product with name : " + name + " is added successfully");
} else { } else {
getLogger().info("Your product is not added successfully"); Utility.getLogger().info("Your product is not added successfully");
productAdded = addProducts(); productAdded = addProducts();
} }
} catch (SQLException e) { } catch (SQLException e) {
getScanner().reset(); Utility.getScanner().reset();
getLogger().warning(e.getMessage()); Utility.getLogger().warning(e.getMessage());
getLogger().warning("Your product is not added successfully"); Utility.getLogger().warning("Your product is not added successfully");
productAdded = addProducts(); productAdded = addProducts();
} }
return productAdded; return productAdded;
} }
public boolean placeOrders() { public boolean placeOrders() {
Connection connection = getConnection(); Connection connection = Database.getConnection();
int confirmOrder; int confirmOrder;
String orderMessage; String orderMessage;
try { try {
...@@ -83,20 +82,20 @@ public class RetailStoreService implements RetailStore, ProductFilter { ...@@ -83,20 +82,20 @@ public class RetailStoreService implements RetailStore, ProductFilter {
List<OrderedProduct> orderedProductList = createOrder(connection); List<OrderedProduct> orderedProductList = createOrder(connection);
if (orderedProductList == null || orderedProductList.isEmpty()) { if (orderedProductList == null || orderedProductList.isEmpty()) {
getLogger().info("Since your order list is empty, unable to place order\n To make an order please enter 1\n Press any number to exit"); Utility.getLogger().info("Since your order list is empty, unable to place order\n To make an order please enter 1\n Press any number to exit");
int option = getInt(); int option = Utility.getInt();
if (option == 1) { if (option == 1) {
return placeOrders(); return placeOrders();
} else { } else {
getScanner().reset(); Utility.getScanner().reset();
return false; return false;
} }
} }
String orderId = orderIdGenerator(); String orderId = Utility.orderIdGenerator();
getLogger().info("Please enter Customer name"); Utility.getLogger().info("Please enter Customer name");
String name = getScanner().nextLine(); String name = Utility.getScanner().nextLine();
getLogger().info("Please enter Phone number"); Utility.getLogger().info("Please enter Phone number");
String phone = phoneNumberValidator(); String phone = Utility.phoneNumberValidator();
Date date = Date.valueOf(LocalDate.now()); Date date = Date.valueOf(LocalDate.now());
Time time = Time.valueOf(LocalTime.now()); Time time = Time.valueOf(LocalTime.now());
double bill = orderedProductList.stream().map(product -> product.getPrice() * product.getQuantity()).reduce(0.00, (totalBill, productBill) -> totalBill + productBill); double bill = orderedProductList.stream().map(product -> product.getPrice() * product.getQuantity()).reduce(0.00, (totalBill, productBill) -> totalBill + productBill);
...@@ -124,25 +123,25 @@ public class RetailStoreService implements RetailStore, ProductFilter { ...@@ -124,25 +123,25 @@ public class RetailStoreService implements RetailStore, ProductFilter {
} }
preparedStatement.executeBatch(); preparedStatement.executeBatch();
} }
getLogger().info("to confirm the order enter 1\n to cancel enter any number"); Utility.getLogger().info("to confirm the order enter 1\n to cancel enter any number");
confirmOrder = getScanner().nextInt(); confirmOrder = Utility.getScanner().nextInt();
switch (confirmOrder) { switch (confirmOrder) {
case 1: case 1:
getLogger().info("Your order is successfully placed."); Utility.getLogger().info("Your order is successfully placed.");
getLogger().info(orderMessage); Utility.getLogger().info(orderMessage);
connection.commit(); connection.commit();
break; break;
default: default:
getLogger().info("Your order is not confirmed"); Utility.getLogger().info("Your order is not confirmed");
connection.rollback(); connection.rollback();
} }
return true; return true;
} catch (Exception e) { } catch (Exception e) {
getLogger().warning(e.getMessage()); Utility.getLogger().warning(e.getMessage());
try { try {
connection.rollback(); connection.rollback();
} catch (Exception ex) { } catch (Exception ex) {
getLogger().warning(ex.getMessage()); Utility.getLogger().warning(ex.getMessage());
} }
return true; return true;
} }
...@@ -153,8 +152,8 @@ public class RetailStoreService implements RetailStore, ProductFilter { ...@@ -153,8 +152,8 @@ public class RetailStoreService implements RetailStore, ProductFilter {
List<OrderedProduct> cart = new ArrayList<>(); List<OrderedProduct> cart = new ArrayList<>();
boolean orderBoolean = true; boolean orderBoolean = true;
while (orderBoolean) { while (orderBoolean) {
getLogger().info("********************GAP********************* " + "\n \t (1) Men \t \t \t \t (2) Women\n-----------------------------\nto exit enter 0\n-----------------------------\n"); Utility.getLogger().info("********************GAP********************* " + "\n \t (1) Men \t \t \t \t (2) Women\n-----------------------------\nto exit enter 0\n-----------------------------\n");
Gender gender = getGender(false, "Please select..."); Gender gender = Utility.getGender(false, "Please select...");
if (gender == Gender.EXIT) { if (gender == Gender.EXIT) {
cart = null; cart = null;
break; break;
...@@ -162,8 +161,8 @@ public class RetailStoreService implements RetailStore, ProductFilter { ...@@ -162,8 +161,8 @@ public class RetailStoreService implements RetailStore, ProductFilter {
boolean genderBoolean = true; boolean genderBoolean = true;
while (genderBoolean) { while (genderBoolean) {
Map<Integer, Category> categoryMenu = getCategoriesByGender(gender); Map<Integer, Category> categoryMenu = getCategoriesByGender(gender);
getLogger().info("\n-----------------------------\nSelect the category\n-----------------------------\nTo change the gender please enter 0"); Utility.getLogger().info("\n-----------------------------\nSelect the category\n-----------------------------\nTo change the gender please enter 0");
int categoryMenuNumber = getInt(); int categoryMenuNumber = Utility.getInt();
Category category = categoryMenu.get(categoryMenuNumber); Category category = categoryMenu.get(categoryMenuNumber);
if (category == null) { if (category == null) {
break; break;
...@@ -171,8 +170,8 @@ public class RetailStoreService implements RetailStore, ProductFilter { ...@@ -171,8 +170,8 @@ public class RetailStoreService implements RetailStore, ProductFilter {
boolean categoryBoolean = true; boolean categoryBoolean = true;
while (categoryBoolean) { while (categoryBoolean) {
Map<Integer, Product> productsByGenderAndCategory = getProductsByGenderAndCategory(gender, category); Map<Integer, Product> productsByGenderAndCategory = getProductsByGenderAndCategory(gender, category);
getLogger().info("\n-----------------------------\nSelect the product\n-----------------------------\nTo change the category please enter 0"); Utility.getLogger().info("\n-----------------------------\nSelect the product\n-----------------------------\nTo change the category please enter 0");
int productMenuNumber = getInt(); int productMenuNumber = Utility.getInt();
Product product = productsByGenderAndCategory.get(productMenuNumber); Product product = productsByGenderAndCategory.get(productMenuNumber);
if (product == null) { if (product == null) {
break; break;
...@@ -180,14 +179,14 @@ public class RetailStoreService implements RetailStore, ProductFilter { ...@@ -180,14 +179,14 @@ public class RetailStoreService implements RetailStore, ProductFilter {
if (!addProductToCart(cart, product, connection)) { if (!addProductToCart(cart, product, connection)) {
continue; continue;
} else { } else {
getLogger().info("\n-----------------------------\nYour product : " + product.getName() + " is added to your cart.\n-----------------------------\n"); Utility.getLogger().info("\n-----------------------------\nYour product : " + product.getName() + " is added to your cart.\n-----------------------------\n");
} }
boolean menuFlag = true; boolean menuFlag = true;
getLogger().info("\n-----------------------------\nPlease enter 1 - to continue the shopping" + Utility.getLogger().info("\n-----------------------------\nPlease enter 1 - to continue the shopping" +
"\n-----------------------------\nEnter 2 to place the order" + "\n-----------------------------\nEnter 2 to place the order" +
"\n-----------------------------\nEnter 3 to go back"); "\n-----------------------------\nEnter 3 to go back");
while (menuFlag) { while (menuFlag) {
int order = getInt(); int order = Utility.getInt();
switch (order) { switch (order) {
case 1: case 1:
categoryBoolean = false; categoryBoolean = false;
...@@ -208,7 +207,7 @@ public class RetailStoreService implements RetailStore, ProductFilter { ...@@ -208,7 +207,7 @@ public class RetailStoreService implements RetailStore, ProductFilter {
orderBoolean = false; orderBoolean = false;
break; break;
default: default:
getLogger().info("\n-----------------------------\nPlease enter valid option\n-----------------------------\n"); Utility.getLogger().info("\n-----------------------------\nPlease enter valid option\n-----------------------------\n");
createOrder(connection); createOrder(connection);
} }
} }
...@@ -221,18 +220,18 @@ public class RetailStoreService implements RetailStore, ProductFilter { ...@@ -221,18 +220,18 @@ public class RetailStoreService implements RetailStore, ProductFilter {
@Override @Override
public synchronized boolean addProductToCart(Collection<OrderedProduct> cart, Product product, Connection connection) { public synchronized boolean addProductToCart(Collection<OrderedProduct> cart, Product product, Connection connection) {
if (product.outOfStock()) { if (product.outOfStock()) {
getLogger().info("\n-----------------------------\nSorry to say this. Currently this product was out of stock.\n-----------------------------\n"); Utility.getLogger().info("\n-----------------------------\nSorry to say this. Currently this product was out of stock.\n-----------------------------\n");
return false; return false;
} }
getLogger().info(product.showSizes()); Utility.getLogger().info(product.showSizes());
Size size = getSize(true, "Please Select Size"); Size size = Utility.getSize(true, "Please Select Size");
if (size == null) { if (size == null) {
return false; return false;
} }
getLogger().info("\n-----------------------------\nPlease enter quantity required\n-----------------------------\n"); Utility.getLogger().info("\n-----------------------------\nPlease enter quantity required\n-----------------------------\n");
int quantity = getInt(); int quantity = Utility.getInt();
if (quantity <= 0) { if (quantity <= 0) {
getLogger().info("\n-----------------------------\nPlease enter atleast 1 quantity.\n-----------------------------\n"); Utility.getLogger().info("\n-----------------------------\nPlease enter atleast 1 quantity.\n-----------------------------\n");
return false; return false;
} }
int availableQuantity = product.getSize().get(size); int availableQuantity = product.getSize().get(size);
...@@ -244,22 +243,22 @@ public class RetailStoreService implements RetailStore, ProductFilter { ...@@ -244,22 +243,22 @@ public class RetailStoreService implements RetailStore, ProductFilter {
preparedStatement.setString(2, product.getId()); preparedStatement.setString(2, product.getId());
preparedStatement.executeUpdate(); preparedStatement.executeUpdate();
} catch (SQLException e) { } catch (SQLException e) {
getLogger().warning("\n-----------------------------\nUnable to add product to cart\n-----------------------------\n"); Utility.getLogger().warning("\n-----------------------------\nUnable to add product to cart\n-----------------------------\n");
getLogger().warning(e.getMessage()); Utility.getLogger().warning(e.getMessage());
return addProductToCart(cart, product, connection); return addProductToCart(cart, product, connection);
} }
return cart.add(new OrderedProduct(product.getId(), product.getName(), product.getCategory(), product.getColor(), product.getPrice(), product.getIdealFor(), size, quantity)); return cart.add(new OrderedProduct(product.getId(), product.getName(), product.getCategory(), product.getColor(), product.getPrice(), product.getIdealFor(), size, quantity));
} else { } else {
getLogger().warning("\n-----------------------------\nplease enter quantity less or equal to the stock available\n-----------------------------\n"); Utility.getLogger().warning("\n-----------------------------\nplease enter quantity less or equal to the stock available\n-----------------------------\n");
return addProductToCart(cart, product, connection); return addProductToCart(cart, product, connection);
} }
} }
@Override @Override
public Map<Integer, Category> getCategoriesByGender(Gender gender) { public LinkedHashMap<Integer, Category> getCategoriesByGender(Gender gender) {
Map<Integer, Category> categoryMap = new LinkedHashMap<>(); LinkedHashMap<Integer, Category> categoryMap = new LinkedHashMap<>();
AtomicInteger number = new AtomicInteger(0); AtomicInteger number = new AtomicInteger(0);
Connection connection = getConnection(); Connection connection = Database.getConnection();
try { try {
PreparedStatement preparedStatement = connection.prepareStatement("select category from gap.products where gender=? group by category"); PreparedStatement preparedStatement = connection.prepareStatement("select category from gap.products where gender=? group by category");
preparedStatement.setString(1, gender.getGender()); preparedStatement.setString(1, gender.getGender());
...@@ -268,15 +267,15 @@ public class RetailStoreService implements RetailStore, ProductFilter { ...@@ -268,15 +267,15 @@ public class RetailStoreService implements RetailStore, ProductFilter {
categoryMap.put(number.incrementAndGet(), Category.valueOf(resultSet.getString(1))); categoryMap.put(number.incrementAndGet(), Category.valueOf(resultSet.getString(1)));
} }
} catch (SQLException e) { } catch (SQLException e) {
getLogger().warning(e.getMessage()); Utility.getLogger().warning(e.getMessage());
getLogger().warning("\n-----------------------------\ngot error while fetching the gender. please try again\n-----------------------------\n"); Utility.getLogger().warning("\n-----------------------------\ngot error while fetching the gender. please try again\n-----------------------------\n");
return getCategoriesByGender(gender); return getCategoriesByGender(gender);
} }
if (categoryMap.isEmpty()) { if (categoryMap.isEmpty()) {
getLogger().info("\n-----------------------------\nCategories not found in " + gender + "\n-----------------------------\n"); Utility.getLogger().info("\n-----------------------------\nCategories not found in " + gender + "\n-----------------------------\n");
} else { } else {
String menu = categoryMap.entrySet().stream().map(entry -> entry.getKey() + ". " + entry.getValue()).reduce("", (categories, category) -> categories + "\n" + category); String menu = categoryMap.entrySet().stream().map(entry -> entry.getKey() + ". " + entry.getValue()).reduce("", (categories, category) -> categories + "\n" + category);
getLogger().info(menu); Utility.getLogger().info(menu);
} }
return categoryMap; return categoryMap;
} }
...@@ -285,7 +284,7 @@ public class RetailStoreService implements RetailStore, ProductFilter { ...@@ -285,7 +284,7 @@ public class RetailStoreService implements RetailStore, ProductFilter {
public Map<Integer, Product> getProductsByGenderAndCategory(Gender gender, Category category) { public Map<Integer, Product> getProductsByGenderAndCategory(Gender gender, Category category) {
Map<Integer, Product> productMap = new LinkedHashMap<>(); Map<Integer, Product> productMap = new LinkedHashMap<>();
AtomicInteger number = new AtomicInteger(0); AtomicInteger number = new AtomicInteger(0);
Connection connection = getConnection(); Connection connection = Database.getConnection();
try { try {
PreparedStatement preparedStatement = connection.prepareStatement("select * from gap.products where gender=? and category =?"); PreparedStatement preparedStatement = connection.prepareStatement("select * from gap.products where gender=? and category =?");
preparedStatement.setString(1, gender.getGender()); preparedStatement.setString(1, gender.getGender());
...@@ -293,19 +292,19 @@ public class RetailStoreService implements RetailStore, ProductFilter { ...@@ -293,19 +292,19 @@ public class RetailStoreService implements RetailStore, ProductFilter {
ResultSet resultSet = preparedStatement.executeQuery(); ResultSet resultSet = preparedStatement.executeQuery();
ResultSetMetaData resultSetMetaData = resultSet.getMetaData(); ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
while (resultSet.next()) { while (resultSet.next()) {
Product product = new Product(resultSet.getString(1), resultSet.getString(2), Category.valueOf(resultSet.getString(3)), Color.valueOf(resultSet.getString(4)), resultSet.getDouble(5), Gender.valueOf(resultSet.getString(6).toUpperCase()), getProductSizes(resultSet.getInt(7), resultSet.getInt(8), resultSet.getInt(9), resultSet.getInt(10), resultSet.getInt(11))); Product product = new Product(resultSet.getString(1), resultSet.getString(2), Category.valueOf(resultSet.getString(3)), Color.valueOf(resultSet.getString(4)), resultSet.getDouble(5), Gender.valueOf(resultSet.getString(6).toUpperCase()), Utility.getProductSizes(resultSet.getInt(7), resultSet.getInt(8), resultSet.getInt(9), resultSet.getInt(10), resultSet.getInt(11)));
productMap.put(number.incrementAndGet(), product); productMap.put(number.incrementAndGet(), product);
} }
} catch (SQLException e) { } catch (SQLException e) {
getLogger().warning(e.getMessage()); Utility.getLogger().warning(e.getMessage());
getLogger().warning("\n-----------------------------\ngot error while fetching the gender. please try again\n-----------------------------\n"); Utility.getLogger().warning("\n-----------------------------\ngot error while fetching the gender. please try again\n-----------------------------\n");
return getProductsByGenderAndCategory(gender, category); return getProductsByGenderAndCategory(gender, category);
} }
if (productMap.isEmpty()) { if (productMap.isEmpty()) {
getLogger().info("\n-----------------------------\nProducts not found in " + category + "\n-----------------------------\n"); Utility.getLogger().info("\n-----------------------------\nProducts not found in " + category + "\n-----------------------------\n");
} else { } else {
String menu = productMap.entrySet().stream().map(entry -> entry.getKey() + ". " + entry.getValue().productShowcaseInMenu()).reduce("", (products, product) -> products + "\n" + product); String menu = productMap.entrySet().stream().map(entry -> entry.getKey() + ". " + entry.getValue().productShowcaseInMenu()).reduce("", (products, product) -> products + "\n" + product);
getLogger().info(menu); Utility.getLogger().info(menu);
} }
return productMap; return productMap;
} }
...@@ -314,7 +313,7 @@ public class RetailStoreService implements RetailStore, ProductFilter { ...@@ -314,7 +313,7 @@ public class RetailStoreService implements RetailStore, ProductFilter {
public Map<Integer, Color> getColorsByGenderAndCategory(Gender gender, Category category) { public Map<Integer, Color> getColorsByGenderAndCategory(Gender gender, Category category) {
Map<Integer, Color> colorMap = new LinkedHashMap<>(); Map<Integer, Color> colorMap = new LinkedHashMap<>();
AtomicInteger number = new AtomicInteger(0); AtomicInteger number = new AtomicInteger(0);
Connection connection = getConnection(); Connection connection = Database.getConnection();
try { try {
PreparedStatement preparedStatement = connection.prepareStatement("select color from gap.products where gender=? and category=? group by color"); PreparedStatement preparedStatement = connection.prepareStatement("select color from gap.products where gender=? and category=? group by color");
preparedStatement.setString(1, gender.getGender()); preparedStatement.setString(1, gender.getGender());
...@@ -324,15 +323,15 @@ public class RetailStoreService implements RetailStore, ProductFilter { ...@@ -324,15 +323,15 @@ public class RetailStoreService implements RetailStore, ProductFilter {
colorMap.put(number.incrementAndGet(), Color.valueOf(resultSet.getString(1))); colorMap.put(number.incrementAndGet(), Color.valueOf(resultSet.getString(1)));
} }
} catch (SQLException e) { } catch (SQLException e) {
getLogger().warning(e.getMessage()); Utility.getLogger().warning(e.getMessage());
getLogger().warning("\n-----------------------------\ngot error while fetching the gender. please try again\n-----------------------------\n"); Utility.getLogger().warning("\n-----------------------------\ngot error while fetching the gender. please try again\n-----------------------------\n");
return getColorsByGenderAndCategory(gender, category); return getColorsByGenderAndCategory(gender, category);
} }
if (colorMap.isEmpty()) { if (colorMap.isEmpty()) {
getLogger().info("\n-----------------------------\nColors not found in " + category + " for " + gender + "\n-----------------------------\n"); Utility.getLogger().info("\n-----------------------------\nColors not found in " + category + " for " + gender + "\n-----------------------------\n");
} else { } else {
String menu = colorMap.entrySet().stream().map(entry -> entry.getKey() + ". " + entry.getValue()).reduce("", (colors, color) -> colors + "\n" + color); String menu = colorMap.entrySet().stream().map(entry -> entry.getKey() + ". " + entry.getValue()).reduce("", (colors, color) -> colors + "\n" + color);
getLogger().info(menu); Utility.getLogger().info(menu);
} }
return colorMap; return colorMap;
} }
...@@ -340,29 +339,29 @@ public class RetailStoreService implements RetailStore, ProductFilter { ...@@ -340,29 +339,29 @@ public class RetailStoreService implements RetailStore, ProductFilter {
@Override @Override
public void showOrders() { public void showOrders() {
boolean orderSelectFlag = true; boolean orderSelectFlag = true;
Connection connection = getConnection(); Connection connection = Database.getConnection();
while (orderSelectFlag) { while (orderSelectFlag) {
Map<Integer, Order> orders = getOrders(connection); Map<Integer, Order> orders = getOrders(connection);
String orderMenu = orders.entrySet().stream().map(entry -> entry.getKey() + ". " + entry.getValue().getOrderId() + "\t" + entry.getValue().getCustomerName()).reduce((allorders, order) -> allorders + "\n" + order).orElse("\n----------\nNo orders currently in your orders list"); String orderMenu = orders.entrySet().stream().map(entry -> entry.getKey() + ". " + entry.getValue().getOrderId() + "\t" + entry.getValue().getCustomerName()).reduce((allorders, order) -> allorders + "\n" + order).orElse("\n----------\nNo orders currently in your orders list");
getLogger().info(orderMenu); Utility.getLogger().info(orderMenu);
getLogger().info("\n-----------------------------\nEnter 0 to go back.\n-----------------------------\n"); Utility.getLogger().info("\n-----------------------------\nEnter 0 to go back.\n-----------------------------\n");
getLogger().info("\n-----------------------------\nSelect order from the above list\n-----------------------------\n"); Utility.getLogger().info("\n-----------------------------\nSelect order from the above list\n-----------------------------\n");
int orderSelected = getInt(); int orderSelected = Utility.getInt();
if (orderSelected == 0) { if (orderSelected == 0) {
orderSelectFlag = false; orderSelectFlag = false;
break; break;
} }
Order order = orders.get(orderSelected); Order order = orders.get(orderSelected);
if (order == null) { if (order == null) {
getLogger().info("\n-----------------------------\nPlease select an order available in the list\n-----------------------------\n"); Utility.getLogger().info("\n-----------------------------\nPlease select an order available in the list\n-----------------------------\n");
showOrders(); showOrders();
} else { } else {
getLogger().info(order.showOrder()); Utility.getLogger().info(order.showOrder());
getLogger().info("\n-----------------------------\nenter 1 to view products \n2 to see orders \nenter any keyword to exit"); Utility.getLogger().info("\n-----------------------------\nenter 1 to view products \n2 to see orders \nenter any keyword to exit");
int chooseProductList = getInt(); int chooseProductList = Utility.getInt();
switch (chooseProductList) { switch (chooseProductList) {
case 1: case 1:
getLogger().info("\n-----------------------------\n" + order.showProducts() + "\n-----------------------------\n"); Utility.getLogger().info("\n-----------------------------\n" + order.showProducts() + "\n-----------------------------\n");
break; break;
case 2: case 2:
continue; continue;
...@@ -391,7 +390,7 @@ public class RetailStoreService implements RetailStore, ProductFilter { ...@@ -391,7 +390,7 @@ public class RetailStoreService implements RetailStore, ProductFilter {
ordersMenu.put(number.incrementAndGet(), new Order(resultSet.getString(1), resultSet.getDate(4).toLocalDate(), resultSet.getTime(5).toLocalTime(), resultSet.getString(2), resultSet.getString(3), resultSet.getDouble(6), orderedProductList)); ordersMenu.put(number.incrementAndGet(), new Order(resultSet.getString(1), resultSet.getDate(4).toLocalDate(), resultSet.getTime(5).toLocalTime(), resultSet.getString(2), resultSet.getString(3), resultSet.getDouble(6), orderedProductList));
} }
} catch (Exception e) { } catch (Exception e) {
getLogger().warning(e.getMessage()); Utility.getLogger().warning(e.getMessage());
} }
return ordersMenu; return ordersMenu;
} }
......
package com.retail_store.order_management.utils; package com.retailstore.ordermanagement.utils;
import java.sql.Connection; import java.sql.Connection;
import java.sql.DriverManager; import java.sql.DriverManager;
......
package com.retail_store.order_management.utils; package com.retailstore.ordermanagement.utils;
import com.retail_store.order_management.application.OrderManagement; import com.retailstore.ordermanagement.application.OrderManagement;
import com.retail_store.order_management.constants.Category; import com.retailstore.ordermanagement.constants.Category;
import com.retail_store.order_management.constants.Color; import com.retailstore.ordermanagement.constants.Color;
import com.retail_store.order_management.constants.Gender; import com.retailstore.ordermanagement.constants.Gender;
import com.retail_store.order_management.constants.Size; import com.retailstore.ordermanagement.constants.Size;
import com.retail_store.order_management.model.Order; import com.retailstore.ordermanagement.model.Order;
import com.retail_store.order_management.service.RetailStore; import com.retailstore.ordermanagement.service.RetailStoreService;
import java.util.*; import java.util.*;
import java.util.logging.Logger; import java.util.logging.Logger;
...@@ -17,7 +17,7 @@ import java.util.logging.Logger; ...@@ -17,7 +17,7 @@ import java.util.logging.Logger;
* Class used to import the values of the option given in the console and print accordingly * Class used to import the values of the option given in the console and print accordingly
* of the required choice chosen * of the required choice chosen
*/ */
public final class Utility { public class Utility {
private static final Scanner SCANNER = null; private static final Scanner SCANNER = null;
private static final Logger LOGGER = null; private static final Logger LOGGER = null;
...@@ -40,7 +40,7 @@ public final class Utility { ...@@ -40,7 +40,7 @@ public final class Utility {
if (check) { if (check) {
getLogger().info("\n------------------------\n" + message + "\n------------------------\n" + categoryOptions + "\n------------------------\n"); getLogger().info("\n------------------------\n" + message + "\n------------------------\n" + categoryOptions + "\n------------------------\n");
} }
int option = getInt(); int option = validateInputNumber();
categoryValue = Arrays.stream(Category.values()).filter(category -> category.getOption() == option).findFirst().orElseGet(() -> { categoryValue = Arrays.stream(Category.values()).filter(category -> category.getOption() == option).findFirst().orElseGet(() -> {
getLogger().info("\n------------------------\n+Please enter valid category\n------------------------\n" + categoryOptions + "\n------------------------\n"); getLogger().info("\n------------------------\n+Please enter valid category\n------------------------\n" + categoryOptions + "\n------------------------\n");
return getCategory(false, message); return getCategory(false, message);
...@@ -61,7 +61,7 @@ public final class Utility { ...@@ -61,7 +61,7 @@ public final class Utility {
if (check) { if (check) {
getLogger().info("\n------------------------\n" + message + "\n------------------------\n" + categoryOptions + "\n------------------------\n"); getLogger().info("\n------------------------\n" + message + "\n------------------------\n" + categoryOptions + "\n------------------------\n");
} }
int option = getInt(); int option = validateInputNumber();
sizeValue = Arrays.stream(Size.values()).filter(size -> size.getOption() == option).findFirst().orElseGet(() -> { sizeValue = Arrays.stream(Size.values()).filter(size -> size.getOption() == option).findFirst().orElseGet(() -> {
getLogger().info("\n------------------------\nPlease enter valid category\n------------------------\n" + categoryOptions + "\n------------------------\n"); getLogger().info("\n------------------------\nPlease enter valid category\n------------------------\n" + categoryOptions + "\n------------------------\n");
return getSize(false, message); return getSize(false, message);
...@@ -82,7 +82,7 @@ public final class Utility { ...@@ -82,7 +82,7 @@ public final class Utility {
if (check) { if (check) {
getLogger().info("\n------------------------\n" + message + "\n------------------------\n" + genderOptions + "\n------------------------\n"); getLogger().info("\n------------------------\n" + message + "\n------------------------\n" + genderOptions + "\n------------------------\n");
} }
int option = getInt(); int option = validateInputNumber();
genderValue = Arrays.stream(Gender.values()).filter(gender -> gender.getOption() == option).findFirst().orElseGet(() -> { genderValue = Arrays.stream(Gender.values()).filter(gender -> gender.getOption() == option).findFirst().orElseGet(() -> {
getLogger().info("\n------------------------\nPlease enter valid gender\n------------------------\n" + genderOptions + "\n------------------------\n"); getLogger().info("\n------------------------\nPlease enter valid gender\n------------------------\n" + genderOptions + "\n------------------------\n");
return getGender(false, message); return getGender(false, message);
...@@ -103,7 +103,7 @@ public final class Utility { ...@@ -103,7 +103,7 @@ public final class Utility {
if (check) { if (check) {
getLogger().info("\n------------------------\n" + message + "\n------------------------\n" + colorOptions + "\n------------------------\n"); getLogger().info("\n------------------------\n" + message + "\n------------------------\n" + colorOptions + "\n------------------------\n");
} }
int option = getInt(); int option = validateInputNumber();
colorValue = Arrays.stream(Color.values()).filter(color -> color.getOption() == option).findFirst().orElseGet(() -> { colorValue = Arrays.stream(Color.values()).filter(color -> color.getOption() == option).findFirst().orElseGet(() -> {
getLogger().info("\n------------------------\n+Please enter valid color\n------------------------\n" + colorOptions + "\n------------------------\n"); getLogger().info("\n------------------------\n+Please enter valid color\n------------------------\n" + colorOptions + "\n------------------------\n");
return getColor(false, message); return getColor(false, message);
...@@ -119,7 +119,7 @@ public final class Utility { ...@@ -119,7 +119,7 @@ public final class Utility {
* @param message * @param message
* @return double * @return double
*/ */
public static double getDouble(boolean flag, String message) { public static double validateInputPrice(boolean flag, String message) {
double number; double number;
Scanner scanner = new Scanner(System.in); Scanner scanner = new Scanner(System.in);
if (flag) { if (flag) {
...@@ -134,7 +134,7 @@ public final class Utility { ...@@ -134,7 +134,7 @@ public final class Utility {
} catch (InputMismatchException e) { } catch (InputMismatchException e) {
getLogger().warning("\n------------------------\nPlease enter valid price\n------------------------\n"); getLogger().warning("\n------------------------\nPlease enter valid price\n------------------------\n");
scanner.reset(); scanner.reset();
return getDouble(false, message); return validateInputPrice(false, message);
} }
} }
...@@ -144,19 +144,19 @@ public final class Utility { ...@@ -144,19 +144,19 @@ public final class Utility {
* *
* @return int * @return int
*/ */
public static int getInt() { public static int validateInputNumber() {
int number; int number;
Scanner scanner = new Scanner(System.in); Scanner scanner = new Scanner(System.in);
try { try {
number = scanner.nextInt(); number = scanner.nextInt();
if (number < 0) { if (number < 0) {
throw new RuntimeException(); throw new RuntimeException("Number cannot be negative");
} }
return number; return number;
} catch (Exception e) { } catch (Exception e) {
getLogger().warning("\n------------------------\nPlease enter valid number\n------------------------\n"); getLogger().warning(e.getMessage() + "\n------------------------\nPlease enter valid number\n------------------------\n");
scanner.reset(); scanner.reset();
return getInt(); return validateInputNumber();
} }
} }
...@@ -178,7 +178,7 @@ public final class Utility { ...@@ -178,7 +178,7 @@ public final class Utility {
getLogger().warning("Please enter valid phone number"); getLogger().warning("Please enter valid phone number");
return phoneNumberValidator(); return phoneNumberValidator();
} }
return phoneNumber.toString(); return phoneNumber;
} }
/** /**
...@@ -206,18 +206,18 @@ public final class Utility { ...@@ -206,18 +206,18 @@ public final class Utility {
* *
* @return integer according to key type size * @return integer according to key type size
*/ */
public static LinkedHashMap<Size, Integer> getProductSizes() { public static Map<Size, Integer> getProductSizes() {
LinkedHashMap<Size, Integer> productSizes = new LinkedHashMap<>(); Map<Size, Integer> productSizes = new LinkedHashMap<>();
getLogger().info("Please enter the available stock for particular sizes \n Number of products with size S"); getLogger().info("Please enter the available stock for particular sizes \n Number of products with size S");
productSizes.put(Size.S, getInt()); productSizes.put(Size.S, validateInputNumber());
getLogger().info("Number of products with size M"); getLogger().info("Number of products with size M");
productSizes.put(Size.M, getInt()); productSizes.put(Size.M, validateInputNumber());
getLogger().info("Number of products with size L"); getLogger().info("Number of products with size L");
productSizes.put(Size.L, getInt()); productSizes.put(Size.L, validateInputNumber());
getLogger().info("Number of products with size XL"); getLogger().info("Number of products with size XL");
productSizes.put(Size.XL, getInt()); productSizes.put(Size.XL, validateInputNumber());
getLogger().info("Number of products with size XXL"); getLogger().info("Number of products with size XXL");
productSizes.put(Size.XXL, getInt()); productSizes.put(Size.XXL, validateInputNumber());
return productSizes; return productSizes;
} }
...@@ -233,7 +233,7 @@ public final class Utility { ...@@ -233,7 +233,7 @@ public final class Utility {
* @return integer according to key type size * @return integer according to key type size
*/ */
public static Map<Size, Integer> getProductSizes(int s, int m, int l, int xl, int xxl) { public static Map<Size, Integer> getProductSizes(int s, int m, int l, int xl, int xxl) {
LinkedHashMap<Size, Integer> productSizes = new LinkedHashMap<>(); Map<Size, Integer> productSizes = new LinkedHashMap<>();
productSizes.put(Size.S, s); productSizes.put(Size.S, s);
productSizes.put(Size.M, m); productSizes.put(Size.M, m);
productSizes.put(Size.L, l); productSizes.put(Size.L, l);
...@@ -249,7 +249,7 @@ public final class Utility { ...@@ -249,7 +249,7 @@ public final class Utility {
* @return string * @return string
*/ */
public static String productIdGenerator() { public static String productIdGenerator() {
return Arrays.stream(UUID.randomUUID().toString().split("-")).skip(1).findFirst().get() + "#" + RetailStore.class.getSimpleName(); return Arrays.stream(UUID.randomUUID().toString().split("-")).skip(1).findFirst().get() + "#" + RetailStoreService.class.getSimpleName();
} }
/** /**
......
package com.retailstore.ordermanagement.service;
import com.retailstore.ordermanagement.constants.Category;
import com.retailstore.ordermanagement.constants.Color;
import com.retailstore.ordermanagement.constants.Gender;
import com.retailstore.ordermanagement.model.Order;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.Mock;
import java.sql.Connection;
import java.util.*;
import java.util.stream.Collectors;
class ProductFilterTest {
@Mock
Connection connection;
RetailStoreService service;
@BeforeEach
void createretailsStoreObject() {
service = new RetailStoreService();
}
@AfterEach
void removeretailsStoreObject() {
service = null;
}
@Test
void getCategoriesByGenderTest() {
Map<Integer, Category> categoryMap = new HashMap<>();
categoryMap.put(1, Category.SWEATSHIRTS);
categoryMap.put(2, Category.T_SHIRTS);
categoryMap.put(3, Category.SHIRTS);
categoryMap.put(4, Category.SHORTS);
categoryMap.put(5, Category.HOODIES);
categoryMap.put(6, Category.PANTS);
categoryMap.put(7, Category.JEANS);
categoryMap.put(8, Category.POLOS);
Assertions.assertEquals(categoryMap, service.getCategoriesByGender(Gender.MEN));
}
@Test
void getProductsByGenderAndCategoryTest() {
List<String> productsList = new ArrayList<>();
productsList.add("14e0#Gap");
productsList.add("86f0#Gap");
productsList.add("9064#Gap");
productsList.add("b715#Gap");
Assertions.assertEquals(productsList, service.getProductsByGenderAndCategory(Gender.MEN, Category.HOODIES).entrySet().stream().map(product -> product.getValue().getId()).collect(Collectors.toList()));
productsList.clear();
Assertions.assertEquals(productsList, service.getProductsByGenderAndCategory(Gender.WOMEN, Category.PANTS).entrySet().stream().map(product -> product.getValue().getId()).collect(Collectors.toList()));
}
@Test
void getColorsByGenderAndCategoryTest() {
Map<Integer, Color> colorMap = new HashMap<>();
colorMap.put(1, Color.BLUE);
colorMap.put(2, Color.GREY);
colorMap.put(3, Color.BLACK);
Assertions.assertEquals(colorMap, service.getColorsByGenderAndCategory(Gender.MEN, Category.JEANS));
colorMap.clear();
Assertions.assertEquals(colorMap, service.getColorsByGenderAndCategory(Gender.MEN, Category.DRESS));
}
@Test
void getOrdersTest() {
List<Order> orderList = new ArrayList<>();
Map<Integer, Order> ordersMap = new HashMap<>();
Assertions.assertEquals(ordersMap, service.getOrders(connection));
}
}
\ No newline at end of file
package com.retailstore.ordermanagement.service;
import com.retailstore.ordermanagement.constants.Category;
import com.retailstore.ordermanagement.constants.Color;
import com.retailstore.ordermanagement.constants.Gender;
import com.retailstore.ordermanagement.constants.Size;
import com.retailstore.ordermanagement.model.Order;
import com.retailstore.ordermanagement.model.OrderedProduct;
import com.retailstore.ordermanagement.utils.Utility;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.Spy;
import java.sql.Connection;
import java.time.LocalDate;
import java.time.LocalTime;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
class RetailStoreTest {
@Mock
Connection connection;
RetailStoreService service;
@Spy
@InjectMocks
Utility utility;
@BeforeEach
void createretailsStoreObject() {
service = new RetailStoreService();
}
@AfterEach
void removeretailsStoreObject() {
service = null;
}
@Test
void addProducts() {
LinkedHashMap<Size, Integer> sizeMap = new LinkedHashMap<>();
sizeMap.put(Size.S, 2);
sizeMap.put(Size.M, 2);
sizeMap.put(Size.L, 2);
sizeMap.put(Size.XL, 2);
sizeMap.put(Size.XXL, 2);
Mockito.when(utility.productIdGenerator()).thenReturn("TestMethod" + LocalDate.now() + LocalTime.now());
Mockito.when(Utility.getScanner().nextLine()).thenReturn("TestProduct");
Mockito.when(Utility.getCategory(true, "Test check")).thenReturn(Category.JEANS);
Mockito.when(Utility.getColor(true, "Test check")).thenReturn(Color.BLACK);
Mockito.when(Utility.getGender(true, "Test check")).thenReturn(Gender.WOMEN);
Mockito.when(Utility.getDouble(true, "Test price")).thenReturn(1350.00);
Mockito.when(Utility.getProductSizes()).thenReturn(sizeMap);
Assertions.assertEquals(true, service.addProducts());
}
@Test
void placeOrders() {
}
@Test
void showOrdersTest() {
Map<Integer, Order> ordersMap = Mockito.mock(LinkedHashMap.class);
List<OrderedProduct> orderedProductList = Mockito.mock(ArrayList.class);
ordersMap.put(1, new Order("10bc46f3#Order", LocalDate.now(), LocalTime.now(), "Customer", "9633214574", 2500.00, new ArrayList<OrderedProduct>()));
Mockito.when(service.getOrders(connection)).thenReturn(ordersMap);
}
@Test
void createOrder() {
ArrayList<OrderedProduct> orderedProducts = new ArrayList<>();
orderedProducts.add(new OrderedProduct("test1", "testname", Category.JEANS, Color.BLACK, 1200.00, Gender.MEN, Size.L, 2));
// Mockito.when(getGender(true, "Test check")).thenReturn(Gender.WOMEN);
}
@Test
void addProductToCart() {
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment