package org.jooby; import org.jooby.mvc.GET; import org.jooby.mvc.Path; import org.jooby.test.ServerFeature; import org.junit.Test; public class RedirectFeature extends ServerFeature { @Path("/r") public static class Resource { @Path("/redirect") @GET public Result redirect() { return Results.redirect("/r/here"); } @Path("/seeOther") @GET public Result seeOther() { return Results.seeOther("/r/here"); } @Path("/tempRedirect") @GET public Result tempRedirect() { return Results.tempRedirect("/r/here"); } @Path("/moved") @GET public Result moved() { return Results.moved("/r/here"); } @Path("/here") @GET public String here() { return "done"; } } { get("/l1/l2/l3", () -> Results.redirect("/l1")); get("/l1", (req, rsp) -> rsp.send(req.path())); get("/blog/admin", () -> Results.redirect("post/new")); get("/blog/admin/post/new", (req, rsp) -> rsp.send(req.path())); get("/blog/post/new", (req, rsp) -> rsp.send(req.path())); get("/d1/d2/d3", () -> Results.redirect("..")); get("/d1/d2/d3b", () -> Results.redirect("../d2")); get("/d1/d2/d3c", () -> Results.redirect("./d2")); get("/back", () -> Results.redirect("back")); get("/d1", (req, rsp) -> rsp.send(req.path())); get("/d1/d2", (req, rsp) -> rsp.send(req.path())); get("/d1/d2/d2", (req, rsp) -> rsp.send(req.path())); get("/", (req, rsp) -> rsp.send(req.path())); use(Resource.class); } @Test public void redirect() throws Exception { request() .get("/r/redirect") .expect("done") .expect(200); } @Test public void redirectURI() throws Exception { request() .get("/l1/l2/l3") .expect("/l1") .expect(200); request() .get("/blog/admin/") .expect("/blog/admin/post/new") .expect(200); request() .get("/blog/admin") .expect("/blog/post/new") .expect(200); request() .get("/d1/d2/d3") .expect("/d1") .expect(200); request() .get("/d1/d2/d3b") .expect("/d1/d2") .expect(200); request() .get("/d1/d2/d3c") .expect("/d1/d2/d2") .expect(200); request() .get("/back") .expect("/") .expect(200); request() .get("/back") .header("Referer", "/l1") .expect("/l1") .expect(200); } @Test public void seeOther() throws Exception { request() .get("/r/seeOther") .expect("done") .expect(200); } @Test public void temp() throws Exception { request() .get("/r/tempRedirect") .expect("done") .expect(200); } @Test public void moved() throws Exception { request() .get("/r/moved") .expect("done") .expect(200); } }