package com.sishuok.mvc.client;
import com.sishuok.mvc.entity.User;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.webapp.WebAppContext;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import org.springframework.http.*;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter;
import java.util.Arrays;
import static org.hamcrest.CoreMatchers.containsString;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.beans.HasPropertyWithValue.hasProperty;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
/**
* <p>User: Zhang Kaitao
* <p>Date: 13-12-29
* <p>Version: 1.0
*/
public class EmbeddedJettyClientTest extends AbstractClientTest {
private static Server server;
@BeforeClass
public static void beforeClass() throws Exception {
//创建一个server
server = new Server(8080);
WebAppContext context = new WebAppContext();
String webapp = "spring-mvc-test/src/main/webapp";
context.setDescriptor(webapp + "/WEB-INF/web.xml"); //指定web.xml配置文件
context.setResourceBase(webapp); //指定webapp目录
context.setContextPath("/");
context.setParentLoaderPriority(true);
server.setHandler(context);
server.start();
}
@AfterClass
public static void afterClass() throws Exception {
server.stop(); //当测试结束时停止服务器
}
@Test
public void testFindById() throws Exception {
ResponseEntity<User> entity = restTemplate.getForEntity(baseUri + "/{id}", User.class, 1L);
assertEquals(HttpStatus.OK, entity.getStatusCode());
assertThat(entity.getHeaders().getContentType().toString(), containsString(MediaType.APPLICATION_JSON_VALUE));
assertThat(entity.getBody(), hasProperty("name", is("zhang")));
}
@Test
public void testSaveWithJson() throws Exception {
User user = new User();
user.setId(1L);
user.setName("zhang");
String uri = baseUri;
String createdLocation = baseUri + "/" + 1;
restTemplate.setMessageConverters(Arrays.<HttpMessageConverter<?>>asList(new MappingJackson2HttpMessageConverter()));
ResponseEntity<User> responseEntity = restTemplate.postForEntity(uri, user, User.class);
assertEquals(createdLocation, responseEntity.getHeaders().get("Location").get(0));
assertEquals(HttpStatus.CREATED, responseEntity.getStatusCode());
assertEquals(user, responseEntity.getBody());
}
@Test
public void testSaveWithXML() throws Exception {
User user = new User();
user.setId(1L);
user.setName("zhang");
String uri = baseUri;
String createdLocation = baseUri + "/" + 1;
restTemplate.setMessageConverters(Arrays.<HttpMessageConverter<?>>asList(new Jaxb2RootElementHttpMessageConverter()));
ResponseEntity<User> responseEntity = restTemplate.postForEntity(uri, user, User.class);
assertEquals(createdLocation, responseEntity.getHeaders().get("Location").get(0));
assertEquals(HttpStatus.CREATED, responseEntity.getStatusCode());
assertEquals(user, responseEntity.getBody());
}
@Test
public void testUpdate() throws Exception {
User user = new User();
user.setId(1L);
user.setName("zhang");
String uri = baseUri + "/{id}";
restTemplate.setMessageConverters(Arrays.<HttpMessageConverter<?>>asList(new MappingJackson2HttpMessageConverter()));
ResponseEntity responseEntity = restTemplate.exchange(uri, HttpMethod.PUT, new HttpEntity<>(user), (Class) null, user.getId());
assertEquals(HttpStatus.NO_CONTENT, responseEntity.getStatusCode());
}
@Test
public void testDelete() throws Exception {
String uri = baseUri + "/{id}";
Long id = 1L;
ResponseEntity responseEntity = restTemplate.exchange(uri, HttpMethod.DELETE, HttpEntity.EMPTY, (Class) null, id);
assertEquals(HttpStatus.OK, responseEntity.getStatusCode());
}
}