/* * SoapUI, Copyright (C) 2004-2016 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.filters; import com.eviware.soapui.impl.settings.XmlBeansSettingsImpl; import com.eviware.soapui.impl.support.AbstractHttpRequest; import com.eviware.soapui.impl.support.http.HttpRequest; import com.eviware.soapui.impl.wsdl.submit.transports.http.BaseHttpRequestTransport; import com.eviware.soapui.model.iface.SubmitContext; import com.eviware.soapui.settings.HttpSettings; import org.apache.http.client.methods.HttpRequestBase; import org.hamcrest.core.Is; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.mockito.ArgumentCaptor; import org.mockito.Mockito; import java.net.URI; import java.net.URISyntaxException; public class EndpointRequestFilterTest { EndpointRequestFilter endpointRequestFilter; @Before public void setUp() { endpointRequestFilter = new EndpointRequestFilter(); } @Test public void doesNotDoubleEncodeAlreadyEncodedUri() throws URISyntaxException { String encodedUri = "http://user:password@google.se/search?q=%3F"; HttpRequestBase httpMethod = Mockito.mock(HttpRequestBase.class); SubmitContext context = mockContext(httpMethod); AbstractHttpRequest<?> request = mockRequest(encodedUri, mockSettings()); endpointRequestFilter.filterAbstractHttpRequest(context, request); ArgumentCaptor<URI> httpMethodUri = ArgumentCaptor.forClass(URI.class); Mockito.verify(httpMethod).setURI(httpMethodUri.capture()); Assert.assertThat(httpMethodUri.getValue(), Is.is(new URI(encodedUri))); } private SubmitContext mockContext(HttpRequestBase httpMethod) { SubmitContext context = Mockito.mock(SubmitContext.class); Mockito.when(context.getProperty(BaseHttpRequestTransport.HTTP_METHOD)).thenReturn(httpMethod); return context; } private AbstractHttpRequest<?> mockRequest(String encodedUri, XmlBeansSettingsImpl settings) { AbstractHttpRequest<?> request = Mockito.mock(HttpRequest.class); Mockito.when(request.getEndpoint()).thenReturn(encodedUri); Mockito.when(request.getSettings()).thenReturn(settings); return request; } private XmlBeansSettingsImpl mockSettings() { XmlBeansSettingsImpl settings = Mockito.mock(XmlBeansSettingsImpl.class); Mockito.when(settings.getBoolean(HttpSettings.ENCODED_URLS)).thenReturn(true); return settings; } }