/**
*
*/
package org.minnal.security.auth;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.testng.Assert.assertEquals;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URI;
import java.util.Map;
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.core.MultivaluedHashMap;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status.Family;
import javax.ws.rs.core.Response.StatusType;
import javax.ws.rs.core.UriInfo;
import org.glassfish.jersey.message.internal.OutboundMessageContext;
import org.minnal.security.session.Session;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import com.google.common.collect.Lists;
/**
* @author ganeshs
*
*/
public class JaxrsWebContextTest {
private JaxrsWebContext context;
private ContainerRequestContext request;
private OutboundMessageContext outboundMessageContext;
private Session session;
@BeforeMethod
public void setup() {
session = mock(Session.class);
request = mock(ContainerRequestContext.class);
outboundMessageContext = new OutboundMessageContext();
context = new JaxrsWebContext(request, outboundMessageContext, session);
}
@Test
public void shouldGetRequestParameters() {
MultivaluedMap<String, String> params = new MultivaluedHashMap<String, String>();
params.addAll("key1", Lists.newArrayList("value1", "value2"));
params.add("key2", "value3");
UriInfo uriInfo = mock(UriInfo.class);
when(uriInfo.getQueryParameters()).thenReturn(params);
when(request.getUriInfo()).thenReturn(uriInfo);
Map<String, String[]> reqParams = context.getRequestParameters();
assertEquals(reqParams.get("key1"), new String[]{"value1", "value2"});
assertEquals(reqParams.get("key2"), new String[]{"value3"});
}
@Test
public void shouldGetRequestParameter() {
MultivaluedMap<String, String> params = new MultivaluedHashMap<String, String>();
params.addAll("key1", Lists.newArrayList("value1", "value2"));
params.add("key2", "value3");
UriInfo uriInfo = mock(UriInfo.class);
when(uriInfo.getQueryParameters()).thenReturn(params);
when(request.getUriInfo()).thenReturn(uriInfo);
assertEquals(context.getRequestParameter("key1"), "value1");
}
@Test
public void shouldGetRequestHeader() {
when(request.getHeaderString("header1")).thenReturn("value1");
assertEquals(context.getRequestHeader("header1"), "value1");
}
@Test
public void shouldSetSessionAttribute() {
context.setSessionAttribute("key1", "value1");
verify(session).addAttribute("key1", "value1");
}
@Test
public void shouldGetSessionAttribute() {
when(session.getAttribute("key1")).thenReturn("value1");
assertEquals(context.getSessionAttribute("key1"), "value1");
}
@Test
public void shouldGetRequestMethod() {
when(request.getMethod()).thenReturn("GET");
assertEquals(context.getRequestMethod(), "GET");
}
@Test
public void shouldWriteResponseContent() throws IOException {
OutputStream os = mock(OutputStream.class);
outboundMessageContext.setEntityStream(os);
context.writeResponseContent("test");
verify(os).write("test".getBytes());
}
@Test
public void shouldSetResponseStatus() throws IOException {
context.setResponseStatus(200);
assertEquals(context.getResponse().getStatusInfo(), Response.Status.OK);
}
@Test
public void shouldSetResponseStatusForUnkownCode() throws IOException {
context.setResponseStatus(499);
StatusType type = context.getResponse().getStatusInfo();
assertEquals(type.getFamily(), Family.CLIENT_ERROR);
assertEquals(type.getStatusCode(), 499);
}
@Test
public void shouldSetResponseHeader() {
context.setResponseHeader("header1", "value1");
assertEquals(context.getResponse().getHeaderString("header1"), "value1");
}
@Test
public void shouldGetServerName() {
UriInfo uriInfo = mock(UriInfo.class);
when(uriInfo.getRequestUri()).thenReturn(URI.create("http://localhost:8080/test"));
when(request.getUriInfo()).thenReturn(uriInfo);
assertEquals(context.getServerName(), "localhost");
}
@Test
public void shouldGetScheme() {
UriInfo uriInfo = mock(UriInfo.class);
when(uriInfo.getRequestUri()).thenReturn(URI.create("https://localhost:8080/test"));
when(request.getUriInfo()).thenReturn(uriInfo);
assertEquals(context.getScheme(), "https");
}
@Test
public void shouldGetPort() {
UriInfo uriInfo = mock(UriInfo.class);
when(uriInfo.getRequestUri()).thenReturn(URI.create("https://localhost:8080/test"));
when(request.getUriInfo()).thenReturn(uriInfo);
assertEquals(context.getServerPort(), 8080);
}
@Test
public void shouldGetFullRequestUrl() {
UriInfo uriInfo = mock(UriInfo.class);
when(uriInfo.getRequestUri()).thenReturn(URI.create("https://localhost:8080/test"));
when(request.getUriInfo()).thenReturn(uriInfo);
assertEquals(context.getFullRequestURL(), "https://localhost:8080/test");
}
}