package gov.samhsa.consent2share.web.controller;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.anyLong;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.redirectedUrl;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.view;
import gov.samhsa.consent2share.common.AuthenticatedUser;
import gov.samhsa.consent2share.common.UserContext;
import gov.samhsa.consent2share.infrastructure.security.AccessReferenceMapper;
import gov.samhsa.consent2share.service.dto.IndividualProviderDto;
import gov.samhsa.consent2share.service.dto.OrganizationalProviderDto;
import gov.samhsa.consent2share.service.dto.PatientConnectionDto;
import gov.samhsa.consent2share.service.dto.PatientProfileDto;
import gov.samhsa.consent2share.service.notification.NotificationService;
import gov.samhsa.consent2share.service.patient.PatientLegalRepresentativeAssociationService;
import gov.samhsa.consent2share.service.patient.PatientService;
import gov.samhsa.consent2share.service.provider.HashMapResultToProviderDtoConverter;
import gov.samhsa.consent2share.service.provider.IndividualProviderService;
import gov.samhsa.consent2share.service.provider.OrganizationalProviderService;
import gov.samhsa.consent2share.service.provider.ProviderSearchLookupService;
import gov.samhsa.consent2share.service.reference.AdministrativeGenderCodeService;
import gov.samhsa.consent2share.service.reference.LanguageCodeService;
import gov.samhsa.consent2share.service.reference.LegalRepresentativeTypeCodeService;
import gov.samhsa.consent2share.service.reference.MaritalStatusCodeService;
import gov.samhsa.consent2share.service.reference.RaceCodeService;
import gov.samhsa.consent2share.service.reference.ReligiousAffiliationCodeService;
import gov.samhsa.consent2share.service.reference.StateCodeService;
import gov.samhsa.consent2share.service.validator.FieldValidator;
import gov.samhsa.consent2share.web.controller.ProviderController;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.owasp.esapi.errors.AccessControlException;
import org.springframework.context.MessageSource;
import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
@RunWith(MockitoJUnitRunner.class)
public class ProviderControllerTest {
@InjectMocks
ProviderController providerController = new ProviderController();
@Mock
PatientService patientService;
@Mock
IndividualProviderService individualProviderService;
@Mock
OrganizationalProviderService organizationalProviderService;
@Mock
AdministrativeGenderCodeService administrativeGenderCodeService;
@Mock
LanguageCodeService languageCodeService;
@Mock
MaritalStatusCodeService maritalStatusCodeService;
@Mock
RaceCodeService raceCodeService;
@Mock
NotificationService notificationService;
@Mock
ReligiousAffiliationCodeService religiousAffiliationCodeService;
@Mock
StateCodeService stateCodeService;
@Mock
LegalRepresentativeTypeCodeService legalRepresentativeTypeCodeService;
@Mock
PatientLegalRepresentativeAssociationService patientLegalRepresentativeAssociationService;
@Mock
ProviderSearchLookupService providerSearchLookupService;
@Mock
UserContext userContext;
@Mock
private FieldValidator fieldValidator;
@Mock
private MessageSource messageProperties;
@Mock
AuthenticatedUser authenticatedUser;
@Mock
HashMap<String, String> Result;
@Mock
HashMapResultToProviderDtoConverter hashMapResultToProviderDtoConverter;
@Mock
AccessReferenceMapper accessReferenceMapper;
MockMvc mockMvc;
@Before
public void before() throws AccessControlException {
mockMvc = MockMvcBuilders.standaloneSetup(this.providerController)
.build();
doReturn((long) 1).when(accessReferenceMapper).getDirectReference(
"ScrambledText");
PatientConnectionDto patientConnectionDto = mock(PatientConnectionDto.class);
Set<IndividualProviderDto> individualProviders = new HashSet<IndividualProviderDto>();
Set<OrganizationalProviderDto> organizationalProviders = new HashSet<OrganizationalProviderDto>();
for (int i = 0; i < 3; i++) {
individualProviders.add(mock(IndividualProviderDto.class));
organizationalProviders.add(mock(OrganizationalProviderDto.class));
}
when(userContext.getCurrentUser()).thenReturn(authenticatedUser);
when(authenticatedUser.getUsername()).thenReturn("albert.smith");
when(patientService.findPatientConnectionByUsername(anyString()))
.thenReturn(patientConnectionDto);
when(patientConnectionDto.getIndividualProviders()).thenReturn(
individualProviders);
when(patientConnectionDto.getOrganizationalProviders()).thenReturn(
organizationalProviders);
}
@Test
public void testConnectionMain() throws Exception {
mockMvc.perform(get("/patients/connectionMain.html")).andExpect(
view().name("views/patients/connectionMain"));
}
@Test
public void testAjaxProviderSearch_Checked_Status_Is_OK() throws Exception {
when(
providerSearchLookupService.isValidatedSearch(anyString(),
anyString(), anyString(), anyString(), anyString(),
anyString(), anyString(), anyString(), anyString()))
.thenReturn(true);
when(
providerSearchLookupService.providerSearch(anyString(),
anyString(), anyString(), anyString(), anyString(),
anyString(), anyString(), anyString(), anyInt()))
.thenReturn("artifitial JSON");
mockMvc.perform(
get("/patients/providerSearch.html").param("pageNumber", "0"))
.andExpect(status().isOk())
.andExpect(content().contentType(MediaType.APPLICATION_JSON));
}
@Test
public void testDeleteIndividualProvider() throws Exception {
IndividualProviderDto individualProviderDto = mock(IndividualProviderDto.class);
when(individualProviderService.findIndividualProviderDto(anyLong()))
.thenReturn(individualProviderDto);
mockMvc.perform(
post("/patients/connectionMain/deleteOrganizationalProvider")
.param("organizationalProviderid", "ScrambledText"))
.andExpect(redirectedUrl("/patients/connectionMain.html"));
}
@Test
public void testDeleteOrganizationalProvider() throws Exception {
OrganizationalProviderDto organizationalProviderDto = mock(OrganizationalProviderDto.class);
when(
organizationalProviderService
.findOrganizationalProviderDto(anyLong())).thenReturn(
organizationalProviderDto);
mockMvc.perform(
post("/patients/connectionMain/deleteOrganizationalProvider")
.param("organizationalProviderid", "ScrambledText"))
.andExpect(redirectedUrl("/patients/connectionMain.html"));
}
@Test
public void testProviderSearchModel() throws Exception {
PatientProfileDto patientProfileDto = mock(PatientProfileDto.class);
when(patientService.findPatientProfileByUsername(anyString()))
.thenReturn(patientProfileDto);
mockMvc.perform(get("/patients/connectionProviderAdd.html")).andExpect(
view().name("views/patients/connectionProviderAdd"));
}
@Test
public void testProviderSearchString() throws Exception {
when(Result.get("entityType")).thenReturn("entityTypeValue");
when(Result.get("providerOrganizationName")).thenReturn(
"providerOrganizationNameValue");
when(Result.get("authorizedOfficialLastName")).thenReturn(
"authorizedOfficialLastNameValue");
when(Result.get("authorizedOfficialLastName")).thenReturn(
"authorizedOfficialLastNameValue");
when(Result.get("authorizedOfficialTitleorPosition")).thenReturn(
"authorizedOfficialTitleorPositionValue");
when(Result.get("authorizedOfficialNamePrefixText")).thenReturn(
"authorizedOfficialNamePrefixTextValue");
when(Result.get("authorizedOfficialTelephoneNumber")).thenReturn(
"authorizedOfficialTelephoneNumberValue");
when(providerSearchLookupService.providerSearchByNpi(anyString()))
.thenReturn(
"{\"npi\":\"1114252178\",\"entityType\":\"Individual\",\"replacementNpi\":\"\",\"employerIdentificationNumber\":\"\",\"isSoleProprietor\":false,\"isOrganizationSubpart\":false,\"parentOrganizationLbn\":\"\",\"parentOrganizationTin\":\"\",\"providerOrganizationName\":\"\",\"providerLastName\":\"MORGAN\",\"providerFirstName\":\"TERRENCE\",\"providerMiddleName\":\"\",\"providerNamePrefixText\":\"MR.\",\"providerNameSuffixText\":\"\",\"providerCredentialText\":\"LGSW, CSC-AD\",\"providerFirstLineBusinessMailingAddress\":\"9100 FRANKLIN SQUARE DR\",\"providerSecondLineBusinessMailingAddress\":\"\",\"providerBusinessMailingAddressCityName\":\"BALTIMORE\",\"providerBusinessMailingAddressStateName\":\"MD\",\"providerBusinessMailingAddressPostalCode\":\"212373903\",\"providerBusinessMailingAddressCountryCode\":\"US\",\"providerBusinessMailingAddressTelephoneNumber\":\"4108876465\",\"providerBusinessMailingAddressFaxNumber\":\"4106876005\",\"providerFirstLineBusinessPracticeLocationAddress\":\"9100 FRANKLIN SQUARE DR\",\"providerSecondLineBusinessPracticeLocationAddress\":\"\",\"providerBusinessPracticeLocationAddressCityName\":\"BALTIMORE\",\"providerBusinessPracticeLocationAddressStateName\":\"MD\",\"providerBusinessPracticeLocationAddressPostalCode\":\"212373903\",\"providerBusinessPracticeLocationAddressCountryCode\":\"US\",\"providerBusinessPracticeLocationAddressTelephoneNumber\":\"4108876465\",\"providerBusinessPracticeLocationAddressFaxNumber\":\"4106876005\",\"providerEnumerationDate\":\"10/08/2009\",\"lastUpdateDate\":\"10/08/2009\",\"npideactivationReasonCode\":\"\",\"npideactivationReason\":\"\",\"npideactivationDate\":\"\",\"npireactivationDate\":\"\",\"providerGenderCode\":\"M\",\"providerGender\":\"Male\",\"authorizedOfficialLastName\":\"\",\"authorizedOfficialFirstName\":\"\",\"authorizedOfficialMiddleName\":\"\",\"authorizedOfficialTitleorPosition\":\"\",\"authorizedOfficialNamePrefixText\":\"\",\"authorizedOfficialNameSuffixText\":\"\",\"authorizedOfficialCredentialText\":\"\",\"authorizedOfficialTelephoneNumber\":\"\",\"healthcareProviderTaxonomyCode_1\":\"101YM0800X\",\"providerLicenseNumber_1\":\"14742\",\"providerLicenseNumberStateCode_1\":\"MD\",\"healthcareProviderTaxonomy_1\":\"Mental Health\"}");
mockMvc.perform(
post("/patients/connectionProviderAdd.html").param("npi",
"1234567890")).andExpect(
redirectedUrl("/patients/connectionMain.html"));
}
}