package com.salesmanager.test.order;
import com.salesmanager.core.business.exception.ServiceException;
import com.salesmanager.core.business.repositories.order.OrderRepository;
import com.salesmanager.core.business.repositories.order.SaleRepository;
import com.salesmanager.core.business.services.order.MongoDBService;
import com.salesmanager.core.business.services.order.ScheduledTask;
import com.salesmanager.core.business.utils.DateUtils;
import com.salesmanager.core.model.common.CriteriaOrderBy;
import com.salesmanager.core.model.merchant.MerchantStore;
import com.salesmanager.core.model.order.Order;
import com.salesmanager.core.model.order.OrderCriteria;
import com.salesmanager.core.model.order.OrderList;
import com.salesmanager.core.model.order.ProductDailySale;
import com.salesmanager.core.model.order.orderproduct.OrderProduct;
import com.salesmanager.core.model.order.orderstatus.OrderStatus;
import org.junit.Before;
import org.junit.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import static org.mockito.Mockito.when;
import static org.junit.Assert.assertTrue;
import static org.mockito.Matchers.any;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class SalesTest {
@InjectMocks
ScheduledTask st;
@Mock
OrderRepository orderRepository;
@Mock
SaleRepository saleRepository;
@Mock
MongoDBService mongoDBService;
@Before
public void init() {
MockitoAnnotations.initMocks(this);
}
// @Mock
// private SaleRepository saleRepository;
@Test
public void ScheduledTask() throws ServiceException {
System.out.println("====== SalesTest createOrderAndSales");
// first page
OrderList orderList = new OrderList();
List<Order> orders = new ArrayList<>();
populateOrders(orders);
orderList.setOrders(orders);
// last page
OrderList emptyOrderList = new OrderList();
orders = new ArrayList<>();
emptyOrderList.setOrders(orders);
// when the first call of orderRepository.listOrdersInAllStores,
// we will return orderList
// when the second call of orderRepository.listOrdersInAllStores,
// we will return emptyOrderList
// so the big while in orderRepository.listOrdersInAllStores will break.
when(orderRepository.listOrdersInAllStores(any(OrderCriteria.class))).thenReturn(orderList)
.thenReturn(emptyOrderList);
// saleRepository.save() will save daily sale records to this list.
List<ProductDailySale> salesList = new ArrayList<>();
Answer answer = new Answer() {
@Override
public Object answer(InvocationOnMock invocation) throws Throwable {
ProductDailySale pds = invocation.getArgument(0);
salesList.add(pds);
return null;
}
};
when(saleRepository.save(any(ProductDailySale.class))).thenAnswer(answer);
// call service layer method.
st.executeDailySalesTask();
// asserts
/*
for (ProductDailySale pds: salesList) {
System.out.println(pds);
}
day[Mon Apr 05 15:51:17 CST 2021], merchantId[1] sku[SKU_2] quantity[2] charge[3000]
day[Mon Apr 05 15:51:17 CST 2021], merchantId[1] sku[SKU_1] quantity[5] charge[5000]
day[Mon Apr 05 15:51:17 CST 2021], merchantId[2] sku[SKU_22] quantity[2] charge[10000]
*/
assertTrue(salesList.size() == 3);
boolean hasSaleSku1 = false;
boolean hasSaleSku2 = false;
boolean hasSaleSku22 = false;
for (int i = 0 ; i < salesList.size(); i++) {
ProductDailySale pds = salesList.get(i);
if (pds.getMerchant().getId() == 1
&& pds.getSku().equals("SKU_1")
&& pds.getQuantity() == 5
&& pds.getCharge().equals(new BigDecimal(5000))) {
hasSaleSku1 = true;
}
if (pds.getMerchant().getId() == 1
&& pds.getSku().equals("SKU_2")
&& pds.getQuantity() == 2
&& pds.getCharge().equals(new BigDecimal(3000))) {
hasSaleSku2 = true;
}
if (pds.getMerchant().getId() == 2
&& pds.getSku().equals("SKU_22")
&& pds.getQuantity() == 2
&& pds.getCharge().equals(new BigDecimal(10000))) {
hasSaleSku22 = true;
}
}
assert(hasSaleSku1 == true);
assert(hasSaleSku2 == true);
assert(hasSaleSku22 == true);
}
private void populateOrders(List<Order> orders) {
// CANCELED orders
{
Order order = new Order();
order.setStatus(OrderStatus.CANCELED);
MerchantStore merchant = new MerchantStore();
merchant.setId(1);
order.setMerchant(merchant);
Set<OrderProduct> orderProducts = new HashSet<OrderProduct>();
{
OrderProduct orderProduct = new OrderProduct();
orderProduct.setSku("SKU_1");
orderProduct.setProductQuantity(1);
BigDecimal oneTimeCharge = new BigDecimal(1000);
orderProduct.setOneTimeCharge(oneTimeCharge);
orderProducts.add(orderProduct);
}
order.setOrderProducts(orderProducts);
orders.add(order);
}
// REFUNDED orders
{
Order order = new Order();
order.setStatus(OrderStatus.REFUNDED);
MerchantStore merchant = new MerchantStore();
merchant.setId(1);
order.setMerchant(merchant);
Set<OrderProduct> orderProducts = new HashSet<OrderProduct>();
{
OrderProduct orderProduct = new OrderProduct();
orderProduct.setSku("SKU_1");
orderProduct.setProductQuantity(1);
BigDecimal oneTimeCharge = new BigDecimal(1000);
orderProduct.setOneTimeCharge(oneTimeCharge);
orderProducts.add(orderProduct);
}
order.setOrderProducts(orderProducts);
orders.add(order);
}
// normal orders
{
Order order = new Order();
order.setStatus(OrderStatus.ORDERED);
MerchantStore merchant = new MerchantStore();
merchant.setId(1);
order.setMerchant(merchant);
Set<OrderProduct> orderProducts = new HashSet<OrderProduct>();
{
OrderProduct orderProduct = new OrderProduct();
orderProduct.setSku("SKU_1");
orderProduct.setProductQuantity(1);
BigDecimal oneTimeCharge = new BigDecimal(1000);
orderProduct.setOneTimeCharge(oneTimeCharge);
orderProducts.add(orderProduct);
}
{
OrderProduct orderProduct = new OrderProduct();
orderProduct.setSku("SKU_2");
orderProduct.setProductQuantity(2);
BigDecimal oneTimeCharge = new BigDecimal(1500);
orderProduct.setOneTimeCharge(oneTimeCharge);
orderProducts.add(orderProduct);
}
order.setOrderProducts(orderProducts);
orders.add(order);
}
{
Order order = new Order();
order.setStatus(OrderStatus.ORDERED);
MerchantStore merchant = new MerchantStore();
merchant.setId(1);
order.setMerchant(merchant);
Set<OrderProduct> orderProducts = new HashSet<OrderProduct>();
{
OrderProduct orderProduct = new OrderProduct();
orderProduct.setSku("SKU_1");
orderProduct.setProductQuantity(4);
BigDecimal oneTimeCharge = new BigDecimal(1000);
orderProduct.setOneTimeCharge(oneTimeCharge);
orderProducts.add(orderProduct);
}
order.setOrderProducts(orderProducts);
orders.add(order);
}
{
Order order = new Order();
order.setStatus(OrderStatus.ORDERED);
MerchantStore merchant = new MerchantStore();
merchant.setId(2);
order.setMerchant(merchant);
Set<OrderProduct> orderProducts = new HashSet<OrderProduct>();
{
OrderProduct orderProduct = new OrderProduct();
orderProduct.setSku("SKU_22");
orderProduct.setProductQuantity(2);
BigDecimal oneTimeCharge = new BigDecimal(5000);
orderProduct.setOneTimeCharge(oneTimeCharge);
orderProducts.add(orderProduct);
}
order.setOrderProducts(orderProducts);
orders.add(order);
}
}
}
版权声明:本文为wwwdyy8com原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。