package org.jooby;
import org.jooby.test.ServerFeature;
import org.junit.Test;
public class FilterFeature extends ServerFeature {
{
use("*", (req, rsp, chain) -> {
chain.next(req, rsp);
});
get("/no-next", (req, rsp, chain) -> {
});
get("/no-next", (req, rsp, chain) -> {
throw new IllegalStateException("Should NOT execute ever");
});
get("/before", (req, rsp, chain) -> {
rsp.header("before", "before");
chain.next(req, rsp);
});
get("/before", (req, rsp) -> {
rsp.send(rsp.header("before").value());
});
get("/after", (req, rsp, chain) -> {
chain.next(req, rsp);
rsp.header("after", "after");
});
get("/after", (req, rsp) -> {
rsp.send(rsp.header("after").toOptional(String.class).orElse("after-missing"));
});
get("/commit", (req, rsp, chain) -> {
rsp.send("commit");
});
get("/commitx2", (req, rsp, chain) -> {
rsp.send("commit1");
chain.next(req, rsp);
});
get("/commitx2", (req, rsp) -> {
rsp.send("ignored");
});
get("/redirect", (req, rsp, chain) -> {
rsp.redirect("/commit");
chain.next(req, rsp);
});
get("/redirect", (req, rsp) -> {
rsp.send("ignored");
});
}
@Test
public void nextFilterShouldNeverBeExecutedWhenChainNextIsMissing() throws Exception {
request()
.get("/no-next")
.expect(200)
.empty();
}
@Test
public void globalFilterShouldNOTAffect404Response() throws Exception {
request()
.get("/404")
.expect(404);
}
@Test
public void beforeFilterShouldBeExecuted() throws Exception {
request()
.get("/before")
.expect(200)
.expect("before")
.header("before", "before");
}
@Test
public void headerAfterResponseCommittedAreIgnored() throws Exception {
request()
.get("/after")
.expect(200)
.expect("after-missing")
.header("after", (String) null);
}
@Test
public void commitIsPossibleFromFilter() throws Exception {
request()
.get("/commit")
.expect(200)
.expect("commit");
}
@Test
public void redirectIsPossibleFromFilter() throws Exception {
request()
.dontFollowRedirect()
.get("/redirect")
.expect(302)
.empty();
}
@Test
public void secondCommitIsIgnored() throws Exception {
request()
.get("/commitx2")
.expect(200)
.expect("commit1");
}
}