com.jaspersoft.android.jaspermobile.webview.intercept.okhttp.OkHttpWebResourceInterceptorTest.java Source code

Java tutorial

Introduction

Here is the source code for com.jaspersoft.android.jaspermobile.webview.intercept.okhttp.OkHttpWebResourceInterceptorTest.java

Source

/*
 * Copyright  2016 TIBCO Software,Inc.All rights reserved.
 * http://community.jaspersoft.com/project/jaspermobile-android
 *
 * Unless you have purchased a commercial license agreement from TIBCO Jaspersoft,
 * the following license terms apply:
 *
 * This program is part of TIBCO Jaspersoft Mobile for Android.
 *
 * TIBCO Jaspersoft Mobile is free software:you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation,either version 3of the License,or
 * (at your option)any later version.
 *
 * TIBCO Jaspersoft Mobile is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY;without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with TIBCO Jaspersoft Mobile for Android.If not,see
 * <http://www.gnu.org/licenses/lgpl>.
 */

package com.jaspersoft.android.jaspermobile.webview.intercept.okhttp;

import android.webkit.WebView;

import com.jaspersoft.android.jaspermobile.webview.WebRequest;
import com.jaspersoft.android.jaspermobile.webview.WebResponse;
import com.jaspersoft.android.jaspermobile.webview.intercept.WebResourceInterceptor;
import com.squareup.okhttp.Call;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Protocol;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.Response;

import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;

import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.Is.is;
import static org.hamcrest.core.IsNull.notNullValue;
import static org.hamcrest.core.IsNull.nullValue;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyZeroInteractions;
import static org.mockito.Mockito.when;

/**
 * @author Tom Koptel
 * @since 2.5
 */
public class OkHttpWebResourceInterceptorTest {
    private static final String ANY_URL = "http://localhost";

    @Mock
    OkHttpClient okClient;
    @Mock
    Call okCall;
    Request okRequest;
    Response okResponse;

    @Mock
    OkRequestMapper okRequestMapper;
    @Mock
    OkResponseMapper okResponseMapper;
    @Mock
    WebRequest webRequest;
    @Mock
    WebResponse webResponse;

    @Mock
    WebResourceInterceptor.Rule rule;

    @Mock
    WebView webView;

    private OkHttpWebResourceInterceptor interceptor = new OkHttpWebResourceInterceptor();
    private WebResponse mappedResonse;

    @Before
    public void setUp() throws Exception {
        MockitoAnnotations.initMocks(this);
    }

    @Test
    public void should_intercept_request_for_positive_assertion_of_rule() throws Exception {
        givenOkHttpClient();
        givenHappyCaseOkRequestMapper();
        givenOkResponseMapper();
        givenPositiveInterceptRule();
        givenOkWebResourceInterceptor();

        whenInterceptsRequest();

        assertThat(mappedResonse, is(notNullValue()));

        verify(rule).shouldIntercept(webRequest);
        verify(okRequestMapper).toOkHttpRequest(webRequest);
        verify(okClient).newCall(okRequest);
        verify(okCall).execute();
        verify(okResponseMapper).toWebViewResponse(okResponse);
    }

    @Test
    public void should_not_intercept_request_for_negative_assertion_of_rule() throws Exception {
        givenOkHttpClient();
        givenHappyCaseOkRequestMapper();
        givenOkResponseMapper();
        givenNegativeInterceptRule();
        givenOkWebResourceInterceptor();

        whenInterceptsRequest();

        assertThat(mappedResonse, is(nullValue()));

        verify(rule).shouldIntercept(webRequest);
        verifyZeroInteractions(okRequestMapper);
        verifyZeroInteractions(okClient);
        verifyZeroInteractions(okCall);
        verifyZeroInteractions(okResponseMapper);
    }

    @Test
    public void should_not_intercept_request_if_resource_request_mapping_failed() throws Exception {
        givenOkHttpClient();
        givenNullCaseOkRequestMapper();
        givenOkResponseMapper();
        givenPositiveInterceptRule();
        givenOkWebResourceInterceptor();

        whenInterceptsRequest();

        assertThat(mappedResonse, is(nullValue()));

        verify(rule).shouldIntercept(webRequest);
        verify(okRequestMapper).toOkHttpRequest(webRequest);
        verifyZeroInteractions(okClient);
        verifyZeroInteractions(okCall);
        verifyZeroInteractions(okResponseMapper);
    }

    private void whenInterceptsRequest() {
        mappedResonse = interceptor.interceptRequest(webView, webRequest);
    }

    private void givenOkHttpClient() throws Exception {
        okRequest = new Request.Builder().url(ANY_URL).build();
        okResponse = new Response.Builder().protocol(Protocol.HTTP_1_1).request(okRequest).code(200).build();
        when(okCall.execute()).thenReturn(okResponse);
        when(okClient.newCall(any(Request.class))).thenReturn(okCall);
    }

    private void givenPositiveInterceptRule() {
        when(rule.shouldIntercept(any(WebRequest.class))).thenReturn(true);
    }

    private void givenNegativeInterceptRule() {
        when(rule.shouldIntercept(any(WebRequest.class))).thenReturn(false);
    }

    private void givenOkWebResourceInterceptor() throws Exception {
        interceptor = new OkHttpWebResourceInterceptor.Builder().withClient(okClient).registerRule(rule)
                .withRequestMapper(okRequestMapper).withResponseMapper(okResponseMapper).build();
    }

    private void givenNullCaseOkRequestMapper() {
        when(okRequestMapper.toOkHttpRequest(any(WebRequest.class))).thenReturn(null);
    }

    private void givenHappyCaseOkRequestMapper() {
        when(okRequestMapper.toOkHttpRequest(any(WebRequest.class))).thenReturn(okRequest);
    }

    private void givenOkResponseMapper() {
        when(okResponseMapper.toWebViewResponse(any(Response.class))).thenReturn(webResponse);
    }
}