package org.xmx0632.deliciousfruit.service;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.Collection;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.xmx0632.deliciousfruit.api.v1.bo.OrderRequest;
import org.xmx0632.deliciousfruit.api.v1.bo.OrderResponse.DeductionPay;
import org.xmx0632.deliciousfruit.erp.ErpApiService;
import org.xmx0632.deliciousfruit.erp.bo.ErpCard;
import org.xmx0632.deliciousfruit.erp.bo.ErpCash;
import org.xmx0632.deliciousfruit.erp.bo.ErpCustomer;
/**
* 正常流程
*
* 测试使用ERP的抵扣券/礼品卡/积分/账户余额等并扣除
*
* @author mars
*
*/
@RunWith(Parameterized.class)
public class DeductionPayServiceGetDeductionPaySuccessTest {
@InjectMocks
protected DeductionPayService deductionPayService;
@Mock
protected ErpApiService erpApiService;
private String title = "";
private OrderRequest orderRequest;
private ExpectedDeductionPayResult expectedResult;
public DeductionPayServiceGetDeductionPaySuccessTest(String title,
OrderRequest orderRequest, ExpectedDeductionPayResult expectedResult) {
this.title = title;
this.orderRequest = orderRequest;
this.expectedResult = expectedResult;
}
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
Mockito.when(
erpApiService
.getCashBy(DeductionPayServiceHelper.CASH_COUPON_ID_1))
.thenReturn(new ErpCash("100", 1));
Mockito.when(
erpApiService
.getCashBy(DeductionPayServiceHelper.CASH_COUPON_ID_2))
.thenReturn(new ErpCash("0", 1));
Mockito.when(
erpApiService
.getCardBy(DeductionPayServiceHelper.GIFT_CARD_ID_1))
.thenReturn(new ErpCard("50.0", ErpCard.Status_NORMAL));
Mockito.when(
erpApiService
.getCardBy(DeductionPayServiceHelper.GIFT_CARD_ID_2))
.thenReturn(new ErpCard("100.0", ErpCard.Status_NORMAL));
ErpCustomer erpCustomer = new ErpCustomer("customerId", "1000", "22.0");
Mockito.when(erpApiService.getCustomerBy("customerId")).thenReturn(
erpCustomer);
}
// This test will run many times since we have many parameters defined
@Test
public void testGetDeductionPay() {
System.out.println("测试标题:[" + title + "]");
System.out.println("请求参数:[" + orderRequest + "]");
System.out.println("预期的响应:[" + expectedResult + "]\n");
DeductionPay deductionPay = deductionPayService.getDeductionPay(
orderRequest, "customerId");
DeductionPayServiceHelper.assertDeductionPay(expectedResult,
deductionPay);
}
@SuppressWarnings("rawtypes")
@Parameterized.Parameters
public static Collection caseData() {
return Arrays
.asList(new Object[][] {
{
"没有抵扣信息1",
DeductionPayServiceHelper
.getOrderRequest4NoDeductionPay(),
new ExpectedDeductionPayResult(BigDecimal
.valueOf(5.0), 0, 0, BigDecimal.ZERO,
BigDecimal.ZERO, BigDecimal.ZERO,
BigDecimal.ZERO) },
{
"没有抵扣信息2",
DeductionPayServiceHelper
.getOrderRequest4NoDeductionPay(),
new ExpectedDeductionPayResult(BigDecimal
.valueOf(0.0), 0, 0, BigDecimal.ZERO,
BigDecimal.ZERO, BigDecimal.ZERO,
BigDecimal.ZERO) },
{
"没有抵扣信息3",
DeductionPayServiceHelper
.getOrderRequest4NoDeductionPay(),
new ExpectedDeductionPayResult(BigDecimal
.valueOf(0), 0, 0, BigDecimal.ZERO,
BigDecimal.ZERO, BigDecimal.ZERO,
BigDecimal.ZERO) },
{
"没有抵扣信息4",
DeductionPayServiceHelper
.getOrderRequest4NoDeductionPay(),
new ExpectedDeductionPayResult(BigDecimal
.valueOf(10), 0, 0, BigDecimal.ZERO,
BigDecimal.ZERO, BigDecimal.ZERO,
BigDecimal.ZERO) },
{
"使用现金券1",
DeductionPayServiceHelper.getOrderRequest4CashCoupon(
BigDecimal.valueOf(100),
DeductionPayServiceHelper.CASH_COUPON_ID_1),
new ExpectedDeductionPayResult(BigDecimal
.valueOf(100), 1, 0, BigDecimal.ZERO,
BigDecimal.ZERO, BigDecimal.ZERO,
BigDecimal.ZERO) },
{
"使用现金券2",
DeductionPayServiceHelper.getOrderRequest4CashCoupon(
BigDecimal.valueOf(0),
DeductionPayServiceHelper.CASH_COUPON_ID_2),
new ExpectedDeductionPayResult(BigDecimal
.valueOf(0), 1, 0, BigDecimal.ZERO,
BigDecimal.ZERO, BigDecimal.ZERO,
BigDecimal.ZERO) },
{
"使用积分1",
DeductionPayServiceHelper
.getOrderRequest4PayByPointInfo(
BigDecimal.valueOf(2.0), 200),
new ExpectedDeductionPayResult(BigDecimal.ZERO,
0, 0, BigDecimal.ZERO, BigDecimal.ZERO,
BigDecimal.valueOf(2.0),
BigDecimal.ZERO) },
{
"使用积分2",
DeductionPayServiceHelper
.getOrderRequest4PayByPointInfo(
BigDecimal.valueOf(4), 400),
new ExpectedDeductionPayResult(BigDecimal.ZERO,
0, 0, BigDecimal.ZERO, BigDecimal.ZERO,
BigDecimal.valueOf(4), BigDecimal.ZERO) },
{
"使用积分3",
DeductionPayServiceHelper
.getOrderRequest4PayByPointInfo(
BigDecimal.valueOf(10.0), 1000),
new ExpectedDeductionPayResult(BigDecimal.ZERO,
0, 0, BigDecimal.ZERO, BigDecimal.ZERO,
BigDecimal.valueOf(10.0),
BigDecimal.ZERO) },
{
"使用积分4",
DeductionPayServiceHelper
.getOrderRequest4PayByPointInfo(
BigDecimal.valueOf(0.0), 0),
new ExpectedDeductionPayResult(BigDecimal.ZERO,
0, 0, BigDecimal.ZERO, BigDecimal.ZERO,
BigDecimal.valueOf(0), BigDecimal.ZERO) },
{
"使用积分5",
DeductionPayServiceHelper
.getOrderRequest4PayByPointInfo(
BigDecimal.valueOf(0), 0),
new ExpectedDeductionPayResult(BigDecimal.ZERO,
0, 0, BigDecimal.ZERO, BigDecimal.ZERO,
BigDecimal.valueOf(0), BigDecimal.ZERO) },
{
"使用帐户余额抵扣1",
DeductionPayServiceHelper
.getOrderRequest4PayAmountFromAccount(BigDecimal
.valueOf(1.0)),
new ExpectedDeductionPayResult(null, 0, 0,
BigDecimal.ZERO, BigDecimal.ZERO,
BigDecimal.ZERO, BigDecimal
.valueOf(1.0)) },
{
"使用帐户余额抵扣2",
DeductionPayServiceHelper
.getOrderRequest4PayAmountFromAccount(BigDecimal
.valueOf(5.0)),
new ExpectedDeductionPayResult(null, 0, 0,
BigDecimal.ZERO, BigDecimal.ZERO,
BigDecimal.ZERO, BigDecimal
.valueOf(5.0)) },
{
"使用帐户余额抵扣3",
DeductionPayServiceHelper
.getOrderRequest4PayAmountFromAccount(BigDecimal
.valueOf(3)),
new ExpectedDeductionPayResult(null, 0, 0,
BigDecimal.ZERO, BigDecimal.ZERO,
BigDecimal.ZERO, BigDecimal.valueOf(3)) },
{
"使用帐户余额抵扣4",
DeductionPayServiceHelper
.getOrderRequest4PayAmountFromAccount(BigDecimal
.valueOf(10.4)),
new ExpectedDeductionPayResult(null, 0, 0,
BigDecimal.ZERO, BigDecimal.ZERO,
BigDecimal.ZERO, BigDecimal
.valueOf(10.4)) },
{
"使用帐户余额抵扣5",
DeductionPayServiceHelper
.getOrderRequest4PayAmountFromAccount(BigDecimal
.valueOf(0)),
new ExpectedDeductionPayResult(null, 0, 0,
BigDecimal.ZERO, BigDecimal.ZERO,
BigDecimal.ZERO, BigDecimal.valueOf(0)) },
{
"使用帐户余额抵扣6",
DeductionPayServiceHelper
.getOrderRequest4PayAmountFromAccount(BigDecimal
.valueOf(0.0)),
new ExpectedDeductionPayResult(null, 0, 0,
BigDecimal.ZERO, BigDecimal.ZERO,
BigDecimal.ZERO, BigDecimal.valueOf(0)) },
{
"使用礼品卡1",
DeductionPayServiceHelper.getOrderRequest4GiftCard(
BigDecimal.valueOf(10.0),
DeductionPayServiceHelper.GIFT_CARD_ID_1),
new ExpectedDeductionPayResult(BigDecimal.ZERO,
0, 1, BigDecimal.valueOf(10.0),
BigDecimal.valueOf(40.0),
BigDecimal.ZERO, BigDecimal.ZERO) },
{
"使用礼品卡2",
DeductionPayServiceHelper.getOrderRequest4GiftCard(
BigDecimal.valueOf(20.0),
DeductionPayServiceHelper.GIFT_CARD_ID_1),
new ExpectedDeductionPayResult(BigDecimal.ZERO,
0, 1, BigDecimal.valueOf(20.0),
BigDecimal.valueOf(30.0),
BigDecimal.ZERO, BigDecimal.ZERO) },
{
"使用礼品卡3",
DeductionPayServiceHelper.getOrderRequest4GiftCard(
BigDecimal.valueOf(30.0),
DeductionPayServiceHelper.GIFT_CARD_ID_1),
new ExpectedDeductionPayResult(BigDecimal.ZERO,
0, 1, BigDecimal.valueOf(30.0),
BigDecimal.valueOf(20.0),
BigDecimal.ZERO, BigDecimal.ZERO) },
{
"使用礼品卡4",
DeductionPayServiceHelper.getOrderRequest4GiftCard(
BigDecimal.valueOf(30),
DeductionPayServiceHelper.GIFT_CARD_ID_1),
new ExpectedDeductionPayResult(BigDecimal.ZERO,
0, 1, BigDecimal.valueOf(30),
BigDecimal.valueOf(20.0),
BigDecimal.ZERO, BigDecimal.ZERO) },
{
"使用礼品卡+账户余额1",
DeductionPayServiceHelper
.getOrderRequest4GiftCardAndPayAmountFromAccount(
DeductionPayServiceHelper.GIFT_CARD_ID_1,
BigDecimal.valueOf(10.0),
BigDecimal.valueOf(1.0)),
new ExpectedDeductionPayResult(BigDecimal
.valueOf(1.0), 0, 1, BigDecimal
.valueOf(10.0), BigDecimal
.valueOf(40.0), BigDecimal.ZERO,
BigDecimal.valueOf(1.0)) },
{
"使用礼品卡+账户余额2",
DeductionPayServiceHelper
.getOrderRequest4GiftCardAndPayAmountFromAccount(
DeductionPayServiceHelper.GIFT_CARD_ID_1,
BigDecimal.valueOf(20.0),
BigDecimal.valueOf(3.0)),
new ExpectedDeductionPayResult(BigDecimal
.valueOf(1.0), 0, 1, BigDecimal
.valueOf(20.0), BigDecimal
.valueOf(30.0), BigDecimal.ZERO,
BigDecimal.valueOf(3.0)) },
{
"使用礼品卡+账户余额3",
DeductionPayServiceHelper
.getOrderRequest4GiftCardAndPayAmountFromAccount(
DeductionPayServiceHelper.GIFT_CARD_ID_2,
BigDecimal.valueOf(70.0),
BigDecimal.valueOf(10.0)),
new ExpectedDeductionPayResult(BigDecimal
.valueOf(1.0), 0, 1, BigDecimal
.valueOf(70.0), BigDecimal
.valueOf(30.0), BigDecimal.ZERO,
BigDecimal.valueOf(10.0)) },
{
"使用礼品卡+积分1",
DeductionPayServiceHelper
.getOrderRequest4GiftCardAndPayByPointInfo(
DeductionPayServiceHelper.GIFT_CARD_ID_1,
BigDecimal.valueOf(10.0), 200,
BigDecimal.valueOf(2.0)),
new ExpectedDeductionPayResult(BigDecimal.ZERO,
0, 1, BigDecimal.valueOf(10.0),
BigDecimal.valueOf(40.0), BigDecimal
.valueOf(2.0), BigDecimal.ZERO) },
{
"使用礼品卡+积分2",
DeductionPayServiceHelper
.getOrderRequest4GiftCardAndPayByPointInfo(
DeductionPayServiceHelper.GIFT_CARD_ID_1,
BigDecimal.valueOf(20.0), 300,
BigDecimal.valueOf(3.0)),
new ExpectedDeductionPayResult(BigDecimal.ZERO,
0, 1, BigDecimal.valueOf(20.0),
BigDecimal.valueOf(30.0), BigDecimal
.valueOf(3.0), BigDecimal.ZERO) },
{
"使用礼品卡+积分3",
DeductionPayServiceHelper
.getOrderRequest4GiftCardAndPayByPointInfo(
DeductionPayServiceHelper.GIFT_CARD_ID_2,
BigDecimal.valueOf(20.0), 300,
BigDecimal.valueOf(3.0)),
new ExpectedDeductionPayResult(BigDecimal.ZERO,
0, 1, BigDecimal.valueOf(20.0),
BigDecimal.valueOf(80.0), BigDecimal
.valueOf(3.0), BigDecimal.ZERO) },
{
"使用账户余额+积分+礼品卡+现金券1",
DeductionPayServiceHelper
.getOrderRequest4AllDeductionPay(
DeductionPayServiceHelper.CASH_COUPON_ID_1,
BigDecimal.valueOf(100.0),
DeductionPayServiceHelper.GIFT_CARD_ID_1,
BigDecimal.valueOf(10.0), 200,
BigDecimal.valueOf(2.0),
BigDecimal.valueOf(3.0)),
new ExpectedDeductionPayResult(BigDecimal
.valueOf(100.0), 1, 1, BigDecimal
.valueOf(10.0), BigDecimal
.valueOf(40.0),
BigDecimal.valueOf(2.0), BigDecimal
.valueOf(3.0)) },
{
"使用账户余额+积分+礼品卡+现金券2",
DeductionPayServiceHelper
.getOrderRequest4AllDeductionPay(
DeductionPayServiceHelper.CASH_COUPON_ID_2,
BigDecimal.valueOf(0.0),
DeductionPayServiceHelper.GIFT_CARD_ID_2,
BigDecimal.valueOf(10.0), 200,
BigDecimal.valueOf(2.0),
BigDecimal.valueOf(3.0)),
new ExpectedDeductionPayResult(BigDecimal
.valueOf(0.0), 1, 1, BigDecimal
.valueOf(10.0), BigDecimal
.valueOf(90.0),
BigDecimal.valueOf(2.0), BigDecimal
.valueOf(3.0)) },
{
"使用账户余额+积分+礼品卡+现金券3",
DeductionPayServiceHelper
.getOrderRequest4AllDeductionPay(
DeductionPayServiceHelper.CASH_COUPON_ID_1,
BigDecimal.valueOf(100.0),
DeductionPayServiceHelper.GIFT_CARD_ID_1,
BigDecimal.valueOf(10.0), 200,
BigDecimal.valueOf(2.0),
BigDecimal.valueOf(6.0)),
new ExpectedDeductionPayResult(BigDecimal
.valueOf(100.0), 1, 1, BigDecimal
.valueOf(10.0), BigDecimal
.valueOf(40.0),
BigDecimal.valueOf(2.0), BigDecimal
.valueOf(6.0)) },
{
"使用账户余额+积分+礼品卡+现金券4",
DeductionPayServiceHelper
.getOrderRequest4AllDeductionPay(
DeductionPayServiceHelper.CASH_COUPON_ID_1,
BigDecimal.valueOf(100.0),
DeductionPayServiceHelper.GIFT_CARD_ID_2,
BigDecimal.valueOf(10.0), 200,
BigDecimal.valueOf(2.0),
BigDecimal.valueOf(6.0)),
new ExpectedDeductionPayResult(BigDecimal
.valueOf(100.0), 1, 1, BigDecimal
.valueOf(10.0), BigDecimal
.valueOf(90.0),
BigDecimal.valueOf(2.0), BigDecimal
.valueOf(6.0)) },
});
}
}