package org.xmx0632.deliciousfruit.service;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.xmx0632.deliciousfruit.erp.ErpApiService;
import org.xmx0632.deliciousfruit.erp.bo.DeductionMessage;
import org.xmx0632.deliciousfruit.erp.bo.ErpChangeCard;
import org.xmx0632.deliciousfruit.erp.bo.ErpChangeCash;
import org.xmx0632.deliciousfruit.erp.bo.ErpChangeCoin;
import org.xmx0632.deliciousfruit.erp.bo.ErpChangePoint;
import org.xmx0632.deliciousfruit.erp.bo.ErpMessage;
/**
*
* 测试抵扣ERP的抵扣券/礼品卡/积分/账户余额等回滚消息
*
* @author mars
*
*/
public class DeductionPayServiceRollbackDeductionPayMessageTest {
@InjectMocks
protected DeductionPayService deductionPayService;
@Mock
protected ErpApiService erpApiService;
private ErpChangeCard changeCard = new ErpChangeCard("0001", "33");
private ErpChangeCash changeCash = new ErpChangeCash("002", 1);
private ErpChangePoint changePoint = new ErpChangePoint("cid", "10");
private ErpChangeCoin changeCoin = new ErpChangeCoin("cid", "10");
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
}
// 根据每个消息状态,判断调用回滚消息发送次数
@Test
public void testRollbackDeductionPayMessage4CashCoupon() {
Mockito.when(erpApiService.changeCash(changeCash.getRollback()))
.thenReturn(true);
DeductionMessage deductionMessage = new DeductionMessage();
ErpMessage<ErpChangeCash> erpMessage = new ErpMessage<ErpChangeCash>(
changeCash);
erpMessage.setHasSent(true);
deductionMessage.addErpChangeCash(erpMessage);
assertTrue(erpMessage.hasSent());
assertFalse(erpMessage.hasRollback());
deductionPayService.rollbackDeductionPayMessage(deductionMessage);
List<ErpMessage<ErpChangeCash>> erpChangeCashList = deductionMessage
.getErpChangeCashList();
assertTrue(erpChangeCashList.get(0).hasSent());
assertTrue(erpChangeCashList.get(0).hasRollback());
}
@Test
public void testRollbackDeductionPayMessage4CashCouponError() {
Mockito.when(erpApiService.changeCash(changeCash.getRollback()))
.thenReturn(false);
DeductionMessage deductionMessage = new DeductionMessage();
ErpMessage<ErpChangeCash> erpMessage = new ErpMessage<ErpChangeCash>(
changeCash);
erpMessage.setHasSent(true);
deductionMessage.addErpChangeCash(erpMessage);
assertTrue(erpMessage.hasSent());
assertFalse(erpMessage.hasRollback());
deductionPayService.rollbackDeductionPayMessage(deductionMessage);
List<ErpMessage<ErpChangeCash>> erpChangeCashList = deductionMessage
.getErpChangeCashList();
assertTrue(erpChangeCashList.get(0).hasSent());
assertFalse(erpChangeCashList.get(0).hasRollback());
}
// 根据每个消息状态,判断调用回滚消息发送次数
@Test
public void testRollbackDeductionPayMessage4GiftCard() {
Mockito.when(erpApiService.changeCard(changeCard.getRollback()))
.thenReturn(true);
DeductionMessage deductionMessage = new DeductionMessage();
ErpMessage<ErpChangeCard> erpMessage = new ErpMessage<ErpChangeCard>(
changeCard);
erpMessage.setHasSent(true);
deductionMessage.addErpChangeCard(erpMessage);
assertTrue(erpMessage.hasSent());
assertFalse(erpMessage.hasRollback());
deductionPayService.rollbackDeductionPayMessage(deductionMessage);
List<ErpMessage<ErpChangeCard>> erpChangeCardList = deductionMessage
.getErpChangeCardList();
assertTrue(erpChangeCardList.get(0).hasSent());
assertTrue(erpChangeCardList.get(0).hasRollback());
}
// 根据每个消息状态,判断调用回滚消息发送次数
@Test
public void testRollbackDeductionPayMessage4GiftCardError() {
Mockito.when(erpApiService.changeCard(changeCard.getRollback()))
.thenReturn(false);
DeductionMessage deductionMessage = new DeductionMessage();
ErpMessage<ErpChangeCard> erpMessage = new ErpMessage<ErpChangeCard>(
changeCard);
erpMessage.setHasSent(true);
deductionMessage.addErpChangeCard(erpMessage);
assertTrue(erpMessage.hasSent());
assertFalse(erpMessage.hasRollback());
deductionPayService.rollbackDeductionPayMessage(deductionMessage);
List<ErpMessage<ErpChangeCard>> erpChangeCardList = deductionMessage
.getErpChangeCardList();
assertTrue(erpChangeCardList.get(0).hasSent());
assertFalse(erpChangeCardList.get(0).hasRollback());
}
// 根据每个消息状态,判断调用回滚消息发送次数
@Test
public void testRollbackDeductionPayMessage4Point() {
Mockito.when(erpApiService.changePoint(changePoint.getRollback()))
.thenReturn(true);
DeductionMessage deductionMessage = new DeductionMessage();
ErpMessage<ErpChangePoint> erpMessage = new ErpMessage<ErpChangePoint>(
changePoint);
erpMessage.setHasSent(true);
deductionMessage.setErpChangePoint(erpMessage);
assertTrue(erpMessage.hasSent());
assertFalse(erpMessage.hasRollback());
deductionPayService.rollbackDeductionPayMessage(deductionMessage);
ErpMessage<ErpChangePoint> erpChangePoint = deductionMessage
.getErpChangePoint();
assertTrue(erpChangePoint.hasSent());
assertTrue(erpChangePoint.hasRollback());
}
@Test
public void testRollbackDeductionPayMessage4PointError() {
Mockito.when(erpApiService.changePoint(changePoint.getRollback()))
.thenReturn(false);
DeductionMessage deductionMessage = new DeductionMessage();
ErpMessage<ErpChangePoint> erpMessage = new ErpMessage<ErpChangePoint>(
changePoint);
erpMessage.setHasSent(true);
deductionMessage.setErpChangePoint(erpMessage);
assertTrue(erpMessage.hasSent());
assertFalse(erpMessage.hasRollback());
deductionPayService.rollbackDeductionPayMessage(deductionMessage);
ErpMessage<ErpChangePoint> erpChangePoint = deductionMessage
.getErpChangePoint();
assertTrue(erpChangePoint.hasSent());
assertFalse(erpChangePoint.hasRollback());
}
// 根据每个消息状态,判断调用回滚消息发送次数
@Test
public void testRollbackDeductionPayMessage4Coin() {
Mockito.when(erpApiService.changeCoin(changeCoin.getRollback()))
.thenReturn(true);
DeductionMessage deductionMessage = new DeductionMessage();
ErpMessage<ErpChangeCoin> erpMessage = new ErpMessage<ErpChangeCoin>(
changeCoin);
erpMessage.setHasSent(true);
deductionMessage.setErpChangeCoin(erpMessage);
assertTrue(erpMessage.hasSent());
assertFalse(erpMessage.hasRollback());
deductionPayService.rollbackDeductionPayMessage(deductionMessage);
ErpMessage<ErpChangeCoin> erpChangeCoin = deductionMessage
.getErpChangeCoin();
assertTrue(erpChangeCoin.hasSent());
assertTrue(erpChangeCoin.hasRollback());
}
@Test
public void testRollbackDeductionPayMessage4CoinError() {
Mockito.when(erpApiService.changeCoin(changeCoin.getRollback()))
.thenReturn(false);
DeductionMessage deductionMessage = new DeductionMessage();
ErpMessage<ErpChangeCoin> erpMessage = new ErpMessage<ErpChangeCoin>(
changeCoin);
erpMessage.setHasSent(true);
deductionMessage.setErpChangeCoin(erpMessage);
assertTrue(erpMessage.hasSent());
assertFalse(erpMessage.hasRollback());
deductionPayService.rollbackDeductionPayMessage(deductionMessage);
ErpMessage<ErpChangeCoin> erpChangeCoin = deductionMessage
.getErpChangeCoin();
assertTrue(erpChangeCoin.hasSent());
assertFalse(erpChangeCoin.hasRollback());
}
}