Package com.eviware.soapui.impl.wsdl.submit.transports.http

Source Code of com.eviware.soapui.impl.wsdl.submit.transports.http.HttpClientRequestTransportTest$StubbedSubmitContext

/*
* Copyright 2004-2014 SmartBear Software
*
* Licensed under the EUPL, Version 1.1 or - as soon as they will be approved by the European Commission - subsequent
* versions of the EUPL (the "Licence");
* You may not use this work except in compliance with the Licence.
* You may obtain a copy of the Licence at:
*
* http://ec.europa.eu/idabc/eupl
*
* Unless required by applicable law or agreed to in writing, software distributed under the Licence is
* distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the Licence for the specific language governing permissions and limitations
* under the Licence.
*/
package com.eviware.soapui.impl.wsdl.submit.transports.http;

import com.eviware.soapui.impl.settings.XmlBeansSettingsImpl;
import com.eviware.soapui.impl.support.AbstractHttpRequest;
import com.eviware.soapui.impl.wsdl.submit.RequestFilter;
import com.eviware.soapui.impl.wsdl.support.http.HttpClientSupport;
import com.eviware.soapui.model.iface.Request;
import com.eviware.soapui.model.iface.Response;
import com.eviware.soapui.model.iface.SubmitContext;
import com.eviware.soapui.model.support.AbstractSubmitContext;
import com.eviware.soapui.support.types.StringToStringsMap;
import org.apache.http.Header;
import org.apache.http.HttpResponse;
import org.apache.http.StatusLine;
import org.apache.http.client.HttpClient;
import org.apache.http.protocol.HttpContext;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

import static org.hamcrest.CoreMatchers.notNullValue;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

/**
* Unit tests for the HttpClientRequestTransport class.
*/
public class HttpClientRequestTransportTest {

    private HttpClientRequestTransport httpTransport;
    private ExtendedHttpMethod methodExecuted;
    private HttpContext contextUsed;

    @Before
    public void setUp() {
        httpTransport = new TestableHttpClientRequestTransport();
        httpTransport.addRequestFilter(new StubbedRequestSetupFilter());
        methodExecuted = null;
        contextUsed = null;
    }

    @Test
    public void processesRequestCorrectly() throws Exception {
        StringToStringsMap emptyHeaders = new StringToStringsMap();
        AbstractHttpRequest request = prepareRequestWithHeaders(emptyHeaders);
        SubmitContext submitContext = new StubbedSubmitContext(request);

        httpTransport.sendRequest(submitContext, request);
        assertThat(methodExecuted, is(notNullValue()));
        assertThat(contextUsed, is(notNullValue()));
    }

    @Test
    public void expandsPropertiesInHeaderName() throws Exception {
        StringToStringsMap headers = new StringToStringsMap();
        String headerValue = "The value";
        headers.add("Header-for-${request}", headerValue);
        AbstractHttpRequest request = prepareRequestWithHeaders(headers);
        SubmitContext submitContext = new StubbedSubmitContext(request);
        String requestName = "Fin-fin request";
        submitContext.setProperty("request", requestName);

        httpTransport.sendRequest(submitContext, request);
        String expectedHeaderName = "Header-for-" + requestName;
        Header[] modifiedHeaders = methodExecuted.getHeaders(expectedHeaderName);
        assertThat(modifiedHeaders.length, is(1));
        assertThat(modifiedHeaders[0].getName(), is(expectedHeaderName));
        assertThat(modifiedHeaders[0].getValue(), is(headerValue));
    }

    private AbstractHttpRequest prepareRequestWithHeaders(StringToStringsMap headers) {
        AbstractHttpRequest request = mock(AbstractHttpRequest.class);
        when(request.getRequestHeaders()).thenReturn(headers);
        XmlBeansSettingsImpl emptySettings = mock(XmlBeansSettingsImpl.class);
        when(request.getSettings()).thenReturn(emptySettings);
        return request;
    }

    private class TestableHttpClientRequestTransport extends HttpClientRequestTransport {
        @Override
        protected HttpClientSupport.SoapUIHttpClient getSoapUIHttpClient() {
            return mock(HttpClientSupport.SoapUIHttpClient.class);
        }

        @Override
        protected int getDefaultHttpPort(ExtendedHttpMethod httpMethod, HttpClient httpClient) {
            return 80;
        }

        @Override
        protected HttpResponse submitRequest(ExtendedHttpMethod httpMethod, HttpContext httpContext) throws IOException {
            methodExecuted = httpMethod;
            contextUsed = httpContext;
            return makeSuccessfulResponse();
        }

        private HttpResponse makeSuccessfulResponse() {
            HttpResponse mockResponse = mock(HttpResponse.class);
            StatusLine mockedStatusLine = mock(StatusLine.class);
            when(mockResponse.getStatusLine()).thenReturn(mockedStatusLine);
            when(mockedStatusLine.getStatusCode()).thenReturn(200);
            return mockResponse;
        }
    }

    private class StubbedRequestSetupFilter implements RequestFilter {
        @Override
        public void filterRequest(SubmitContext context, Request request) {
            ExtendedHttpMethod httpMethod = (ExtendedHttpMethod) context.getProperty(BaseHttpRequestTransport.HTTP_METHOD);
            try {
                httpMethod.setURI(new URI("/index.html"));
            } catch (URISyntaxException e) {
                throw new Error(e);
            }
        }

        @Override
        public void afterRequest(SubmitContext context, Request request) {
        }

        @Override
        public void afterRequest(SubmitContext context, Response response) {
        }
    }


    private class StubbedSubmitContext extends AbstractSubmitContext<Request> {

        public StubbedSubmitContext(Request modelItem) {
            super(modelItem);
        }

        @Override
        public Object getProperty(String name) {
            return getProperty(name, null, null);
        }

    }
}
TOP

Related Classes of com.eviware.soapui.impl.wsdl.submit.transports.http.HttpClientRequestTransportTest$StubbedSubmitContext

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.