/* * 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.support; import com.eviware.soapui.impl.rest.RestRequest; import com.eviware.soapui.impl.rest.RestRequestInterface; import com.eviware.soapui.utils.ModelItemFactory; import org.junit.Test; import static com.eviware.soapui.impl.rest.support.RestParamsPropertyHolder.ParameterStyle.MATRIX; import static com.eviware.soapui.impl.rest.support.RestParamsPropertyHolder.ParameterStyle.QUERY; import static com.eviware.soapui.impl.rest.support.RestParamsPropertyHolder.ParameterStyle.TEMPLATE; import static com.eviware.soapui.impl.rest.support.RestUtils.TemplateExtractionOption.EXTRACT_TEMPLATE_PARAMETERS; import static com.eviware.soapui.impl.rest.support.RestUtils.TemplateExtractionOption.IGNORE_TEMPLATE_PARAMETERS; import static com.eviware.soapui.utils.ModelItemFactory.makeRestRequest; import static org.hamcrest.core.Is.is; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; public class RestUtilsTest { @Test public void extractsTemplateParams() throws Exception { String path = "/{id}/test/{test}/test"; String[] params = RestUtils.extractTemplateParams(path); assertEquals(params.length, 2); assertEquals("id", params[0]); assertEquals("test", params[1]); } @Test public void extractsTemplateParameterFromCurlyBrackets() throws Exception { String path = "/{id}/42"; RestParamsPropertyHolder params = ModelItemFactory.makeRestRequest().getParams(); String extractedPath = RestUtils.extractParams(path, params, true, EXTRACT_TEMPLATE_PARAMETERS); assertThat(extractedPath, is(path)); assertEquals(params.getPropertyCount(), 1); RestParamProperty id = params.getProperty("id"); assertThat(id.getStyle(), is(TEMPLATE)); assertThat(id.getValue(), is("id")); } @Test public void extractsTemplateParameterFromInteger() throws Exception { String path = "/{id}/42"; RestParamsPropertyHolder params = ModelItemFactory.makeRestRequest().getParams(); String extractedPath = RestUtils.extractParams(path, params, true, IGNORE_TEMPLATE_PARAMETERS); assertThat(extractedPath, is("/{id}/42")); assertEquals(params.getPropertyCount(), 0); } @Test public void extractsEmbeddedTemplateParameters() throws Exception { String path = "/conversation/date-{date}/time-{time}?userId=1234"; RestParamsPropertyHolder params = ModelItemFactory.makeRestRequest().getParams(); String extractedPath = RestUtils.extractParams(path, params, true, EXTRACT_TEMPLATE_PARAMETERS); assertThat(extractedPath, is("/conversation/date-{date}/time-{time}")); assertThat(params.getProperty("date").getStyle(), is(TEMPLATE)); assertThat(params.getProperty("time").getStyle(), is(TEMPLATE)); } @Test public void extractsEmbeddedTemplateAndMatrixParameters() throws Exception { String path = "/{templateParam};matrixParam=matrixValue?queryParam=value"; RestParamsPropertyHolder params = ModelItemFactory.makeRestRequest().getParams(); String extractedPath = RestUtils.extractParams(path, params, true, EXTRACT_TEMPLATE_PARAMETERS); assertThat(extractedPath, is("/{templateParam}")); assertThat(params.getProperty("templateParam").getStyle(), is(TEMPLATE)); assertThat(params.getProperty("matrixParam").getStyle(), is(MATRIX)); assertThat(params.getProperty("queryParam").getStyle(), is(QUERY)); } @Test public void expandsRestRequestPathsWithoutTemplateParameters() throws Exception { RestRequest restRequest = makeRestRequest(); restRequest.getResource().setPath("/the/path"); addParameter(restRequest, RestParamsPropertyHolder.ParameterStyle.QUERY, "queryName", "queryValue"); addParameter(restRequest, RestParamsPropertyHolder.ParameterStyle.MATRIX, "matrixName", "theMatrixValue"); addParameter(restRequest, TEMPLATE, "templateName", "templateValue"); addParameter(restRequest, RestParamsPropertyHolder.ParameterStyle.MATRIX, "matrixName2", "theMatrixValue2"); addParameter(restRequest, RestParamsPropertyHolder.ParameterStyle.QUERY, "queryName2", "queryValue2"); assertThat(RestUtils.expandPath("/the/path", restRequest.getParams(), restRequest), is("/the/path;matrixName=theMatrixValue;matrixName2=theMatrixValue2?queryName=queryValue&queryName2=queryValue2")); } @Test public void expandsRestRequestPathsWithTemplateParameter() throws Exception { RestRequest restRequest = makeRestRequest(); String templateParameterName = "templateName"; String templateParameterValue = "templateValue"; restRequest.getResource().setPath("/the/{" + templateParameterName + "}/path"); addParameter(restRequest, TEMPLATE, templateParameterName, templateParameterValue); assertThat(RestUtils.expandPath(restRequest.getResource().getFullPath(), restRequest.getParams(), restRequest), is("/the/" + templateParameterValue + "/path")); } @Test public void expandsPathWithPropertyExpansionOnPathAndTemplateParameter() throws Exception { RestRequest restRequest = makeRestRequest(); restRequest.getProject().setPropertyValue("version", "xml"); String templateParameterName = "templateName"; String templateParameterValue = "templateValue"; restRequest.getResource().setPath("/the/{" + templateParameterName + "}/path/${#Project#version}"); addParameter(restRequest, TEMPLATE, templateParameterName, templateParameterValue); assertThat(RestUtils.getExpandedPath(restRequest.getResource().getFullPath(), restRequest.getParams(), restRequest), is("/the/" + templateParameterValue + "/path/xml")); } private void addParameter(RestRequestInterface restRequest, RestParamsPropertyHolder.ParameterStyle style, String name, String value) { RestParamsPropertyHolder params = restRequest.getParams(); RestParamProperty restParamProperty = params.addProperty(name); restParamProperty.setStyle(style); restParamProperty.setValue(value); } }