com.pepaproch.gtswsdlclient.AddresCheckImplTest.java Source code

Java tutorial

Introduction

Here is the source code for com.pepaproch.gtswsdlclient.AddresCheckImplTest.java

Source

/*
 * 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();

    }

}