From 8890135c3adc36cc3f84d5f6a7a54aa72b9f51b5 Mon Sep 17 00:00:00 2001
From: vksingh <vksingh@nisum.com>
Date: Sun, 10 May 2020 10:02:48 +0530
Subject: [PATCH] added test case for item not available

---
 .../ecom/service/impl/OrderServiceImpl.java   |  6 ++--
 .../OrderControllerComponentTest.java         | 35 +++++++++++++++++++
 2 files changed, 39 insertions(+), 2 deletions(-)

diff --git a/src/main/java/com/ecom/service/impl/OrderServiceImpl.java b/src/main/java/com/ecom/service/impl/OrderServiceImpl.java
index 1088487..a595689 100644
--- a/src/main/java/com/ecom/service/impl/OrderServiceImpl.java
+++ b/src/main/java/com/ecom/service/impl/OrderServiceImpl.java
@@ -96,12 +96,14 @@ public class OrderServiceImpl implements OrderService {
                     itemService.save(item);
                 }
                 else if(e.getQty()==0){
-                    response=EcomUtils.ITEMS_QUANTITY_SHOULD_NOT_BE_ZERO;
+                    response=EcomUtils.ITEMS_QUANTITY_SHOULD_NOT_BE_ZERO+" for item id "+e.getItemId()+" or remove that item from the cart/json";
+                    outOfStock=true;
+                    break;
                 }
                 else{
 
                      response=item.getQty()>0?"item "+item.getName()+" with id="+e.getItemId()+" is the first item we found out of stock for your purchase You can purchase only "+item.getQty()+" "+item.getName()
-                             :"Item " +item.getName()+"with id="+e.getItemId()+" is out of Stock please visit after some time.";
+                             :"Item " +item.getName()+" with id="+e.getItemId()+" is out of Stock please visit after some time.";
                      outOfStock=true;
                      break;
                 }
diff --git a/src/test/java/com/ecom/controller/OrderControllerComponentTest.java b/src/test/java/com/ecom/controller/OrderControllerComponentTest.java
index 39d44ec..1ddb88c 100644
--- a/src/test/java/com/ecom/controller/OrderControllerComponentTest.java
+++ b/src/test/java/com/ecom/controller/OrderControllerComponentTest.java
@@ -9,6 +9,7 @@ import com.ecom.repository.ItemRepository;
 import com.ecom.repository.OrderRepository;
 import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.Arguments;
 import org.junit.jupiter.params.provider.MethodSource;
@@ -19,6 +20,7 @@ import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
 
 import java.util.Arrays;
 import java.util.List;
@@ -29,6 +31,7 @@ import static org.junit.jupiter.api.Assertions.*;
 import static org.mockito.Mockito.when;
 
 @SpringBootTest
+@ExtendWith(SpringExtension.class)
 @ContextConfiguration(classes = TestConfig.class)
 public class OrderControllerComponentTest {
 
@@ -80,6 +83,24 @@ public class OrderControllerComponentTest {
         );
     }
 
+    @DisplayName("This method will test the orderItems method for Out of Stock If Item is Not Available, it will mock db ")
+    @ParameterizedTest
+    @MethodSource("getOrdersOutOfStockAsItemNotFoundSource")
+    public void orderItemsOutOfStockIfItemNotAvailableTest(Orders orders){
+
+        String outOfStockRespone="Item with id "+orders.getOrderedItems().get(0).getItemId()+" not available please visit after some time.";
+        when(orderRepository.save(ArgumentMatchers.any(Orders.class))).thenReturn(orders);
+        when(itemRepository.findById(ArgumentMatchers.anyInt())).thenReturn(Optional.ofNullable(null));
+
+        when(itemRepository.save(ArgumentMatchers.any(Item.class))).thenReturn(null);
+
+        ResponseEntity<String> responseEntity =  orderController.orderItems(orders);
+        assertAll( "orderItemsTest",
+                ()-> assertEquals(responseEntity.getStatusCode(), HttpStatus.NOT_ACCEPTABLE,()->"status should be 200")
+                ,()->assertEquals(responseEntity.getBody(),outOfStockRespone,()->" messages should match")
+        );
+    }
+
 
     @DisplayName("This method will test the getOrderDetailsByCustomerEmailId method   it will mock db ")
     @ParameterizedTest
@@ -139,6 +160,10 @@ public class OrderControllerComponentTest {
 
         return Stream.of(Arguments.of(mockOutOfStockOrders()));
     }
+    private static Stream<Arguments> getOrdersOutOfStockAsItemNotFoundSource(){
+
+        return Stream.of(Arguments.of(mockOutOfStockOrdersAsItemNotFound()));
+    }
 
     private static Stream<Arguments> getOrdersSource(){
         return Stream.of(Arguments.of(mockOrders()));
@@ -164,6 +189,16 @@ public class OrderControllerComponentTest {
         orders.setOrderedItems(Arrays.asList(orderedItems));
         return orders;
     }
+    public static Orders mockOutOfStockOrdersAsItemNotFound() {
+        Orders orders=new Orders();
+        orders.setOrderId(1);
+        orders.setEmailId("someemail");
+        OrderedItems orderedItems=new OrderedItems();
+        orderedItems.setItemId(2);
+        orderedItems.setQty(2);
+        orders.setOrderedItems(Arrays.asList(orderedItems));
+        return orders;
+    }
 
 
 }
-- 
2.18.1