package org.jooby.internal;
import static org.easymock.EasyMock.expect;
import static org.junit.Assert.assertEquals;
import java.util.Collections;
import java.util.Optional;
import org.jooby.Err;
import org.jooby.MediaType;
import org.jooby.Request;
import org.jooby.Response;
import org.jooby.Route;
import org.jooby.Route.Source;
import org.jooby.test.MockUnit;
import org.junit.Test;
public class RouteImplTest {
@Test(expected = Err.class)
public void notFound() throws Exception {
new MockUnit(Request.class, Response.class, Route.Chain.class)
.expect(unit -> {
Response rsp = unit.get(Response.class);
expect(rsp.status()).andReturn(Optional.empty());
Request req = unit.get(Request.class);
expect(req.path(true)).andReturn("/x");
})
.run(unit -> {
RouteImpl.notFound("GET", "/x")
.handle(unit.get(Request.class), unit.get(Response.class),
unit.get(Route.Chain.class));
});
}
@Test
public void statusSetOnNotFound() throws Exception {
new MockUnit(Request.class, Response.class, Route.Chain.class)
.expect(unit -> {
Response rsp = unit.get(Response.class);
expect(rsp.status()).andReturn(Optional.of(org.jooby.Status.OK));
})
.run(unit -> {
RouteImpl.notFound("GET", "/x")
.handle(unit.get(Request.class), unit.get(Response.class),
unit.get(Route.Chain.class));
});
}
@Test
public void toStr() {
Route.Filter f = (req, rsp, chain) -> {
};
Route route = new RouteImpl(f, new Route.Definition("GET", "/p?th", f)
.name("path")
.consumes("html", "json"), "GET", "/path", MediaType.valueOf("json", "html"),
Collections.emptyMap(), null, Source.BUILTIN);
assertEquals(
"| Method | Path | Source | Name | Pattern | Consumes | Produces |\n"
+
"|--------|-------|----------|-------|---------|-------------------------------|-------------------------------|\n"
+
"| GET | /path | ~builtin | /path | /p?th | [text/html, application/json] | [application/json, text/html] |",
route.toString());
}
@Test
public void consumes() {
Route.Filter f = (req, rsp, chain) -> {
};
Route route = new RouteImpl(f, new Route.Definition("GET", "/p?th", f).consumes("html", "json"),
"GET", "/path", Collections.emptyList(), Collections.emptyMap(), null, Source.BUILTIN);
assertEquals(MediaType.valueOf("html", "json"), route.consumes());
}
}