package org.jpos.jposext.isomsgaction.service.support;
import java.util.Map;
import org.jpos.iso.ISOException;
import org.jpos.iso.ISOMsg;
import org.jpos.jposext.isomsgaction.service.IISOMsgAction;
import org.mockito.Mockito;
import static org.fest.assertions.Assertions.*;
import junit.framework.TestCase;
/**
* @author dgrandemange
*
*/
public class ISOMsgActionLoopTest extends TestCase {
private ISOMsgActionLoop loopAction;
private ISOMsg[] msgTab;
private Map<String, Object> ctx;
private IISOMsgAction childAction1;
private IISOMsgAction childAction2;
private ISOMsg dummyIsoMsg1;
private ISOMsg dummyIsoMsg2;
protected void setUp() throws Exception {
super.setUp();
loopAction = new ISOMsgActionLoop();
loopAction.setIsoMsgCommonInfoProvider(new ISOMsgCommonInfoProviderImpl());
loopAction.mapCurrIteratorValByThread = Mockito.mock(Map.class);
childAction1 = Mockito.mock(IISOMsgAction.class);
childAction2 = Mockito.mock(IISOMsgAction.class);
loopAction.add(childAction1);
loopAction.add(childAction2);
ctx = Mockito.mock(Map.class);
dummyIsoMsg1 = new ISOMsg();
dummyIsoMsg2 = new ISOMsg();
msgTab = new ISOMsg[] {dummyIsoMsg1, dummyIsoMsg2};
}
private void populateDummyMsgWithFields(ISOMsg dummyIsoMsg, String fieldsCommaDelimited) throws NumberFormatException, ISOException {
String[] fieldNumberTab = fieldsCommaDelimited.split(",");
for (String fieldNumber : fieldNumberTab) {
dummyIsoMsg.set(Integer.parseInt(fieldNumber), "dummyValueField"+fieldNumber);
}
}
public void testProcess_IntervalMode() throws ISOException {
loopAction.setIntervalMode(true);
loopAction.setBegin(1);
loopAction.setEnd(4);
loopAction.setToken("i");
loopAction.process(msgTab, ctx);
Mockito.verify(childAction1, Mockito.times(4)).process(msgTab, ctx);
Mockito.verify(childAction2, Mockito.times(4)).process(msgTab, ctx);
for (int i=1;i<=4;i++) {
Mockito.verify(loopAction.mapCurrIteratorValByThread, Mockito.times(1)).put(Thread.currentThread().getId(), ""+i);
}
assertThat(loopAction.mapCurrIteratorValByThread.containsKey(Thread.currentThread().getId())).isFalse();
}
public void testProcess_ISOMsgChildsIterationMode() throws NumberFormatException, ISOException {
populateDummyMsgWithFields(dummyIsoMsg2, "5,1,12,8,15");
loopAction.setIntervalMode(false);
loopAction.setIdPath("");
loopAction.setMsgIndex(1);
loopAction.setToken("i");
loopAction.process(msgTab, ctx);
Mockito.verify(childAction1, Mockito.times(5)).process(msgTab, ctx);
Mockito.verify(childAction2, Mockito.times(5)).process(msgTab, ctx);
int[] fieldNumberTab=new int[] {5,1,12,8,15};
for (int fieldNumber : fieldNumberTab) {
Mockito.verify(loopAction.mapCurrIteratorValByThread, Mockito.times(1)).put(Thread.currentThread().getId(), ""+fieldNumber);
}
assertThat(loopAction.mapCurrIteratorValByThread.containsKey(Thread.currentThread().getId())).isFalse();
}
}