-
Notifications
You must be signed in to change notification settings - Fork 56
/
OrderServiceImplTest.java
198 lines (165 loc) · 7.46 KB
/
OrderServiceImplTest.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
package band.wukong.mz.g.sale.servcie.impl;
import band.wukong.mz.base.bean.Period;
import band.wukong.mz.g.AppConst;
import band.wukong.mz.g.category.SimpleCateConst;
import band.wukong.mz.g.customer.service.CustomerService;
import band.wukong.mz.g.privilege.bean.User;
import band.wukong.mz.g.sale.bean.Cart;
import band.wukong.mz.g.sale.bean.Item;
import band.wukong.mz.g.sale.bean.Order;
import band.wukong.mz.g.sale.service.CartService;
import band.wukong.mz.g.sale.service.DiscountRule;
import band.wukong.mz.g.sale.service.OrderService;
import band.wukong.mz.g.sku.dao.SkuMoreDao;
import band.wukong.mz.nutz.NutzTestHelper;
import band.wukong.mz.util.DateUtils;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.nutz.dao.QueryResult;
import org.nutz.ioc.Ioc;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* As you see...
*
* @author wukong(wukonggg@139.com)
*/
public class OrderServiceImplTest {
private Ioc ioc;
private OrderService orderService;
private SkuMoreDao skuMoreDao;
private CustomerService custService;
private CartService cartService;
@Before
public void setUp() throws ClassNotFoundException {
ioc = NutzTestHelper.createIoc();
orderService = ioc.get(OrderService.class);
skuMoreDao = ioc.get(SkuMoreDao.class);
custService = ioc.get(CustomerService.class);
cartService = ioc.get(CartService.class);
}
@After
public void tearDown() {
NutzTestHelper.destroyIoc(ioc);
}
@Test
public void find() {
Assert.assertNotNull(orderService.find(1));
}
@Test
public void listDetail() {
String qcond = "99999999998"; //cid
Period period = new Period(DateUtils.convert2date("2015-01-01"), DateUtils.convert2date("2015-07-20"));
User user = new User();
user.setId(1L);
QueryResult qr = orderService.listDetail(qcond, period, user, 0, AppConst.PAGE_NUM_DFT);
Assert.assertNotNull(qr.getPager().getRecordCount());
Assert.assertTrue(qr.getList(Order.class).size() > 0);
}
@Test
public void pay() {
// 1、pay方法是否返回了新生成的order
// 2、库存数量变化
// 3、购物车变化
// 4、paymentClothing变化
final Long CUST_ID = 2L;
final Long CUST_CID = 99999999999L;
final Long USER_ID = 1L;
final Long SKU_MORE_ID = 93L;
final String CATE_CODE = SimpleCateConst.CATE_CODE_A_SYTZ;
final int SPRICE = 120;
final int DCOUNT = 1;
final double PAYMENT = 108;
int pre_skuMore_count = skuMoreDao.find(SKU_MORE_ID).getCount();
long pre_paymentClothing = custService.find(CUST_ID).getPaymentClothing();
Cart[] carts = new Cart[1];
Cart cart = new Cart();
cart.setCustId(CUST_ID);
cart.setSkuMoreId(SKU_MORE_ID);
cart.setCount(DCOUNT);
cart.setSprice(SPRICE);
cart.setCount(DCOUNT);
cart.setPayment(PAYMENT);
carts[0] = cart;
Order order = orderService.pay(carts, USER_ID);
// 1、pay方法是否返回了新生成的order
Assert.assertNotNull(order);
Assert.assertTrue(order.getItems().size() == 1);
// 2、库存数量变化
int curr_skuMore_count = skuMoreDao.find(SKU_MORE_ID).getCount();
Assert.assertTrue(pre_skuMore_count == curr_skuMore_count + DCOUNT);
// 3、购物车变化
Map<String, List<Cart>> userCartsMap= cartService.listGroupByCust(USER_ID);
Assert.assertTrue(null != userCartsMap);
List<Cart> cartsOfCust = userCartsMap.get(CUST_CID);
if (null != cartsOfCust) {
for (Cart c : cartsOfCust) {
// 如果找到了key为cid的CartList中有skuMoreId,说明没有删掉
Assert.assertTrue(SKU_MORE_ID != c.getSkuMoreId());
}
} // 如果carsOfCust为null,则说明ok。所以就不用else了。
// 4、paymentClothing变化
if(DiscountRule.hasClothingDiscount(CATE_CODE)) {
long payment = order.getItems().get(0).getPayment();
long curr_paymentClothing = custService.find(CUST_ID).getPaymentClothing();
Assert.assertTrue(payment + pre_paymentClothing == curr_paymentClothing);
}
// FIXME 补充失败情况的单元测试用例
// 1、用户是否存在
// 2、顾客是否存在
// 3、购买数量大于
}
@Test
public void findItemWithOrder() {
Item item = orderService.findItemWithOrder(9);
Assert.assertNotNull(item);
Assert.assertNotNull(item.getOrder());
}
@Test
public void returnItem() {
//1、准备测试数据
//2、记录原始数据:order.item.state/dcount/payment,
// order.item.skuMore(skukMoreId).count,
// order.cust.paymentClothing
//3、执行待测方法
//4、检查变化情况2:新的item: order.item.state/dcount/payment/returnTime/returnReason/returnDesc
//5、检查变化情况3:库存: order.item.skuMore(skukMoreId).count
//6、检查变化情况4:cust: order.cust.paymentClothing
//1、准备测试数据
final int DT_ITEM_ID = 9;
final int DT_USERID = 1;
final int DT_RET_COUNT = 1;
final String DT_RET_REASON = Item.RETURN_REASON_SIZE;
final String DT_RET_DESC = "就不告诉你。。。";
Item i = new Item();
i.setId(DT_ITEM_ID);
i.setReturnUserId(DT_USERID);
i.setDcount(DT_RET_COUNT);
i.setReturnReason(DT_RET_REASON);
i.setReturnDesc(DT_RET_DESC);
//2、记录原始数据:order.item.state/dcount/payment, order.cust.paymentClothing
Item item_original = orderService.findItemWithOrder(DT_ITEM_ID);
long custId = orderService.find(item_original.getOid()).getCustId();
long item_original_paymentClothing = custService.find(custId).getPaymentClothing();
long skuMore_original_count = skuMoreDao.find(item_original.getSkuMoreId()).getCount();
//3、执行待测方法
Item item_returned = orderService.returnItem(i);
//4、检查变化情况2:新的item: order.item.state/dcount/payment/returnTime/returnReason/returnDesc
Assert.assertEquals(DT_RET_REASON, item_returned.getState());
Assert.assertEquals(DT_RET_COUNT, -item_returned.getDcount());
Assert.assertEquals(item_returned.getDprice() * item_returned.getDcount(), item_returned.getPayment());
Assert.assertTrue(DateUtils.isSameDay(new Date(), item_returned.getReturnTime()));
Assert.assertTrue(DT_RET_REASON.equals(item_returned.getReturnReason()));
Assert.assertTrue(DT_RET_DESC.equals(item_returned.getReturnDesc()));
//5、检查变化情况3:库存: order.item.skuMore(skukMoreId).count
Assert.assertEquals(item_returned.getSkuMoreId(), item_original.getSkuMoreId());
long skuMore_now_count = skuMoreDao.find(item_returned.getSkuMoreId()).getCount();
Assert.assertEquals(skuMore_original_count, skuMore_now_count + item_returned.getDcount()); //return的dcount是负值
//6、检查变化情况4:cust: order.cust.paymentClothing
long next_paymentclothing = custService.find(custId).getPaymentClothing();
Assert.assertEquals(item_original_paymentClothing + item_returned.getPayment(), next_paymentclothing);
}
}