Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package com.pepaproch.gtswsdlclient; import com.pepaproch.gtswsdl.AuthHeaderInterceptor; import com.pepaproch.gtswsdl.client.RestContext; import com.pepaproch.gtswsdlclient.auth.AuthTokenProviderImpl; import com.pepaproch.gtswsdlclient.impl.AddresCheckImpl; import com.pepaproch.gtswsdlclient.model.gts.AddressQuery; import com.pepaproch.gtswsdlclient.model.gts.AddressResponse; import org.junit.AfterClass; import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; import org.springframework.http.HttpMethod; import org.springframework.http.MediaType; import org.springframework.http.client.ClientHttpRequestInterceptor; import org.springframework.test.web.client.MockRestServiceServer; import org.springframework.web.client.RestTemplate; import java.util.ArrayList; import java.util.List; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.when; import static org.springframework.test.web.client.match.MockRestRequestMatchers.method; import static org.springframework.test.web.client.match.MockRestRequestMatchers.requestTo; import static org.springframework.test.web.client.response.MockRestResponseCreators.withSuccess; /** * @author pepa */ public class AddresCheckImplTest extends TestBase { MockRestServiceServer mockServer; MockRestServiceServer mockServerAuthProvider; public AddresCheckImplTest() { } @AfterClass public static void tearDownClass() { } @Before public void setUp() { } /** * Test of checkAddres method, of class AddresCheckImpl. */ @Test public void testCheckAddres() { AddressQuery addrQuery = new AddressQuery(); RestTemplate restTemplate = getRestTemplate(); RestContext restContext = Mockito.mock(RestContext.class); when(restContext.getRestTemplate()).thenReturn(restTemplate); when(restContext.getBASE_URL()).thenReturn(BASE_URL); AddressResponse expResult = null; mockServer = MockRestServiceServer.createServer(restTemplate); this.mockServer.expect(requestTo(BASE_URL + AddresCheckImpl.ADDR_CHECK_PATH)) .andExpect(method(HttpMethod.GET)) .andRespond(withSuccess(CHECK_ADDR_RESPONSE_BODY, MediaType.APPLICATION_JSON)); AddresCheckImpl instance = new AddresCheckImpl(restContext); AddressResponse result = instance.checkAddres(addrQuery); Integer expectedTotal = new Integer(3); assertEquals(result.getTotal(), expectedTotal); } /** * Test of checkAddres method, of class AddresCheckImpl. */ @Test public void testCheckAddresAuthenticated() { System.out.println("checkAddres"); AddressQuery addrQuery = new AddressQuery(); RestTemplate restTemplate = getRestTemplate(); RestTemplate authRestTemplate = getRestTemplate(); AuthTokenProviderImpl authTokenProvider = new AuthTokenProviderImpl(BASE_URL, "test", "test", authRestTemplate, 1); AuthHeaderInterceptor securityTokenInterceptor = new AuthHeaderInterceptor(authTokenProvider); List<ClientHttpRequestInterceptor> interceptors = restTemplate.getInterceptors(); if (interceptors == null) { interceptors = new ArrayList<>(); restTemplate.setInterceptors(interceptors); } interceptors.add(securityTokenInterceptor); RestContext restContext = Mockito.mock(RestContext.class); when(restContext.getRestTemplate()).thenReturn(restTemplate); when(restContext.getBASE_URL()).thenReturn(BASE_URL); //first request AddressResponse expResult = null; mockServer = MockRestServiceServer.createServer(restTemplate); this.mockServer.expect(requestTo(BASE_URL + AddresCheckImpl.ADDR_CHECK_PATH)) .andExpect(method(HttpMethod.GET)) .andRespond(withSuccess(CHECK_ADDR_RESPONSE_BODY, MediaType.APPLICATION_JSON)); //auth token is not set so it will call remote for acces token mockServerAuthProvider = MockRestServiceServer.createServer(authRestTemplate); String authResponseBody = "{\"accessToken\" : \"testtoken\" }"; mockServerAuthProvider.expect(requestTo(BASE_URL + AUTH_PATH)).andExpect(method(HttpMethod.POST)) .andRespond(withSuccess(authResponseBody, MediaType.APPLICATION_JSON)); //token is set with no valid time so token should be renewed String authResponseBody1 = "{\"accessToken\" : \"testtoken-1\" }"; mockServerAuthProvider.expect(requestTo(BASE_URL + AUTH_PATH)).andExpect(method(HttpMethod.POST)) .andRespond(withSuccess(authResponseBody1, MediaType.APPLICATION_JSON)); //second call with no valid auth token this.mockServer.expect(requestTo(BASE_URL + AddresCheckImpl.ADDR_CHECK_PATH)) .andExpect(method(HttpMethod.GET)) .andRespond(withSuccess(CHECK_ADDR_RESPONSE_BODY, MediaType.APPLICATION_JSON)); AddresCheckImpl instance = new AddresCheckImpl(restContext); AddressResponse result = instance.checkAddres(addrQuery); String authToken1 = authTokenProvider.getAuthorisationToken().toString(); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } AddressResponse result1 = instance.checkAddres(addrQuery); String authToken2 = authTokenProvider.getAuthorisationToken().toString(); Integer expectedTotal = new Integer(3); assertEquals(result.getTotal(), expectedTotal); mockServer.verify(); mockServerAuthProvider.verify(); } }