Summary Table
Categories |
Total Count |
PII |
0 |
URL |
0 |
DNS |
0 |
EKL |
0 |
IP |
0 |
PORT |
0 |
VsID |
0 |
CF |
0 |
AI |
0 |
VPD |
0 |
PL |
0 |
Other |
0 |
File Content
package gov.va.med.ars.service.impl;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anySetOf;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.when;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Matchers;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import gov.va.med.ars.dao.ars.ClaimLevel277CARepository;
import gov.va.med.ars.dao.ars.ClaimStatus277CARepository;
import gov.va.med.ars.dao.ars.ICstat277caLoggingRepository;
import gov.va.med.ars.dao.ars.IHeaderRecord277CARepository;
import gov.va.med.ars.dao.ars.LineLevel277CARepository;
import gov.va.med.ars.model.request.Parse277CARequest;
import gov.va.med.ars.model.response.CSTATResponse;
import gov.va.med.ars.service.ICstatGeneratorService;
import gov.va.med.domain.ars.ClaimLevelRecordsDetail;
import gov.va.med.domain.ars.ClaimStatusRecordDetail;
import gov.va.med.domain.ars.Cstat277caLogging;
import gov.va.med.domain.ars.HeaderRecordDetail;
import gov.va.med.domain.ars.LineLevelRecordsDetail;
@RunWith(MockitoJUnitRunner.class)
public class Parse277CAServiceImplTest {
@Mock
ClaimLevel277CARepository claimLevel277CARepository;
@Mock
LineLevel277CARepository lineLevel277CARepository;
@Mock
ICstat277caLoggingRepository caLogggingRepository;
@Mock
IHeaderRecord277CARepository headerRecord277CARepository;
@Mock
ICstatGeneratorService cstatService;
@InjectMocks
Parse277CAServiceImpl parse277CaService;
@Mock
ClaimStatus277CARepository claimStatusRecordRepository;
@Test
public void testMockIsWorking() {
assertNotNull("Parse277CAServiceImplTest Injection Failed", parse277CaService);
}
@Test
public void testParse_HeaderFail_NoSvcLines() {
Parse277CARequest request = new Parse277CARequest();
request.setCa277String(
"ISA*00* *00* *ZZ*VAFSC *ZZ*CLAIMSNET *180618*0610*^*00501*000000767*0*P*:~GS*HN*VAFSC*CLAIMSNET*20180618*0610*302*X*005010X214~ST*277*10001*005010X214~BHT*0085*08*46590065-7c78-9K60-0000-180618060555*20180618*061011*TH~HL*1**20*1~NM1*PR*2*DEPARTMENT OF VETERANS AFFAIRS*****PI*749892229~TRN*1*00000000000332~DTP*050*D8*20180616~DTP*009*D8*20180618~HL*2*1*21*1~NM1*41*2*CLAIMSNETTO*****46*~TRN*2*29200057_1~STC*A1:19*20180618*WQ*105368~QTY*90*2~QTY*AA*0~AMT*YU*105368~AMT*YY*0~HL*3*2*19*1~NM1*85*2*ABCDEF GHIJ KLMNOP*****XX*9898989898~TRN*1*33~STC*A1:19**WQ*105368~REF*TJ*999999999~QTY*QA*2~AMT*YU*105368~AMT*YY*0~HL*4*3*PT~NM1*QC*1*SDHDS*ASDCFD****MI*009876545~TRN*2*SRN99999999~STC*A1:19*20180918*WQ*51919~REF*1K*UB067815EDI0025~REF*D9*20994609~REF*BLT*131~DTP*472*D8*20180509~HL*5*3*PT~NM1*QC*1*fdfdfd*hghghg****MI*987654345~TRN*2*SRN17344494~STC*A1:19*20180618*WQ*53449~REF*1K*UB078918EDI0026~REF*D9*20984660~REF*BLT*131~DTP*472*D8*20180502~SE*40*10001~GE*1*444~IEA*1*000001111~");
ClaimLevelRecordsDetail clrd = new ClaimLevelRecordsDetail();
Date CaFileDateReceived = new Date();
Cstat277caLogging ca277Logging = new Cstat277caLogging();
ca277Logging.setDateReceived(CaFileDateReceived);
when(caLogggingRepository.saveAndFlush(Matchers.any(Cstat277caLogging.class))).thenReturn(ca277Logging);
when(claimLevel277CARepository.saveAndFlush(any(ClaimLevelRecordsDetail.class))).thenReturn(clrd);
parse277CaService.process277CABatch(request);
verify(claimLevel277CARepository, times(0)).saveAndFlush(any(ClaimLevelRecordsDetail.class));
verify(lineLevel277CARepository, times(0)).save(anySetOf(LineLevelRecordsDetail.class));
verifyNoMoreInteractions(claimLevel277CARepository);
verifyNoMoreInteractions(lineLevel277CARepository);
// Reject as header is not valid
}
@Test
public void testParse_Success_WithSvcLines() {
Parse277CARequest request = new Parse277CARequest();
request.setCa277String(
"ISA*00* *00* *ZZ*VAFSC *ZZ*CLAIMSNET *180618*0610*^*00501*000000767*0*P*:~GS*HN*VAFSC*CLAIMSNET*20180618*0610*302*X*005010X214~ST*277*10001*005010X214~BHT*0085*08*46590065-7c78-9K60-0000-180618060555*20180618*061011*TH~HL*1**20*1~NM1*PR*2*DEPARTMENT OF VETERANS AFFAIRS*****PI*987654~TRN*1*00000000000332~DTP*050*D8*20180616~DTP*009*D8*20180618~HL*2*1*21*1~NM1*41*2*CLAIMSNETTO*****46*6767676~TRN*2*29200057_1~STC*A1:19*20180618*WQ*105368~QTY*90*2~QTY*AA*0~AMT*YU*105368~AMT*YY*0~HL*3*2*19*1~NM1*85*2*SMITH CLINIC*****FI*123456789~HL*4*3*PT~NM1*QC*1*SDHDS*ASDCFD****MI*009876545~TRN*2*SRN99999999~STC*A1:19*20180918*WQ*51919~REF*1K*UB067815EDI0025~REF*D9*20994609~REF*BLT*131~DTP*472*D8*20180509~SVC*HC:22305:22*999*10.00****1~STC*A3:122*20180715*U*******A3:153:82~REF*FJ*11~REF*1K*UB067815EDI0025~DTP*472*RD8*20180401-20180409~SVC*HC:22305:22*888*20.00****1~STC*B3:122*20180717*U*******A3:153:82~REF*FJ*11~REF*1K*UB067815EDI0025~DTP*472*RD8*20180401-20180409~SVC*HC:22305:22*777*30.00****1~STC*C3:122*20180719*U*******A3:153:82~REF*FJ*11~REF*1K*UB067815EDI0025~DTP*472*RD8*20180401-20180409~SE*45*0001~GE*1*444~IEA*1*000001111~");
ClaimLevelRecordsDetail clrd = new ClaimLevelRecordsDetail();
List<LineLevelRecordsDetail> llrdList = new ArrayList<>();
HeaderRecordDetail headerRecord = new HeaderRecordDetail();
Date CaFileDateReceived = new Date();
CSTATResponse cstatResponse = new CSTATResponse();
ClaimStatusRecordDetail claimststrec = new ClaimStatusRecordDetail();
cstatResponse.setIsGenerated(true);
cstatResponse.setDateCreated(LocalDate.now());
cstatResponse.setLineCount(1);
Cstat277caLogging loggingObject = new Cstat277caLogging();
loggingObject.setDateReceived(CaFileDateReceived);
clrd.setHl320Nm1092100aFiPayerid("987654");
when(caLogggingRepository.saveAndFlush(Matchers.any(Cstat277caLogging.class))).thenReturn(loggingObject);
when(claimLevel277CARepository.saveAndFlush(any(ClaimLevelRecordsDetail.class))).thenReturn(clrd);
when(lineLevel277CARepository.save(anySetOf(LineLevelRecordsDetail.class))).thenReturn(llrdList);
when(claimStatusRecordRepository.save(any(ClaimStatusRecordDetail.class))).thenReturn(claimststrec);
when(headerRecord277CARepository.saveAndFlush(any(HeaderRecordDetail.class))).thenReturn(headerRecord);
when(cstatService.buildCSTAT(any(Long.class))).thenReturn(cstatResponse);
when(caLogggingRepository.save(any(Cstat277caLogging.class))).thenReturn(loggingObject);
// parser main call
boolean parseResult = parse277CaService.process277CABatch(request);
verify(headerRecord277CARepository, times(1)).saveAndFlush(any(HeaderRecordDetail.class));
// verify(claimLevel277CARepository,
// times(1)).saveAndFlush(any(ClaimLevelRecordsDetail.class));
verify(caLogggingRepository, times(1)).save(any(Cstat277caLogging.class));
verifyNoMoreInteractions(claimLevel277CARepository);
assertTrue(parseResult);
}
@Test
public void testParse_Error_PatientNameMissing() {
Parse277CARequest request = new Parse277CARequest();
request.setCa277String(
"ISA*00*????????? *00*????????? *ZZ*VAFSC????????? *ZZ*CLAIMSNET????? *180618*0610*^*00501*000000767*0*P*:~GS*HN*VAFSC*CLAIMSNET*20180618*0610*302*X*005010X214~ST*277*10001*005010X214~BHT*0085*08*46590065-7c78-9K60-0000-180618060555*20180618*061011*TH~HL*1**20*1~NM1*PR*2*DEPARTMENT OF VETERANS AFFAIRS*****PI*987654~TRN*1*00000000000332~DTP*050*D8*20180616~DTP*009*D8*20180618~HL*2*1*21*1~NM1*41*2*CLAIMSNETTO*****46*6767676~TRN*2*29200057_1~STC*A1:19*20180618*WQ*105368~QTY*90*2~QTY*AA*0~AMT*YU*105368~AMT*YY*0~HL*3*2*19*1~NM1*85*2*SMITH CLINIC*****FI*123456789~HL*4*3*PT~NM1*QC*1******MI*009876545~TRN*2*SRN99999999~STC*A1:19*20180918*WQ*51919~REF*1K*UB067815EDI0025~REF*D9*20994609~REF*BLT*131~DTP*472*D8*20180509~SVC*HC:22305:22*999*10.00****1~STC*A3:122*20180715*U*******A3:153:82~REF*FJ*11~REF*1K*UB067815EDI0025~DTP*472*RD8*20180401-20180409~SVC*HC:22305:22*888*20.00****1~STC*B3:122*20180717*U*******A3:153:82~REF*FJ*11~REF*1K*UB067815EDI0025~DTP*472*RD8*20180401-20180409~SVC*HC:22305:22*777*30.00****1~STC*C3:122*20180719*U*******A3:153:82~REF*FJ*11~REF*1K*UB067815EDI0025~DTP*472*RD8*20180401-20180409~SE*40*10001~GE*1*444~IEA*1*000001111~");
CSTATResponse cstatResponse = new CSTATResponse();
cstatResponse.setIsGenerated(false);
cstatResponse.setDateCreated(LocalDate.now());
cstatResponse.setLineCount(1);
Cstat277caLogging loggingObject = new Cstat277caLogging();
loggingObject.setDateReceived(new Date());
when(caLogggingRepository.save(Matchers.any(Cstat277caLogging.class))).thenReturn(loggingObject);
when(cstatService.buildCSTAT(any(Long.class))).thenReturn(cstatResponse);
parse277CaService.process277CABatch(request);
// verify(claimLevel277CARepository,
// times(0)).saveAndFlush(any(ClaimLevelRecordsDetail.class));
// verify(lineLevel277CARepository,
// times(0)).save(anySetOf(LineLevelRecordsDetail.class));
verify(caLogggingRepository, times(1)).save(any(Cstat277caLogging.class));
}
@Test
public void testParse_Error_incorrectRequest() {
Parse277CARequest request = new Parse277CARequest();
request.setCa277String(
"ISA*00* *00* *ZZ*VAFSC *ZZ*CLAIMSNET *180618*0610*^*00501*000000767*0*P*:~GS*HN*VAFSC*CLAIMSNET*20180618*0610*302*X*005010X214~ST*277*10001*005010X214~BHT*0085*08*46590065-7c78-9K60-0000-180618060555*20180618*061011*TH~HL*1**20*1~NM1*PR*2*DEPARTMENT OF VETERANS AFFAIRS*****PI*987654~TRN*1*00000000000332~DTP*050*D8*20180616~DTP*009*D8*20180618~HL*2*1*21*1~NM1*41*2*CLAIMSNETTO*****46*6767676~TRN*2*29200057_1~STC*A1:19*20180618*WQ*105368~QTY*90*2~QTY*AA*0~AMT*YU*105368~AMT*YY*0~HL*3*2*19*1~NM1*85*2*SMITH CLINIC*****FI*123456789~SE*40*10001~GE*1*444~IEA*1*000001111~");
parse277CaService.process277CABatch(request);
verify(claimLevel277CARepository, times(0)).saveAndFlush(any(ClaimLevelRecordsDetail.class));
verify(lineLevel277CARepository, times(0)).save(anySetOf(LineLevelRecordsDetail.class));
}
}