/**
*
*/
package hk.hku.cecid.edi.sfrm.dao.ds;
import hk.hku.cecid.piazza.commons.test.DAOTest;
import hk.hku.cecid.edi.sfrm.dao.ds.SFRMMessageSegmentDSDAO;
import hk.hku.cecid.edi.sfrm.dao.SFRMMessageSegmentDAO;
import hk.hku.cecid.edi.sfrm.dao.SFRMMessageSegmentDVO;
import hk.hku.cecid.edi.sfrm.pkg.SFRMConstant;
import org.junit.Assert;
import org.junit.Test;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
/**
* @author Patrick Yip
*
*/
public class SFRMMessageSegmentDSDAOTest extends DAOTest<SFRMMessageSegmentDSDAO> {
@Override
public String getTableName(){
return "segment";
}
@Test
public void testFindSegmentByMessageIdAndBoxAndTypeAndNos() throws Exception{
SFRMMessageSegmentDAO dao = this.getTestingTarget();
List segNums = new ArrayList();
segNums.add(new Integer(1));
segNums.add(new Integer(3));
List results = dao.findSegmentByMessageIdAndBoxAndTypeAndNos("a", SFRMConstant.MSGBOX_OUT, SFRMConstant.MSGT_PAYLOAD, segNums);
Assert.assertEquals("Number of segment found should be 2", 2, results.size());
SFRMMessageSegmentDVO dvo = (SFRMMessageSegmentDVO) results.get(0);
Assert.assertEquals("Message segment with num 1 not found", 1, dvo.getSegmentNo());
Assert.assertEquals("Message segment 1 should have status DL", "DL", dvo.getStatus());
Assert.assertEquals("Message box should be OUTBOX", SFRMConstant.MSGBOX_OUT, dvo.getMessageBox());
Assert.assertEquals("Message Id should be a", "a", dvo.getMessageId());
dvo = (SFRMMessageSegmentDVO) results.get(1);
Assert.assertEquals("Message segment with num 3 not found", 3, dvo.getSegmentNo());
Assert.assertEquals("Message segment 3 should have status DF", "DF", dvo.getStatus());
Assert.assertEquals("Message box should be OUTBOX", SFRMConstant.MSGBOX_OUT, dvo.getMessageBox());
Assert.assertEquals("Message Id should be a", "a", dvo.getMessageId());
}
@Test
public void testUpdateBatchSegmentsStatus() throws Exception{
SFRMMessageSegmentDAO dao = this.getTestingTarget();
List segNums = new ArrayList();
segNums.add(new Integer(1));
segNums.add(new Integer(2));
segNums.add(new Integer(3));
int updated = dao.updateBatchSegmentsRecoveryStatus(SFRMConstant.MSGS_PROCESSED, "c", SFRMConstant.MSGBOX_OUT, SFRMConstant.MSGT_PAYLOAD, segNums);
Assert.assertEquals("Number of updated segment should be 3", 3, updated);
//Assert the segment status
SFRMMessageSegmentDVO msDVO = (SFRMMessageSegmentDVO) dao.createDVO();
msDVO.setMessageId("c");
msDVO.setMessageBox(SFRMConstant.MSGBOX_OUT);
msDVO.setSegmentType(SFRMConstant.MSGT_PAYLOAD);
msDVO.setSegmentNo(1);
//These 3 segment should be updated
dao.retrieve(msDVO);
Assert.assertEquals("seg 1 should updated to " + SFRMConstant.MSGS_PROCESSED, SFRMConstant.MSGS_PROCESSED, msDVO.getStatus());
msDVO.setSegmentNo(2);
dao.retrieve(msDVO);
Assert.assertEquals("seg 2 should updated to " + SFRMConstant.MSGS_PROCESSED, SFRMConstant.MSGS_PROCESSED, msDVO.getStatus());
msDVO.setSegmentNo(3);
dao.retrieve(msDVO);
Assert.assertEquals("seg 3 should updated to " + SFRMConstant.MSGS_PROCESSED, SFRMConstant.MSGS_PROCESSED, msDVO.getStatus());
//This segment should not be updated
msDVO.setSegmentNo(4);
dao.retrieve(msDVO);
Assert.assertEquals("seg 4 should remain in " + SFRMConstant.MSGS_DELIVERED, SFRMConstant.MSGS_DELIVERED, msDVO.getStatus());
}
@Test
public void testFindNumOfSegmentByMessageIdAndBoxAndTypeAndStatues() throws Exception{
SFRMMessageSegmentDAO dao = this.getTestingTarget();
List statues = new ArrayList();
statues.add("PS");
statues.add("DL");
Calendar cal = Calendar.getInstance();
cal.set(2008, 9-1, 19);
long numBytes = dao.findNumOfBytesSentByMessageIdAndBoxAndTypeAndStatues("testFindNumOfSegmentByMessageIdAndBoxAndTypeAndStatues", SFRMConstant.MSGBOX_OUT, SFRMConstant.MSGT_PAYLOAD, cal.getTimeInMillis(), statues);
Assert.assertEquals("Number of segment which is in PS and DL status should be 100", 100, numBytes);
}
}