1. We have the BookEndpoint.java:

package com.pluralsight.bookstore.rest;

import com.pluralsight.bookstore.model.Book;
import com.pluralsight.bookstore.repository.BookRepository; import javax.inject.Inject;
import javax.validation.constraints.Min;
import javax.ws.rs.*;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo; import java.net.URI;
import java.util.List; import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
//api/books
@Path("/books")
public class BookEndpoint { @Inject
private BookRepository bookRepository; @POST
@Consumes(APPLICATION_JSON)
public Response createBook(Book book, @Context UriInfo uriInfo) {
book = bookRepository.create(book);
URI createedURI = uriInfo.getBaseUriBuilder().path(book.getId().toString()).build();
return Response.created(createedURI).build();
} @GET
@Produces(APPLICATION_JSON)
public Response getBooks() {
List<Book> books = bookRepository.findAll(); if(books.size() == 0) {
return Response.noContent().build();
}
return Response.ok(books).build();
} @GET
@Path("/{id: \\d+}")
@Produces(APPLICATION_JSON)
public Response getBook(@PathParam("id") @Min(1) Long id) {
Book book = bookRepository.find(id); if(book == null) {
return Response.status(Response.Status.NOT_FOUND).build();
} return Response.ok(book).build();
} // api/books/count
@GET
@Path("/count")
public Response countBooks() {
Long nbOfBooks = bookRepository.countAll(); if(nbOfBooks == 0) {
return Response.noContent().build();
} return Response.ok(nbOfBooks).build();
} @DELETE
@Path("/{id : \\d+}")
public Response deleteBook(Long id) {
bookRepository.delete(id);
return Response.noContent().build();
}
}

2. Creating a test for the REST endpoint:

package com.pluralsight.bookstore.rest;

import com.pluralsight.bookstore.model.Book;
import com.pluralsight.bookstore.model.Language;
import com.pluralsight.bookstore.repository.BookRepository;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.arquillian.test.api.ArquillianResource;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.asset.EmptyAsset;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.junit.After;
import org.junit.Test;
import org.junit.runner.RunWith; import javax.ws.rs.client.Entity;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.Response; import java.util.Date; import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
import static javax.ws.rs.core.Response.Status.CREATED;
import static javax.ws.rs.core.Response.Status.NO_CONTENT;
import static org.junit.Assert.*; @RunWith(Arquillian.class)
public class BookEndpointTest {
//testable tell wildfly not to package this test,
// cause we want to test from outside by using HTTP
@Deployment(testable = false)
public static JavaArchive createDeployment() {
return ShrinkWrap.create(JavaArchive.class)
.addClass(BookRepository.class)
.addClass(Book.class)
.addClass(Language.class)
.addClass(BookEndpoint.class)
.addClass(JAXRSConfiguration.class)
.addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml")
.addAsManifestResource("META-INF/test-persistence.xml", "persistence.xml");
} @After
public void tearDown() throws Exception {
} @Test
public void createBook(@ArquillianResource("api/books")WebTarget webTarget) {
// Test counting books
Response response = webTarget.path("count").request().get();
assertEquals(NO_CONTENT.getStatusCode(), response.getStatus()); // Test find all
response = webTarget.request(APPLICATION_JSON).get();
assertEquals(NO_CONTENT.getStatusCode(), response.getStatus()); // Create a book
Book book = new Book("isbn", null, 12F, 123, Language.ENGLISH, new Date(), "imageURL", "description");
response = webTarget.request(APPLICATION_JSON).post(Entity.entity(book, APPLICATION_JSON));
assertEquals(CREATED.getStatusCode(), response.getStatus()); }
}

最新文章

  1. 记jQuery.fn.show的一次踩坑和问题排查
  2. Oracle数据泵(Data Dump)错误汇集
  3. Cube Processing Options
  4. NOIP2012 同余方程-拓展欧几里得
  5. 错题集锦(二) -- Java专项
  6. javascripct导图
  7. 1088-Gnome Sequencing
  8. Ubuntu上VNC 配置
  9. java基础之导入(Excel)2
  10. iOS7 初体验
  11. 转载--初识绘图工具plantUML
  12. PHP:preg_replace
  13. PHP Markdown 解析器Parsedown
  14. 前端forEach在Array、map、set中的使用,weakset,weakmap
  15. Java学习 第二节
  16. WebAPI 抛出HttpResponseException异常
  17. IE下Userdata本地化存储
  18. Bootstrap fileinput v3.0(ssm版)
  19. Java中HashMap 初始化时容量(参数)如何设置合适?
  20. 八个常用的js正则表达式

热门文章

  1. 【转载】Hadoop分布式文件系统HDFS的工作原理详述
  2. 可以在一个html的文件当中读取另一个html文件的内容
  3. Android 仿微信调用第三方应用导航(百度,高德、腾讯)
  4. dive into python:模块的导入和搜索文件路径的配置
  5. android中用Intent传数据,如果用传递的是一个类,就将类实现Parcelable接口
  6. 连接服务器的mysql
  7. 让浏览器不再显示 https 页面中的 http 请求警报&lt;meta http-equiv=&quot;Content-Security-Policy&quot; content=&quot;upgrade-insecure-requests&quot;&gt;
  8. BZOJ 1176: [Balkan2007]Mokia KDtree
  9. 华登区块狗系统APP开发
  10. react 导航切换