package org.jooby;
import java.util.concurrent.atomic.AtomicInteger;
import org.jooby.test.ServerFeature;
import org.junit.Test;
public class LiftMixedFeature extends ServerFeature {
{
use("*", (req, rsp, chain) -> {
if (req.param("admin").booleanValue(false)) {
chain.next("/admin", req, rsp);
} else {
chain.next("/frontend", req, rsp);
}
});
AtomicInteger counter = new AtomicInteger(0);
get("/", (req, rsp) -> {
counter.set(0);
counter.incrementAndGet();
}).name("admin/home");
get("/", (req, rsp) -> {
counter.set(0);
counter.incrementAndGet();
}).name("frontend/home");
get("/", () -> "f" + counter.get()).name("frontend/home");
get("/", (req, rsp) -> {
counter.incrementAndGet();
}).name("admin/home");
get("/", () -> "a" + counter.get()).name("admin/home");
get("/:id", req -> "a" + req.param("id").value()).name("admin/1");
get("/:id", req -> "f" + req.param("id").value()).name("frontend/1");
}
@Test
public void shouldPickAdminRoutes() throws Exception {
request()
.get("/?admin=true")
.expect("a2");
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("f1");
request()
.get("/1")
.expect("f1");
request()
.get("/1/x")
.expect(404);
}
}