package io.dropwizard.jetty;
import com.google.common.collect.ImmutableMap;
import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Request;
import org.junit.Before;
import org.junit.Test;
import org.mockito.InOrder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import static org.mockito.Mockito.inOrder;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
public class ContextRoutingHandlerTest {
private final Request baseRequest = mock(Request.class);
private final HttpServletRequest request = mock(HttpServletRequest.class);
private final HttpServletResponse response = mock(HttpServletResponse.class);
private final Handler handler1 = mock(Handler.class);
private final Handler handler2 = mock(Handler.class);
private ContextRoutingHandler handler;
@Before
public void setUp() throws Exception {
this.handler = new ContextRoutingHandler(ImmutableMap.of(
"/", handler1,
"/admin", handler2
));
}
@Test
public void routesToTheBestPrefixMatch() throws Exception {
when(baseRequest.getRequestURI()).thenReturn("/hello-world");
handler.handle("/hello-world", baseRequest, request, response);
verify(handler1).handle("/hello-world", baseRequest, request, response);
verify(handler2, never()).handle("/hello-world", baseRequest, request, response);
}
@Test
public void routesToTheLongestPrefixMatch() throws Exception {
when(baseRequest.getRequestURI()).thenReturn("/admin/woo");
handler.handle("/admin/woo", baseRequest, request, response);
verify(handler1, never()).handle("/admin/woo", baseRequest, request, response);
verify(handler2).handle("/admin/woo", baseRequest, request, response);
}
@Test
public void passesHandlingNonMatchingRequests() throws Exception {
when(baseRequest.getRequestURI()).thenReturn("WAT");
handler.handle("WAT", baseRequest, request, response);
verify(handler1, never()).handle("WAT", baseRequest, request, response);
verify(handler2, never()).handle("WAT", baseRequest, request, response);
}
@Test
public void startsAndStopsAllHandlers() throws Exception {
handler.start();
handler.stop();
final InOrder inOrder = inOrder(handler1, handler2);
inOrder.verify(handler1).start();
inOrder.verify(handler2).start();
}
}