package org.jooby; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.util.Arrays; import java.util.List; import org.jooby.Route.Group; import org.junit.Test; public class RouteGroupTest { @Test public void all() { Group ns = new Route.Group("/ns"); ns.all((req, rsp, chain) -> { }); ns.all((req, rsp) -> { }); ns.all(req -> "X"); ns.all(() -> "X"); assertEquals(4, ns.routes().size()); matches(ns.routes(), "GET", "/ns"); matches(ns.routes(), "POST", "/ns"); } @Test public void allWithPath() { Group ns = new Route.Group("/ns"); ns.all("/s", (req, rsp, chain) -> { }); ns.all("/s", (req, rsp) -> { }); ns.all("/s", req -> "X"); ns.all("/s", () -> "X"); assertEquals(4, ns.routes().size()); matches(ns.routes(), "GET", "/ns/s"); matches(ns.routes(), "POST", "/ns/s"); } @Test public void get() { Group ns = new Route.Group("/ns"); ns.get((req, rsp, chain) -> { }); ns.get((req, rsp) -> { }); ns.get(req -> "X"); ns.get(() -> "X"); assertEquals(4, ns.routes().size()); matches(ns.routes(), "GET", "/ns"); noMatches(ns.routes(), "POST", "/ns"); } @Test public void getWithPath() { Group ns = new Route.Group("/ns"); ns.get("/s", (req, rsp, chain) -> { }); ns.get("/s", (req, rsp) -> { }); ns.get("/s", req -> "X"); ns.get("/s", () -> "X"); assertEquals(4, ns.routes().size()); matches(ns.routes(), "GET", "/ns/s"); noMatches(ns.routes(), "POST", "/ns/s"); } @Test public void post() { Group ns = new Route.Group("/ns"); ns.post((req, rsp, chain) -> { }); ns.post((req, rsp) -> { }); ns.post(req -> "X"); ns.post(() -> "X"); assertEquals(4, ns.routes().size()); matches(ns.routes(), "POST", "/ns"); noMatches(ns.routes(), "GET", "/ns"); } @Test public void postWithPath() { Group ns = new Route.Group("/ns"); ns.post("/x", (req, rsp, chain) -> { }); ns.post("/x", (req, rsp) -> { }); ns.post("/x", req -> "X"); ns.post("/x", () -> "X"); assertEquals(4, ns.routes().size()); matches(ns.routes(), "POST", "/ns/x"); noMatches(ns.routes(), "GET", "/ns/x"); } @Test public void put() { Group ns = new Route.Group("/ns"); ns.put((req, rsp, chain) -> { }); ns.put((req, rsp) -> { }); ns.put(req -> "X"); ns.put(() -> "X"); assertEquals(4, ns.routes().size()); matches(ns.routes(), "PUT", "/ns"); noMatches(ns.routes(), "GET", "/ns"); } @Test public void putWithPath() { Group ns = new Route.Group("/ns"); ns.put("/p", (req, rsp, chain) -> { }); ns.put("/p", (req, rsp) -> { }); ns.put("/p", req -> "X"); ns.put("/p", () -> "X"); assertEquals(4, ns.routes().size()); matches(ns.routes(), "PUT", "/ns/p"); noMatches(ns.routes(), "GET", "/ns"); } @Test public void delete() { Group ns = new Route.Group("/ns"); ns.delete((req, rsp, chain) -> { }); ns.delete((req, rsp) -> { }); ns.delete(req -> "X"); ns.delete(() -> "X"); assertEquals(4, ns.routes().size()); matches(ns.routes(), "DELETE", "/ns"); noMatches(ns.routes(), "GET", "/ns"); } @Test public void deleteWithPath() { Group ns = new Route.Group("/ns"); ns.delete("/d", (req, rsp, chain) -> { }); ns.delete("/d", (req, rsp) -> { }); ns.delete("/d", req -> "X"); ns.delete("/d", () -> "X"); assertEquals(4, ns.routes().size()); matches(ns.routes(), "DELETE", "/ns/d"); noMatches(ns.routes(), "GET", "/ns"); } @Test public void patch() { Group ns = new Route.Group("/ns"); ns.patch((req, rsp, chain) -> { }); ns.patch((req, rsp) -> { }); ns.patch(req -> "X"); ns.patch(() -> "X"); assertEquals(4, ns.routes().size()); matches(ns.routes(), "patch", "/ns"); noMatches(ns.routes(), "GET", "/ns"); } @Test public void patchWithPath() { Group ns = new Route.Group("/ns"); ns.patch("/p", (req, rsp, chain) -> { }); ns.patch("/p", (req, rsp) -> { }); ns.patch("/p", req -> "X"); ns.patch("/p", () -> "X"); assertEquals(4, ns.routes().size()); matches(ns.routes(), "patch", "/ns/p"); noMatches(ns.routes(), "GET", "/ns"); } @Test public void name() { Group ns = new Route.Group("/ns"); ns.patch("/p", (req, rsp, chain) -> { }).name("x"); assertEquals("/x", ns.routes().iterator().next().name()); } @Test public void namens() { Group ns = new Route.Group("/ns", "/prefix"); ns.patch("/p", (req, rsp, chain) -> { }).name("x"); assertEquals("/prefix/x", ns.routes().iterator().next().name()); } @Test public void consumes() { Group ns = new Route.Group("/ns"); ns.patch("/p", (req, rsp, chain) -> { }).consumes("json"); assertEquals("application/json", ns.routes().iterator().next().consumes().iterator().next() .name()); } @Test public void consumesType() { Group ns = new Route.Group("/ns"); ns.patch("/p", (req, rsp, chain) -> { }).consumes(MediaType.json); assertEquals(MediaType.json, ns.routes().iterator().next().consumes().iterator().next()); } @Test public void produces() { Group ns = new Route.Group("/ns"); ns.patch("/p", (req, rsp, chain) -> { }).produces("json"); assertEquals("application/json", ns.routes().iterator().next().produces().iterator().next() .name()); } @Test public void producesType() { Group ns = new Route.Group("/ns"); ns.patch("/p", (req, rsp, chain) -> { }).produces(MediaType.json); assertEquals(MediaType.json, ns.routes().iterator().next().produces().iterator().next()); } @Test public void renderer() { Group ns = new Route.Group("/ns"); ns.patch("/p", (req, rsp, chain) -> { }).renderer("json"); assertEquals("json", ns.routes().iterator().next().attr("renderer")); } @Test public void attr() { Group ns = new Route.Group("/ns"); ns.patch("/p", (req, rsp, chain) -> { }).attr("foo", "bar"); assertEquals("bar", ns.routes().iterator().next().attr("foo")); } @Test public void excludes() { Group ns = new Route.Group("/ns"); ns.patch("/p", (req, rsp, chain) -> { }).excludes("/bar"); assertEquals(Arrays.asList("/bar"), ns.routes().iterator().next().excludes()); } private void matches(final List<Route.Definition> routes, final String method, final String pattern) { for (Route.Definition r : routes) { assertTrue( r.matches(method.toUpperCase(), pattern, MediaType.all, MediaType.ALL).isPresent()); } } private void noMatches(final List<Route.Definition> routes, final String method, final String pattern) { for (Route.Definition r : routes) { assertFalse( r.matches(method.toUpperCase(), pattern, MediaType.all, MediaType.ALL).isPresent()); } } }