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)) }, }); } }