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.controller;

import static org.hamcrest.Matchers.is;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyList;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

import java.nio.charset.Charset;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.mockito.runners.MockitoJUnitRunner;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectWriter;
import com.fasterxml.jackson.databind.SerializationFeature;

import gov.va.med.ars.constants.ErrorMessages;
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.request.JsonArrayModel;
import gov.va.med.ars.service.ICodeAndModifierService;
import gov.va.med.domain.ars.HccsCd;
import gov.va.med.domain.ars.LoincCd;
import gov.va.med.domain.ars.LoincModCd;

@RunWith(MockitoJUnitRunner.class)
public class CodeAndModifiersControllerTest {

DateFormat dateFormat = new SimpleDateFormat("MM/DD/YYYY");
private MockMvc mockMvc;
public static final MediaType APPLICATION_JSON_UTF8 = new MediaType(MediaType.APPLICATION_JSON.getType(),
MediaType.APPLICATION_JSON.getSubtype(), Charset.forName("utf8"));

@Mock
ICodeAndModifierService codeAndModService;

@InjectMocks
private CodeAndModifiersController codesAndModsController;

@Before
public void init() throws Exception {
MockitoAnnotations.initMocks(this);
mockMvc = MockMvcBuilders.standaloneSetup(codesAndModsController).build();
}

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

// arrange (request)
HttpServletRequest request = mock(HttpServletRequest.class);
when(request.getRequestURI()).thenReturn("/api/v1/populate/loinc");

List<String> codesToProcess = new ArrayList<>();
codesToProcess.add("Y");
JsonArrayModel acceptedValues = new JsonArrayModel(codesToProcess);

ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
mapper.configure(SerializationFeature.WRAP_ROOT_VALUE, false);
ObjectWriter ow = mapper.writer().withDefaultPrettyPrinter();
String requestBodyJson = ow.writeValueAsString(acceptedValues/*.getAcceptedValues()*/);

// arrange (response)
List<LoincCd> loincCodes = new ArrayList<>();
LoincCd lcd1 = new LoincCd();
lcd1.setLoincId(1l);
lcd1.setStcloincCd("999");
lcd1.setStcloincCdDesc("test loinc 1 description");
loincCodes.add(lcd1);

when(codeAndModService.getCodeAndModifier(any(String.class), anyList())).thenReturn(loincCodes);

mockMvc.perform(post("/api/v1/populate/loinc").contentType(MediaType.APPLICATION_JSON).content(requestBodyJson))
.andDo(print()).andExpect(status().isOk()).andExpect(jsonPath("$.[0].loincId", is(1)))
.andExpect(jsonPath("$.[0].stcloincCd", is("999")))
.andExpect(jsonPath("$.[0].stcloincCdDesc", is("test loinc 1 description")));

}

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

// arrange (service)
GenericException genericException = new GenericException(ErrorMessages.INVALID_REQUEST, "error",
HttpStatus.NOT_FOUND);

when(codeAndModService.getCodeAndModifier(any(String.class), anyList())).thenThrow(genericException);

// arrange (controller)
HttpServletRequest request = mock(HttpServletRequest.class);
when(request.getRequestURI()).thenReturn("/api/v1/populate/loinc");

List<String> codesToProcess = new ArrayList<>();
codesToProcess.add("Y");

JsonArrayModel acceptedValues = new JsonArrayModel(codesToProcess);

ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
mapper.configure(SerializationFeature.WRAP_ROOT_VALUE, false);
ObjectWriter ow = mapper.writer().withDefaultPrettyPrinter();
String requestBodyJson = ow.writeValueAsString(acceptedValues.getAcceptedValues());

// act & assert
mockMvc.perform(post("/api/v1/populate/loinc").contentType(MediaType.APPLICATION_JSON).content(requestBodyJson))
.andDo(print()).andExpect(status().is(400));

}

@Test
public void test_addOrModifyCodes() throws Exception {

// arrange (request)
HttpServletRequest request = mock(HttpServletRequest.class);
when(request.getRequestURI()).thenReturn("/api/v1/populate/add");

List<CodeAndModifierRequest> hccList = new ArrayList<>();
CodeAndModifierRequest codeAndModReq = new CodeAndModifierRequest();
codeAndModReq.setCd(1l);
codeAndModReq.setFlag(true);
codeAndModReq.setStcCd("hccs_1");
codeAndModReq.setStcCdDesc("hccs_1_desc");
hccList.add(codeAndModReq);

GenericRequest requestBody = new GenericRequest();
requestBody.setHccList(hccList);

ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
mapper.configure(SerializationFeature.WRAP_ROOT_VALUE, false);
ObjectWriter ow = mapper.writer().withDefaultPrettyPrinter();
String requestBodyJson = ow.writeValueAsString(requestBody);

// arrange (response)
List<String> dupCheck = new ArrayList<>();

when(codeAndModService.checkSubmittedModificationsForDupes(any(GenericRequest.class))).thenReturn(dupCheck);
when(codeAndModService.addOrModifyCodeAndModifier(any(GenericRequest.class))).thenReturn(true);

mockMvc.perform(post("/api/v1/populate/add").contentType(MediaType.APPLICATION_JSON).content(requestBodyJson))
.andDo(print()).andExpect(status().isOk()).andExpect(jsonPath("$.result", is(true)));

}
@Test
public void test_archiveCode() throws Exception
{
HttpServletRequest request = mock(HttpServletRequest.class);
when(request.getRequestURI()).thenReturn("/api/v1/populate/archive");
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);


ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
mapper.configure(SerializationFeature.WRAP_ROOT_VALUE, false);
ObjectWriter ow = mapper.writer().withDefaultPrettyPrinter();
String requestBodyJson = ow.writeValueAsString(codeAndModifierRequest);

mockMvc.perform(post("/api/v1/populate/archive").contentType(MediaType.APPLICATION_JSON).content(requestBodyJson))
.andDo(print()).andExpect(status().isOk());


}
}