package org.jooby.issues;
import org.jooby.mvc.Path;
import org.jooby.test.ServerFeature;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Issue393 extends ServerFeature {
public static class Data {}
@Path("/r")
public static class Resource {
@Path("/param")
public String param(final String value) {
return value;
}
@Path("/type")
public Object type(final int value) {
return value;
}
}
/** The logging system. */
private final Logger log = LoggerFactory.getLogger(getClass());
{
get("/param", req -> {
return req.param("value").value();
});
get("/no-parser", req -> {
return req.param("value").to(Data.class);
});
post("/body", req -> {
return req.body().to(Data.class);
});
get("/type", req -> {
return req.param("value").intValue();
});
use(Resource.class);
err((req, rsp, err) -> {
log.error("execution of: {}{} resulted in exception\nRoute:\n{}\n\nStacktrace:",
req.method(), req.path(), req.route().print(6), err);
rsp.send(err.getMessage());
});
}
@Test
public void missingParam() throws Exception {
request()
.get("/param")
.expect(400)
.expect("Bad Request(400): Required parameter 'value' is not present");
request()
.get("/r/param")
.expect(400)
.expect("Bad Request(400): Required parameter 'value' is not present");
}
@Test
public void typeMismatch() throws Exception {
request()
.get("/type?value=x")
.expect(400)
.expect("Bad Request(400): Failed to parse parameter 'value' to 'int'");
request()
.get("/r/type?value=x")
.expect(400)
.expect("Bad Request(400): Failed to parse parameter 'value' to 'int'");
}
@Test
public void body() throws Exception {
request()
.post("/body")
.expect(415)
.expect("Unsupported Media Type(415): Failed to parse body to 'org.jooby.issues.Issue393$Data'");
}
}