package org.jooby;
import org.apache.http.HttpResponse;
import org.jooby.mvc.Path;
import org.jooby.test.ServerFeature;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class StackFeature extends ServerFeature {
public interface HttpResponseValidator {
public void validate(HttpResponse response);
}
@Path("/r")
public static class Resource {
/** The logging system. */
private final Logger log = LoggerFactory.getLogger(getClass());
@org.jooby.mvc.GET
public void xHeader(final Response resp) {
log.info("X");
resp.header("X", "x");
}
@org.jooby.mvc.GET
public void yHeader(final Response resp) {
log.info("Y");
resp.header("Y", "y");
}
@Path("/")
@org.jooby.mvc.GET
public String root() throws Exception {
return "root";
}
@Path("/subpath")
@org.jooby.mvc.GET
public String subpath() throws Exception {
return "subpath";
}
@Path("/subpath/1")
@org.jooby.mvc.GET
public String subpath1() throws Exception {
return "subpath/1";
}
@Path("/subpath/f.js")
@org.jooby.mvc.GET
public String subpathfjs() throws Exception {
return "subpath/f.js";
}
}
{
get("*", (req, resp) -> {
resp.header("X", "x");
});
get("*", (req, resp) -> {
resp.header("Y", "y");
});
get("/", (req, resp) -> {
resp.send("root");
});
get("/subpath", (req, resp) -> {
resp.send("subpath");
});
get("/subpath/1", (req, resp) -> {
resp.send("subpath/1");
});
get("/subpath/f.js", (req, resp) -> {
resp.send("subpath/f.js");
});
use(Resource.class);
}
@Test
public void rootStack() throws Exception {
request()
.get("/")
.expect(200)
.header("X", "x")
.header("Y", "y");
request()
.get("/r")
.expect(200)
.header("X", "x")
.header("Y", "y");
}
@Test
public void subpathStack() throws Exception {
request()
.get("/subpath")
.expect("subpath")
.header("X", "x")
.header("Y", "y");
request()
.get("/r/subpath")
.expect("subpath")
.header("X", "x")
.header("Y", "y");
}
@Test
public void subpath1Stack() throws Exception {
request()
.get("/subpath/1")
.expect("subpath/1")
.header("X", "x")
.header("Y", "y");
request()
.get("/r/subpath/1")
.expect("subpath/1")
.header("X", "x")
.header("Y", "y");
}
@Test
public void subpathFStack() throws Exception {
request()
.get("/subpath/f.js")
.expect("subpath/f.js")
.header("X", "x")
.header("Y", "y");
request()
.get("/r/subpath/f.js")
.expect("subpath/f.js")
.header("X", "x")
.header("Y", "y");
}
@Test
public void notFound() throws Exception {
request()
.get("/missing")
.expect(404)
.header("X", (String) null)
.header("Y", (String) null);
request()
.get("/r/missing")
.expect(404)
.header("X", (String) null)
.header("Y", (String) null);
}
}