package gov.samhsa.acs.documentsegmentation.valueset; import static org.junit.Assert.assertEquals; import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.eq; import static org.mockito.Matchers.isA; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import gov.samhsa.acs.documentsegmentation.valueset.dto.CodeAndCodeSystemSetDto; import gov.samhsa.acs.documentsegmentation.valueset.dto.ValueSetQueryDto; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; 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.Spy; import org.mockito.runners.MockitoJUnitRunner; import org.springframework.test.util.ReflectionTestUtils; import org.springframework.web.client.RestTemplate; @RunWith(MockitoJUnitRunner.class) public class ValueSetServiceImplTest { private final String ENDPOINT_ADDRESS_MOCK = "ENDPOINT_ADDRESS_MOCK"; private final String CODE_MOCK = "CODE_MOCK"; private final String CODE_SYSTEM_MOCK = "CODE_SYSTEM_MOCK"; private final String EXPECTED_REST_URL = "ENDPOINT_ADDRESS_MOCK?code={code}&codeSystemOid={codeSystemOid}"; private final String EXPECTED_REST_LIST_URL = "ENDPOINT_ADDRESS_MOCK/rest"; @Mock private RestTemplate restTemplateMock; @InjectMocks @Spy private ValueSetServiceImpl sut; @Before public void setUp() throws Exception { when(sut.configureRestTemplate()).thenReturn(restTemplateMock); ReflectionTestUtils.setField(sut, "endpointAddress", ENDPOINT_ADDRESS_MOCK); } @SuppressWarnings("unchecked") @Test public void testLookupValueSetCategories() { // Arrange ValueSetQueryDto queryMock = mock(ValueSetQueryDto.class); @SuppressWarnings("rawtypes") Set valueSetCategorySetMock = mock(Set.class); when( restTemplateMock.getForObject(eq(EXPECTED_REST_URL), eq(ValueSetQueryDto.class), isA(Map.class))) .thenReturn(queryMock); when(queryMock.getVsCategoryCodes()) .thenReturn(valueSetCategorySetMock); // Act @SuppressWarnings("rawtypes") Set response = sut .lookupValueSetCategories(CODE_MOCK, CODE_SYSTEM_MOCK); // Assert assertEquals(valueSetCategorySetMock, response); } @SuppressWarnings("unchecked") @Test public void testLookupValuesetCategoriesOfMultipleCodeAndCodeSystemSet() { // Setup request dtos List<CodeAndCodeSystemSetDto> codeAndCodeSystemSetDtoList = new ArrayList<CodeAndCodeSystemSetDto>(); CodeAndCodeSystemSetDto codeAndCodeSystemSetDto1 = mock(CodeAndCodeSystemSetDto.class); CodeAndCodeSystemSetDto codeAndCodeSystemSetDto2 = mock(CodeAndCodeSystemSetDto.class); codeAndCodeSystemSetDtoList.add(codeAndCodeSystemSetDto1); codeAndCodeSystemSetDtoList.add(codeAndCodeSystemSetDto2); // Stub restTemplate method Collection<Map<String, Object>> response = new ArrayList<Map<String, Object>>(); Map<String, Object> responseMap = new HashMap<String, Object>(); responseMap.put("key1", "value1"); response.add(responseMap); doReturn(response).when(restTemplateMock).getForObject(anyString(), eq(List.class)); sut.lookupValuesetCategoriesOfMultipleCodeAndCodeSystemSet(codeAndCodeSystemSetDtoList); verify(restTemplateMock, times(1)).getForObject(anyString(), eq(List.class)); } /* * @SuppressWarnings("unchecked") * * @Test public void testRestfulValueSetCategories() { // Arrange * ValueSetQueryListDto queryMock = mock(ValueSetQueryListDto.class); * * @SuppressWarnings("rawtypes") Set<ValueSetQueryDto> * valueSetCategorySetMock = mock(Set.class); * * when( * restTemplateMock.postForObject(eq(EXPECTED_REST_LIST_URL),queryMock, * eq(ValueSetQueryListDto.class), isA(ValueSetQueryListDto.class))) * .thenReturn(queryMock); when(queryMock.getValueSetQueryDtos()) * .thenReturn(valueSetCategorySetMock); * * // Act * * @SuppressWarnings("rawtypes") Set response = sut * .lookupValueSetCategories(CODE_MOCK, CODE_SYSTEM_MOCK); * * // Assert assertEquals(valueSetCategorySetMock, response); } */ }