/*
* Copyright (C) 2014 Stefan Niederhauser (nidin@gmx.ch)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package guru.nidi.ramltester.spring;
import guru.nidi.ramltester.model.Values;
import guru.nidi.ramltester.util.FileValue;
import org.junit.Before;
import org.junit.Test;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import static org.junit.Assert.assertEquals;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.fileUpload;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
/**
*
*/
@Controller
public class SpringMockRamlMessageTest {
private MockMvc mockMvc;
@Before
public void init() {
mockMvc = MockMvcBuilders.standaloneSetup(this).build();
}
@RequestMapping(value = "path", produces = "text/dummy")
@ResponseBody
public ResponseEntity<String> test() {
final HttpHeaders headers = new HttpHeaders();
headers.add("head", "resValue");
return new ResponseEntity<>("responsö", headers, HttpStatus.ACCEPTED);
}
@Test
public void simple() throws Exception {
final MvcResult result = mockMvc.perform(get("http://test.com/path?param=val")
.characterEncoding("utf-8")
.content("contentä")
.contentType(MediaType.TEXT_PLAIN)
.param("param2", "val2")
.header("head", "hval")).andReturn();
final SpringMockRamlRequest ramlRequest = new SpringMockRamlRequest(result.getRequest());
assertEquals("contentä", new String(ramlRequest.getContent(), "utf-8"));
assertEquals("text/plain", ramlRequest.getContentType());
final Values formValues = new Values().addValue("param", "val").addValue("param2", "val2");
assertEquals(formValues, ramlRequest.getFormValues());
final Values headerValues = new Values().addValue("head", "hval").addValue("Content-Type", "text/plain;charset=utf-8");
assertEquals(headerValues, ramlRequest.getHeaderValues());
assertEquals("GET", ramlRequest.getMethod());
assertEquals(new Values().addValue("param", "val"), ramlRequest.getQueryValues());
assertEquals("http://test.com/path", ramlRequest.getRequestUrl(null, false));
assertEquals("http://x.y/path", ramlRequest.getRequestUrl("http://x.y", false));
final SpringMockRamlResponse ramlResponse = new SpringMockRamlResponse(result.getResponse());
assertEquals("responsö", new String(ramlResponse.getContent(), "iso-8859-1"));
assertEquals("text/dummy", ramlResponse.getContentType());
final Values resHeaderValues = new Values().addValue("head", "resValue").addValue("Content-Length", Integer.toString("responsö".length())).addValue("Content-Type", "text/dummy");
assertEquals(resHeaderValues, ramlResponse.getHeaderValues());
assertEquals(202, ramlResponse.getStatus());
}
@Test
public void multipart() throws Exception {
final MvcResult result = mockMvc.perform(fileUpload("http://test.com/path?param=val")
.file("file", new byte[]{})
.characterEncoding("utf-8")
.content("contentä")
.param("param2", "val2")
.header("head", "hval")).andReturn();
final SpringMockRamlRequest ramlRequest = new SpringMockRamlRequest(result.getRequest());
assertEquals("contentä", new String(ramlRequest.getContent(), "utf-8"));
assertEquals("multipart/form-data", ramlRequest.getContentType());
final Values formValues = new Values().addValue("param", "val").addValue("param2", "val2").addValue("file", new FileValue());
assertEquals(formValues, ramlRequest.getFormValues());
final Values headerValues = new Values().addValue("head", "hval").addValue("Content-Type", "multipart/form-data;charset=utf-8");
assertEquals(headerValues, ramlRequest.getHeaderValues());
assertEquals("POST", ramlRequest.getMethod());
assertEquals(new Values().addValue("param", "val"), ramlRequest.getQueryValues());
assertEquals("http://test.com/path", ramlRequest.getRequestUrl(null, false));
assertEquals("http://x.y/path", ramlRequest.getRequestUrl("http://x.y", false));
}
}