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.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.mockito.Mockito.when;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.junit.Ignore;
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.HccsCdRepository;
import gov.va.med.ars.dao.ars.ILoincTypeLookupRespository;
import gov.va.med.ars.dao.ars.LoincCdRepository;
import gov.va.med.ars.dao.ars.LoincModCdRepository;
import gov.va.med.ars.exceptions.GenericException;
import gov.va.med.ars.model.request.CodeAndModifierRequest;
import gov.va.med.ars.model.request.GenericRequest;
import gov.va.med.ars.model.response.CodeAndModifierResponse;
import gov.va.med.ars.model.response.LoincCodeListResponse;
import gov.va.med.domain.ars.HccsCd;
import gov.va.med.domain.ars.LoincCd;
import gov.va.med.domain.ars.LoincModCd;
import gov.va.med.domain.ars.LoincTypeLookup;

@RunWith(MockitoJUnitRunner.class)
public class CodeAndModifierServiceImplTest {
private static final Logger logger = LogManager.getLogger(CodeAndModifierServiceImplTest.class);
DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");

@Mock
LoincCdRepository loincCdRepository;

@Mock
LoincModCdRepository loincModCdRepository;

@Mock
HccsCdRepository hccsCdRepository;

@Mock
ILoincTypeLookupRespository loincTypeLookupRepository;

@InjectMocks
CodeAndModifierServiceImpl codeAndModService;

@Test
public void testMockIsWorking() {
assertNotNull("CodeAndModifierServiceImpl Injection Failed", codeAndModService);
}

@SuppressWarnings("unchecked")
@Test
public void testGetCodeAndModifier_loinc_success() throws GenericException, Exception {
logger.info("codes to process");

String url = "/api/v1/populate/loinc";
List<String> codeActive = new ArrayList<>();
codeActive.add("Y");
codeActive.add("No");

LoincTypeLookup loincTypeLookupClaim = new LoincTypeLookup();
loincTypeLookupClaim.setId(1);
loincTypeLookupClaim.setDescription("claim level");
loincTypeLookupClaim.setIdCd("claim");

LoincCd loinc = new LoincCd();
loinc.setLoincId(999l);
loinc.setIsactive('Y');
loinc.setStcloincCd("loincCd");
loinc.setStcloincCdDesc("loincCd_desc");
loinc.setClaimLineBridge(loincTypeLookupClaim);
loinc.setStartdate(dateFormat.parse("04/17/2018"));
loinc.setEnddate(dateFormat.parse("04/17/2018"));
List<LoincCd> loincCdList = new ArrayList<>();
loincCdList.add(loinc);

CodeAndModifierResponse loincCode = new CodeAndModifierResponse();
loincCode.setCd(999l);
loincCode.setStcCd("loincCd");
loincCode.setStcCdDesc("loincCd_desc");
loincCode.setFlag(false);
loincCode.setStartDate("04/17/2018");
loincCode.setEndDate("04/17/2018");
loincCode.setLevel("claim");

List<CodeAndModifierResponse> codeAndModifierResponsesList = new ArrayList<>();
codeAndModifierResponsesList.add(loincCode);

when(loincCdRepository.findByisactiveInAndIsarchive(Matchers.anyList(), Matchers.eq('N')))
.thenReturn(loincCdList);

List<LoincCodeListResponse> codeAndModifier = (List<LoincCodeListResponse>) codeAndModService
.getCodeAndModifier(url, codeActive);
logger.info("code list" + codeAndModifier.get(0).toString());
assertEquals(1, codeAndModifier.size());
// assertEquals(codeAndModifierResponsesList,
// codeAndModifier.get(0).getClaimList());
assertEquals("loincCd", codeAndModifier.get(0).getClaimList().get(0).getStcCd());

}

@SuppressWarnings("unchecked")
@Test
public void testGetCodeAndModifier_loincMod_success() throws GenericException, Exception {

// arrange (service)
String url = "/api/v1/populate/loincmod";
List<String> codeActive = new ArrayList<>();
codeActive.add("Y");
codeActive.add("N");

LoincTypeLookup loincTypeLookupClaim = new LoincTypeLookup();
loincTypeLookupClaim.setId(1);
loincTypeLookupClaim.setDescription("claim level");
loincTypeLookupClaim.setIdCd("claim");

// arrange (repository)
LoincModCd loincMod = new LoincModCd();
loincMod.setLoincModId(888l);
loincMod.setIsactive('Y');
loincMod.setStcloincCdMod("loincCdMod");
loincMod.setStcloincCdModDesc("loincCdMod_desc");
loincMod.setStartdate(dateFormat.parse("04/17/2018"));
loincMod.setEnddate(dateFormat.parse("04/17/2018"));

List<LoincModCd> loincCdModList = new ArrayList<>();
loincCdModList.add(loincMod);

CodeAndModifierResponse loincCode = new CodeAndModifierResponse();
loincCode.setCd(888l);
loincCode.setStcCd("loincCdMod");
loincCode.setStcCdDesc("loincCdMod_desc");
loincCode.setFlag(false);
loincCode.setStartDate("04/17/2018");
loincCode.setEndDate("04/17/2018");

List<CodeAndModifierResponse> codeAndModifierResponsesList = new ArrayList<>();
codeAndModifierResponsesList.add(loincCode);

when(loincModCdRepository.findByisactiveInAndIsarchive(Matchers.anyList(), Matchers.eq('N')))
.thenReturn(loincCdModList);

// act (service)
List<CodeAndModifierResponse> codeAndModifier = (List<CodeAndModifierResponse>) codeAndModService
.getCodeAndModifier(url, codeActive);

assertEquals(1, codeAndModifier.size());
assertEquals("loincCdMod", codeAndModifier.get(0).getStcCd());

}

@SuppressWarnings("unchecked")
@Test
public void testGetCodeAndModifier_hccs_success() throws Exception {

// arrange (service)
String url = "/api/v1/populate/hccs";
List<String> codeActive = new ArrayList<>();
codeActive.add("Y");
codeActive.add("N");

// arrange (repository)
HccsCd hccsCd1 = new HccsCd();
hccsCd1.setHccsId(777l);
hccsCd1.setIsactive('Y');
hccsCd1.setStchccstatuscatCd("hccsCd");
hccsCd1.setStchccstatuscatCdDesc("hccsCd_desc");
hccsCd1.setStartdate(dateFormat.parse("04/17/2018"));
hccsCd1.setEnddate(dateFormat.parse("04/17/2018"));

List<HccsCd> hccsCdList = new ArrayList<>();
hccsCdList.add(hccsCd1);

CodeAndModifierResponse hccsCd = new CodeAndModifierResponse();
hccsCd.setCd(888l);
hccsCd.setStcCd("loincCdMod");
hccsCd.setStcCdDesc("loincCdMod_desc");
hccsCd.setFlag(false);
hccsCd.setStartDate("04/17/2018");
hccsCd.setEndDate("04/17/2018");

List<CodeAndModifierResponse> codeAndModifierResponsesList = new ArrayList<>();
codeAndModifierResponsesList.add(hccsCd);

when(hccsCdRepository.findByisactiveInAndIsarchive(Matchers.anyList(), Matchers.eq('N')))
.thenReturn(hccsCdList);

// act (service)
List<CodeAndModifierResponse> response = (List<CodeAndModifierResponse>) codeAndModService
.getCodeAndModifier(url, codeActive);

assertEquals(1, response.size());
assertEquals("hccsCd", response.get(0).getStcCd());

}

@SuppressWarnings({ "unchecked", "unused" })
@Test(expected = GenericException.class)
public void testGetCodeAndModifier_fail() throws GenericException {

String url = "/api/v1/populate/apples";
List<String> codeActive = new ArrayList<>();
codeActive.add("Y");
codeActive.add("N");

List<CodeAndModifierResponse> response = (List<CodeAndModifierResponse>) codeAndModService
.getCodeAndModifier(url, codeActive);

}

@Test
public void test_checkSubmittedModificationsForDupes() {
// arrange (service)
CodeAndModifierRequest loinc = new CodeAndModifierRequest();
loinc.setStcCd("loinc");
List<CodeAndModifierRequest> loincList = new ArrayList<>();
loincList.add(loinc);

CodeAndModifierRequest loincMod = new CodeAndModifierRequest();
loincMod.setStcCd("loincMod");
List<CodeAndModifierRequest> loincModList = new ArrayList<>();
loincModList.add(loincMod);

CodeAndModifierRequest hccsCd = new CodeAndModifierRequest();
hccsCd.setStcCd("hccs");
List<CodeAndModifierRequest> hccList = new ArrayList<>();
hccList.add(hccsCd);

GenericRequest request = new GenericRequest();
request.setLoincList(loincList);
request.setHccList(hccList);
request.setLoincModList(loincModList);

// arrange(repository)
LoincCd _loincCd = new LoincCd();
_loincCd.setLoincId(999l);
_loincCd.setStcloincCd("loincCd");
_loincCd.setStcloincCdDesc("loincCd_desc");

LoincModCd _loincModCd = new LoincModCd();
_loincModCd.setLoincModId(999l);
_loincModCd.setStcloincCdMod("loincModCd");
_loincModCd.setStcloincCdMod("loincModCd_desc");

HccsCd _hccsCd = new HccsCd();
_hccsCd.setHccsId(999l);
_hccsCd.setStchccstatuscatCd("hccsCd");
_hccsCd.setStchccstatuscatCdDesc("hccsCd_desc");

when(loincCdRepository.findOneByStcloincCd(Matchers.any(String.class))).thenReturn(_loincCd);
when(loincModCdRepository.findOneByStcloincCdMod(Matchers.any(String.class))).thenReturn(_loincModCd);
when(hccsCdRepository.findOneByStchccstatuscatCd(Matchers.any(String.class))).thenReturn(_hccsCd);

// act (repository)
List<String> duplicateErrorList = codeAndModService.checkSubmittedModificationsForDupes(request);

assertEquals(3, duplicateErrorList.size());
assertEquals("Duplicate Found: loincMod of type LOINC Modifier Code ", duplicateErrorList.get(0));
assertEquals("Duplicate Found: loinc of type LOINC Code ", duplicateErrorList.get(1));
assertEquals("Duplicate Found: hccs of type HCCS Code ", duplicateErrorList.get(2));
}


@Test
public void testAddOrModifyCodeAndModifier_loinc_success() throws Exception {

CodeAndModifierRequest loinc = new CodeAndModifierRequest();
loinc.setCd(130l);
loinc.setStcCd("2018");
loinc.setStcCdDesc("loinc");
loinc.setFlag(false);
loinc.setStartDate("04/17/2018");
loinc.setEndDate("04/17/2018");
loinc.setLevel("claim");
loinc.setArchive(false);

List<CodeAndModifierRequest> loincList = new ArrayList<>();
loincList.add(loinc);

LoincCd loinc1 = new LoincCd();
loinc1.setLoincId(loinc.getCd());
loinc1.setIsactive('N');
loinc1.setStcloincCd(loinc.getStcCd());
loinc1.setStcloincCdDesc(loinc.getStcCdDesc());
loinc1.setDatecreated(dateFormat.parse("04/17/2018"));
loinc1.setDatemodified(dateFormat.parse(loinc.getEndDate()));
loinc1.setIsarchive('Y');

CodeAndModifierRequest loincMod = new CodeAndModifierRequest();
loincMod.setCd(1000l);
loincMod.setStcCd("2018");
loincMod.setStcCdDesc("loincMod");
loincMod.setFlag(true);
loincMod.setStartDate("04/17/2018");
loincMod.setEndDate("04/17/2018");
loincMod.setLevel("line");

List<CodeAndModifierRequest> loincModList = new ArrayList<>();
loincModList.add(loincMod);

LoincModCd loincModCd = new LoincModCd();
loincModCd.setLoincModId(loincMod.getCd());
loincModCd.setIsactive('N');
loincModCd.setStcloincCdMod(loincMod.getStcCd());
loincModCd.setStcloincCdModDesc(loincMod.getStcCdDesc());
loincModCd.setDatecreated(dateFormat.parse("04/17/2018"));
loincModCd.setDatemodified(dateFormat.parse(loincMod.getEndDate()));

CodeAndModifierRequest hccsCd = new CodeAndModifierRequest();
hccsCd.setCd(1000l);
hccsCd.setStcCd("2018");
hccsCd.setStcCdDesc("hccs");
hccsCd.setFlag(false);
hccsCd.setStartDate("04/17/2018");
hccsCd.setEndDate("04/17/2018");
hccsCd.setLevel("claim");

List<CodeAndModifierRequest> hccList = new ArrayList<>();
hccList.add(hccsCd);

HccsCd hccs = new HccsCd();
hccs.setHccsId(loincMod.getCd());
hccs.setIsactive('N');
hccs.setStchccstatuscatCd(loincMod.getStcCd());
hccs.setStchccstatuscatCdDesc(loincMod.getStcCdDesc());
hccs.setDatecreated(dateFormat.parse("04/17/2018"));
hccs.setDatemodified(dateFormat.parse(loincMod.getEndDate()));

GenericRequest codeAndModifierRequest = new GenericRequest();
codeAndModifierRequest.setHccList(hccList);
codeAndModifierRequest.setLoincList(loincList);
codeAndModifierRequest.setLoincModList(loincModList);

LoincTypeLookup loincTypeLookupClaim = new LoincTypeLookup();
loincTypeLookupClaim.setId(1);
loincTypeLookupClaim.setDescription("claim level");
loincTypeLookupClaim.setIdCd("claim");
// loincTypeLookup.setLoincCds(loincCds);

LoincTypeLookup loincTypeLookupLine = new LoincTypeLookup();
loincTypeLookupLine.setId(2);
loincTypeLookupLine.setDescription("line level");
loincTypeLookupLine.setIdCd("line");

LoincTypeLookup loincTypeLookupClmLine = new LoincTypeLookup();
loincTypeLookupClmLine.setId(3);
loincTypeLookupClmLine.setDescription("claim and line level");
loincTypeLookupClmLine.setIdCd("both");

List<LoincTypeLookup> loincTypeRepoResults = new ArrayList<>();
loincTypeRepoResults.add(loincTypeLookupClaim);
loincTypeRepoResults.add(loincTypeLookupLine);
loincTypeRepoResults.add(loincTypeLookupClmLine);

when(loincTypeLookupRepository.findAll()).thenReturn(loincTypeRepoResults);
when(loincCdRepository.findBystcloincCd(loinc.getStcCd())).thenReturn(loinc1);
when(loincCdRepository.save(Matchers.any(LoincCd.class))).thenReturn(loinc1);

when(loincModCdRepository.findBystcloincCdMod(loincMod.getStcCd())).thenReturn(loincModCd);
when(loincModCdRepository.save(Matchers.any(LoincModCd.class))).thenReturn(loincModCd);

// here
when(hccsCdRepository.findBystchccstatuscatCd(hccsCd.getStcCd())).thenReturn(hccs);
when(hccsCdRepository.save(Matchers.any(HccsCd.class))).thenReturn(hccs);

boolean addOrModifyCodeAndModifier = codeAndModService.addOrModifyCodeAndModifier(codeAndModifierRequest);
System.out.println(codeAndModifierRequest);
assertEquals(false, addOrModifyCodeAndModifier);
}

@Test
public void getArchivedCodes() throws Exception {

DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");

CodeAndModifierRequest loinc = new CodeAndModifierRequest();
loinc.setCd(130l);
loinc.setStcCd("2018");
loinc.setStcCdDesc("aaa");
loinc.setFlag(false);
loinc.setStartDate("04/17/2018");
loinc.setEndDate("04/17/2018");
loinc.setLevel("claim");
loinc.setArchive(true);

List<CodeAndModifierRequest> loincList = new ArrayList<>();
loincList.add(loinc);

LoincCd loinc1 = new LoincCd();
loinc1.setLoincId(loinc.getCd());
loinc1.setIsactive('N');
loinc1.setStcloincCd(loinc.getStcCd());
loinc1.setStcloincCdDesc(loinc.getStcCdDesc());
loinc1.setDatecreated(dateFormat.parse("04/17/2018"));
loinc1.setDatemodified(dateFormat.parse(loinc.getEndDate()));
loinc1.setIsarchive('Y');

CodeAndModifierRequest loincMod = new CodeAndModifierRequest();
loincMod.setCd(1000l);
loincMod.setStcCd("2018");
loincMod.setStcCdDesc("aaa");
loincMod.setFlag(false);
loincMod.setStartDate("04/17/2018");
loincMod.setEndDate("04/17/2018");
loincMod.setLevel("line");
loincMod.setArchive(true);

List<CodeAndModifierRequest> loincModList = new ArrayList<>();
loincModList.add(loincMod);

LoincModCd loincModCd = new LoincModCd();
loincModCd.setLoincModId(loincMod.getCd());
loincModCd.setIsactive('N');
loincModCd.setStcloincCdMod(loincMod.getStcCd());
loincModCd.setStcloincCdModDesc(loincMod.getStcCdDesc());
loincModCd.setDatecreated(dateFormat.parse("04/17/2018"));
loincModCd.setDatemodified(dateFormat.parse(loincMod.getEndDate()));
loincModCd.setIsarchive('Y');

CodeAndModifierRequest hccsCd = new CodeAndModifierRequest();
hccsCd.setCd(1000l);
hccsCd.setStcCd("2018");
hccsCd.setStcCdDesc("aaa");
hccsCd.setFlag(false);
hccsCd.setStartDate("04/17/2018");
hccsCd.setEndDate("04/17/2018");
hccsCd.setLevel("claim");
hccsCd.setArchive(true);

List<CodeAndModifierRequest> hccList = new ArrayList<>();
hccList.add(hccsCd);

HccsCd hccs = new HccsCd();
hccs.setHccsId(hccsCd.getCd());
hccs.setIsactive('N');
hccs.setStchccstatuscatCd(hccsCd.getStcCd());
hccs.setStchccstatuscatCdDesc(hccsCd.getStcCdDesc());
hccs.setDatecreated(dateFormat.parse("04/17/2018"));
hccs.setDatemodified(dateFormat.parse(hccsCd.getEndDate()));
hccs.setIsarchive('Y');

GenericRequest codeAndModifierRequest = new GenericRequest();
codeAndModifierRequest.setHccList(hccList);
codeAndModifierRequest.setLoincList(loincList);
codeAndModifierRequest.setLoincModList(loincModList);

List<String> errorListLoinc = new LinkedList<>();
errorListLoinc.add(String.format("Duplicate Found: %s of type %s ", loinc.getStcCd(), "LOINC Modifier Code"));
errorListLoinc.add(String.format("Duplicate Found: %s of type %s ", loinc.getStcCd(), "LOINC Code"));
errorListLoinc.add(String.format("Duplicate Found: %s of type %s ", loinc.getStcCd(), "HCCS Code"));

List<String> returnList = new LinkedList<>();
returnList.addAll(errorListLoinc);

when(hccsCdRepository.findOneByStchccstatuscatCd(hccsCd.getStcCd())).thenReturn(hccs);
when(loincCdRepository.findOneByStcloincCd(loinc.getStcCd())).thenReturn(loinc1);
when(loincModCdRepository.findOneByStcloincCdMod(loincMod.getStcCd())).thenReturn(loincModCd);

List<String> archivedCodes = codeAndModService.getArchivedCodes(codeAndModifierRequest);
assertEquals(errorListLoinc, archivedCodes);
}
}