package org.jooby.internal.mvc;
import static org.easymock.EasyMock.expect;
import java.io.IOException;
import java.lang.reflect.Method;
import java.util.Collections;
import java.util.List;
import org.jooby.Request;
import org.jooby.Response;
import org.jooby.Status;
import org.jooby.test.MockUnit;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
@RunWith(PowerMockRunner.class)
@PrepareForTest({MvcHandler.class })
public class MvcHandlerTest {
@Test
public void defaults() throws Exception {
new MockUnit(Method.class, RequestParamProvider.class)
.run(unit -> {
new MvcHandler(unit.get(Method.class), unit.get(RequestParamProvider.class));
});
}
@SuppressWarnings({"rawtypes", "unchecked" })
@Test
public void handle() throws Exception {
Class handlerClass = MvcHandlerTest.class;
MvcHandlerTest handler = new MvcHandlerTest();
Method method = handlerClass.getDeclaredMethod("strhandle");
new MockUnit(RequestParamProvider.class, Request.class, Response.class)
.expect(unit -> {
Request req = unit.get(Request.class);
expect(req.require(MvcHandlerTest.class)).andReturn(handler);
})
.expect(unit -> {
Response rsp = unit.get(Response.class);
expect(rsp.status(Status.OK)).andReturn(rsp);
rsp.send("strhandle");
})
.expect(unit -> {
List<RequestParam> params = Collections.emptyList();
RequestParamProvider paramProvider = unit.get(RequestParamProvider.class);
expect(paramProvider.parameters(method)).andReturn(params);
})
.run(unit -> {
new MvcHandler(method, unit.get(RequestParamProvider.class))
.handle(unit.get(Request.class), unit.get(Response.class));
});
}
@SuppressWarnings({"rawtypes", "unchecked" })
@Test(expected = IOException.class)
public void handleException() throws Exception {
Class handlerClass = MvcHandlerTest.class;
MvcHandlerTest handler = new MvcHandlerTest();
Method method = handlerClass.getDeclaredMethod("errhandle");
new MockUnit(RequestParamProvider.class, Request.class, Response.class)
.expect(unit -> {
Request req = unit.get(Request.class);
expect(req.require(MvcHandlerTest.class)).andReturn(handler);
})
.expect(unit -> {
List<RequestParam> params = Collections.emptyList();
RequestParamProvider paramProvider = unit.get(RequestParamProvider.class);
expect(paramProvider.parameters(method)).andReturn(params);
})
.run(unit -> {
new MvcHandler(method, unit.get(RequestParamProvider.class))
.handle(unit.get(Request.class), unit.get(Response.class));
});
}
@SuppressWarnings({"rawtypes", "unchecked" })
@Test(expected = RuntimeException.class)
public void throwableException() throws Exception {
Class handlerClass = MvcHandlerTest.class;
MvcHandlerTest handler = new MvcHandlerTest();
Method method = handlerClass.getDeclaredMethod("throwablehandle");
new MockUnit(RequestParamProvider.class, Request.class, Response.class)
.expect(unit -> {
Request req = unit.get(Request.class);
expect(req.require(MvcHandlerTest.class)).andReturn(handler);
})
.expect(unit -> {
List<RequestParam> params = Collections.emptyList();
RequestParamProvider paramProvider = unit.get(RequestParamProvider.class);
expect(paramProvider.parameters(method)).andReturn(params);
})
.run(unit -> {
new MvcHandler(method, unit.get(RequestParamProvider.class))
.handle(unit.get(Request.class), unit.get(Response.class));
});
}
public String strhandle() throws Exception {
return "strhandle";
}
public String errhandle() throws Exception {
throw new IOException("intentional err");
}
public String throwablehandle() throws Throwable {
throw new Throwable("intentional err");
}
}