/*
* 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.rest;
import com.eviware.soapui.config.CredentialsConfig;
import com.eviware.soapui.config.RestRequestConfig;
import com.eviware.soapui.config.StringListConfig;
import com.eviware.soapui.impl.rest.actions.support.NewRestResourceActionBase;
import com.eviware.soapui.impl.rest.support.RestParamProperty;
import com.eviware.soapui.impl.support.AbstractHttpRequest;
import com.eviware.soapui.impl.wsdl.WsdlProject;
import com.eviware.soapui.utils.ModelItemFactory;
import org.junit.Before;
import org.junit.Test;
import java.io.File;
import static com.eviware.soapui.utils.ModelItemMatchers.hasARestParameterNamed;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.notNullValue;
import static org.hamcrest.CoreMatchers.nullValue;
import static org.junit.Assert.assertThat;
import static org.junit.matchers.JUnitMatchers.hasItem;
/**
* Unit tests for RestRequest
*/
public class RestRequestTest {
private static final String PARAMETER_NAME = "paramName";
private static final String PARAMETER_VALUE = "paramValue";
private RestRequest request;
@Before
public void setUp() throws Exception {
request = new RestRequest(ModelItemFactory.makeRestMethod(), RestRequestConfig.Factory.newInstance(), false);
}
@Test
public void migratesAcceptValue() throws Exception {
RestRequestConfig requestConfig = RestRequestConfig.Factory.newInstance();
String contentType = "image/jpeg";
requestConfig.setAccept(contentType);
request = new RestRequest(ModelItemFactory.makeRestMethod(), requestConfig, false);
assertThat(request.getRequestHeaders().get(RestRequest.ACCEPT_HEADER_NAME), hasItem(contentType));
assertThat(requestConfig.getAccept(), is(nullValue()));
}
@Test
public void holdsAndReturnsParameters() {
addRequestParameter(PARAMETER_NAME, PARAMETER_VALUE);
assertThat(request, hasARestParameterNamed(PARAMETER_NAME).withValue(PARAMETER_VALUE));
}
@Test
public void retainsParameterValueWhenChangingItsLevel() {
RestParamProperty parameter = request.getParams().addProperty(PARAMETER_NAME);
parameter.setValue(PARAMETER_VALUE);
parameter.setParamLocation(NewRestResourceActionBase.ParamLocation.RESOURCE);
RestParamProperty returnedParameter = request.getParams().getProperty(PARAMETER_NAME);
returnedParameter.setParamLocation(NewRestResourceActionBase.ParamLocation.METHOD);
assertThat(request, hasARestParameterNamed(PARAMETER_NAME).withValue(PARAMETER_VALUE));
}
@Test
public void updatesConfigWhenParameterOrderIsModified() throws Exception {
addRequestParameter("someName", "someValue");
String lastParameterName = "otherName";
addRequestParameter(lastParameterName, "someOtherValue");
request.getParams().moveProperty(lastParameterName, 0);
StringListConfig parameterOrder = request.getConfig().getParameterOrder();
assertThat(parameterOrder, is(notNullValue()));
assertThat(parameterOrder.getEntryArray(0), is(lastParameterName));
}
@Test
public void selectedProfileIsNoAuthorizationWhenAuthTypeIsNotSet() {
assertThat(request.getSelectedAuthProfile(), is(CredentialsConfig.AuthType.NO_AUTHORIZATION.toString()));
}
@Test
public void selectedProfileIsAdded() {
assertThat(request.getSelectedAuthProfile(), is(CredentialsConfig.AuthType.NO_AUTHORIZATION.toString()));
}
/* Backward compatibility tests */
@Test
public void selectedProfileIsBasicWhenAuthTypeIsPreemptive() {
setAuthTypeAndSelectedProfile(CredentialsConfig.AuthType.PREEMPTIVE, null);
assertThat(request.getSelectedAuthProfile(), is(AbstractHttpRequest.BASIC_AUTH_PROFILE));
assertThat(request.getPreemptive(), is(true));
}
@Test
public void selectedProfileIsBasicWhenAuthTypeIsGlobalHttpSettings() {
setAuthTypeAndSelectedProfile(CredentialsConfig.AuthType.GLOBAL_HTTP_SETTINGS, null);
assertThat(request.getSelectedAuthProfile(), is(AbstractHttpRequest.BASIC_AUTH_PROFILE));
assertThat(request.getPreemptive(), is(false));
}
@Test
public void selectedProfileIsBasicWhenAuthTypeAndSelectedProfileArePreemptive() {
setAuthTypeAndSelectedProfile(CredentialsConfig.AuthType.PREEMPTIVE,
CredentialsConfig.AuthType.PREEMPTIVE.toString());
assertThat(request.getSelectedAuthProfile(), is(AbstractHttpRequest.BASIC_AUTH_PROFILE));
assertThat(request.getPreemptive(), is(true));
}
@Test
public void selectedProfileIsBasicWhenAuthTypeAndSelectedProfileAreGlobalHttpSettings() {
setAuthTypeAndSelectedProfile(CredentialsConfig.AuthType.GLOBAL_HTTP_SETTINGS,
CredentialsConfig.AuthType.GLOBAL_HTTP_SETTINGS.toString());
assertThat(request.getSelectedAuthProfile(), is(AbstractHttpRequest.BASIC_AUTH_PROFILE));
assertThat(request.getPreemptive(), is(false));
}
@Test
public void selectedProfileIsNTLMWhenAuthTypeIsNTLM() {
setAuthTypeAndSelectedProfile(CredentialsConfig.AuthType.NTLM, null);
assertThat(request.getSelectedAuthProfile(), is(CredentialsConfig.AuthType.NTLM.toString()));
}
@Test
public void selectedProfileIsSpnegoWhenAuthTypeIsSpnegoKerberos() {
setAuthTypeAndSelectedProfile(CredentialsConfig.AuthType.SPNEGO_KERBEROS, null);
assertThat(request.getSelectedAuthProfile(), is(CredentialsConfig.AuthType.SPNEGO_KERBEROS.toString()));
}
@Test
public void savesCarriageReturnInBodyCorrectly() throws Exception {
WsdlProject project = ModelItemFactory.makeWsdlProject();
RestService restService = (RestService) project.addNewInterface("RestService", RestServiceFactory.REST_TYPE);
RestResource restResource = restService.addNewResource("Root", "/resource");
RestMethod restMethod = restResource.addNewMethod("POST");
RestRequest restRequest = restMethod.addNewRequest("TestRequest");
String originalContent = "First line\r\nSecond \\rline";
restRequest.setRequestContent(originalContent);
File saveFile = File.createTempFile("soapui", "xml");
saveFile.deleteOnExit();
project.saveIn(saveFile);
WsdlProject loadedProject = new WsdlProject(saveFile.getAbsolutePath());
loadedProject.loadProject(saveFile.toURL());
RestRequest loadedRequest = (RestRequest) loadedProject.getInterfaceAt(0).getOperationAt(0).getRequestAt(0);
assertThat(loadedRequest.getRequestContent(), is(originalContent));
}
/* Backward compatibility tests end */
private RestParamProperty addRequestParameter(String name, String value) {
RestParamProperty parameter = request.getParams().addProperty(name);
parameter.setValue(value);
return parameter;
}
private void setAuthTypeAndSelectedProfile(CredentialsConfig.AuthType.Enum authType, String selectedProfile) {
if (selectedProfile != null) {
request.setSelectedAuthProfileAndAuthType(selectedProfile, authType);
} else {
request.getConfig().addNewCredentials();
request.getConfig().getCredentials().setAuthType(authType);
}
}
}