package org.jooby;
import org.jooby.test.ServerFeature;
import org.junit.Test;
public class LiftWithAppsFeature extends ServerFeature {
public static class Admin extends Jooby {
public Admin(final String prefix) {
super(prefix);
}
{
use("/")
.get("/", () -> "admin")
.get("/:id", req -> "a" + req.param("id").value());
}
}
public static class Frontend extends Jooby {
public Frontend(final String prefix) {
super(prefix);
}
{
get("/", () -> "frontend");
get("/:id", req -> "f" + req.param("id").value());
}
}
{
use("*", (req, rsp, chain) -> {
if (req.param("admin").booleanValue(false)) {
chain.next("/a", req, rsp);
} else {
chain.next("/f", req, rsp);
}
});
use(new Admin("a"));
use(new Frontend("f"));
}
@Test
public void shouldPickAdminRoutes() throws Exception {
request()
.get("/?admin=true")
.expect("admin");
request()
.get("/1?admin=true")
.expect("a1");
request()
.get("/1/x?admin=true")
.expect(404);
}
@Test
public void shouldPickFrontendRoutes() throws Exception {
request()
.get("/?admin=false")
.expect("frontend");
request()
.get("/1")
.expect("f1");
request()
.get("/1/x")
.expect(404);
}
}