package com.elibom.jogger.http.servlet; import com.elibom.jogger.http.servlet.ServletResponse; import static org.mockito.Matchers.any; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.io.PrintWriter; import java.io.Writer; import java.util.Map; import javax.servlet.http.HttpServletResponse; import com.elibom.jogger.http.Cookie; import com.elibom.jogger.http.Response; import com.elibom.jogger.template.TemplateEngine; import org.testng.Assert; import org.testng.annotations.Test; public class ServletResponseTest { @Test public void shouldRetrieveStatus() throws Exception { HttpServletResponse servletResponse = mock(HttpServletResponse.class); when(servletResponse.getStatus()).thenReturn(400); Response response = new ServletResponse(servletResponse, mock(TemplateEngine.class)); Assert.assertEquals(response.getStatus(), 400); } @Test public void shouldSetStatus() throws Exception { HttpServletResponse servletResponse = mock(HttpServletResponse.class); Response response = new ServletResponse(servletResponse, mock(TemplateEngine.class)); response.status(400); verify(servletResponse).setStatus(400); } @Test public void shouldSetBadRequest() throws Exception { HttpServletResponse servletResponse = mock(HttpServletResponse.class); Response response = new ServletResponse(servletResponse, mock(TemplateEngine.class)); response.badRequest(); verify(servletResponse).setStatus(Response.BAD_REQUEST); } @Test public void shouldSetUnauthorized() throws Exception { HttpServletResponse servletResponse = mock(HttpServletResponse.class); Response response = new ServletResponse(servletResponse, mock(TemplateEngine.class)); response.unauthorized(); verify(servletResponse).setStatus(Response.UNAUTHORIZED); } @Test public void shouldRetrieveContentType() throws Exception { HttpServletResponse servletResponse = mock(HttpServletResponse.class); when(servletResponse.getContentType()).thenReturn("application/json"); Response response = new ServletResponse(servletResponse, mock(TemplateEngine.class)); Assert.assertEquals(response.getContentType(), "application/json"); } @Test public void shouldSetContentType() throws Exception { HttpServletResponse servletResponse = mock(HttpServletResponse.class); Response response = new ServletResponse(servletResponse, mock(TemplateEngine.class)); response.contentType("application/json"); verify(servletResponse).setContentType("application/json"); } @Test public void shouldRetrieveHeader() throws Exception { HttpServletResponse servletResponse = mock(HttpServletResponse.class); when(servletResponse.getHeader("Authorization")).thenReturn("Basic"); Response response = new ServletResponse(servletResponse, mock(TemplateEngine.class)); Assert.assertEquals(response.getHeader("Authorization"), "Basic"); } @Test public void shouldSetHeader() throws Exception { HttpServletResponse servletResponse = mock(HttpServletResponse.class); Response response = new ServletResponse(servletResponse, mock(TemplateEngine.class)); response.setHeader("Authorization", "Basic"); verify(servletResponse).setHeader("Authorization", "Basic"); } @Test public void shouldSetCookie() throws Exception { HttpServletResponse servletResponse = mock(HttpServletResponse.class); Response response = new ServletResponse(servletResponse, mock(TemplateEngine.class)); response.setCookie(new Cookie("test-1", "1")); verify(servletResponse).addCookie(any(javax.servlet.http.Cookie.class)); } @Test public void shouldRemoveCookie() throws Exception { HttpServletResponse servletResponse = mock(HttpServletResponse.class); Response response = new ServletResponse(servletResponse, mock(TemplateEngine.class)); response.removeCookie(new Cookie("test-1", "1")); verify(servletResponse).addCookie(any(javax.servlet.http.Cookie.class)); } @Test public void shouldSetAndGetAttributes() throws Exception { Response response = new ServletResponse(mock(HttpServletResponse.class), mock(TemplateEngine.class)); response.setAttribute("test-1", "1"); Map<String,Object> atts = response.getAttributes(); Assert.assertNotNull(atts); Assert.assertEquals(atts.size(), 1); Assert.assertEquals(atts.get("test-1"), "1"); } @Test(expectedExceptions=IllegalArgumentException.class) public void shouldFailWhenTryingToSetNullAttributeName() throws Exception { Response response = new ServletResponse(mock(HttpServletResponse.class), mock(TemplateEngine.class)); response.setAttribute(null, "1"); } @Test(expectedExceptions=IllegalArgumentException.class) public void shouldFailWhenTryingToSetNullAttributeValue() throws Exception { Response response = new ServletResponse(mock(HttpServletResponse.class), mock(TemplateEngine.class)); response.setAttribute("test-1", null); } @Test public void shouldWriteOutput() throws Exception { PrintWriter writer = mock(PrintWriter.class); HttpServletResponse servletResponse = mock(HttpServletResponse.class); when(servletResponse.getWriter()).thenReturn(writer); Response response = new ServletResponse(servletResponse, mock(TemplateEngine.class)); response.write("test"); verify(writer).print("test"); } @SuppressWarnings("unchecked") @Test public void shouldRenderTemplate() throws Exception { TemplateEngine templateEngine = mock(TemplateEngine.class); Response response = new ServletResponse(mock(HttpServletResponse.class), templateEngine); response.render("template"); verify(templateEngine).render(eq("template"), any(Map.class), any(Writer.class)); } @Test public void shouldRedirect() throws Exception { HttpServletResponse servletResponse = mock(HttpServletResponse.class); Response response = new ServletResponse(servletResponse, mock(TemplateEngine.class)); response.redirect("/"); verify(servletResponse).sendRedirect("/"); } }