package org.mockserver.examples.web.controller;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.mockserver.examples.servicebackend.BookServer;
import org.mockserver.examples.web.controller.pageobjects.BookPage;
import org.mockserver.examples.web.controller.pageobjects.BooksPage;
import org.mockserver.integration.ClientAndProxy;
import org.mockserver.model.Parameter;
import org.mockserver.socket.PortFactory;
import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.web.context.WebApplicationContext;
import javax.annotation.Resource;
import static org.mockserver.integration.ClientAndProxy.startClientAndProxy;
import static org.mockserver.model.HttpRequest.request;
import static org.mockserver.verify.VerificationTimes.exactly;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import static org.springframework.test.web.servlet.setup.MockMvcBuilders.webAppContextSetup;
/**
* @author jamesdbloom
*/
public abstract class BooksPageEndToEndIntegrationTest {
private static ClientAndProxy proxy;
@Resource
private BookServer bookServer;
@Resource
private WebApplicationContext webApplicationContext;
private MockMvc mockMvc;
@BeforeClass
public static void startProxy() {
proxy = startClientAndProxy(PortFactory.findFreePort());
}
@AfterClass
public static void stopProxy() throws Exception {
proxy.stop();
}
@Before
public void setupFixture() {
mockMvc = webAppContextSetup(webApplicationContext).build();
}
@Test
public void shouldLoadListOfBooks() throws Exception {
// when
MvcResult response = mockMvc.perform(get("/books").accept(MediaType.TEXT_HTML))
.andExpect(status().isOk())
.andExpect(content().contentType("text/html; charset=utf-8"))
.andReturn();
// then
BooksPage booksPage = new BooksPage(response);
booksPage.containsListOfBooks(bookServer.getBooksDB().values());
proxy.verify(
request()
.withPath("/get_books"),
exactly(1)
);
}
@Test
public void shouldLoadSingleBook() throws Exception {
// when
MvcResult response = mockMvc.perform(get("/book/1").accept(MediaType.TEXT_HTML))
.andExpect(status().isOk())
.andExpect(content().contentType("text/html; charset=utf-8"))
.andReturn();
// then
BookPage bookPage = new BookPage(response);
bookPage.containsBook(bookServer.getBooksDB().get("1"));
proxy.verify(
request()
.withPath("/get_book")
.withQueryStringParameter(
new Parameter("id", "1")
),
exactly(1)
);
}
}