package org.jooby; import static org.junit.Assert.assertEquals; import java.util.Optional; import org.jooby.mvc.Path; import org.jooby.test.ServerFeature; import org.junit.Test; public class BeanParserFeature extends ServerFeature { public interface IBean { String name(); boolean isValid(); int getAge(); } public static class BeanWithArgs { public static String ignored = "ignored"; public final String name; public final Optional<Integer> age; public BeanWithArgs(final String name, final Optional<Integer> age) { this.name = name; this.age = age; } } public static class BeanNoArg { private String name; public Optional<Integer> age; public Optional<Integer> getAge() { return age; } public String getName() { return name; } } public static class DefConstBean { public DefConstBean(final String arg) { } public DefConstBean() { } } @Path("/r") public static class Resource { @org.jooby.mvc.GET @Path("/ibean") public String getibean(final org.jooby.Request req, final IBean bean) throws Exception { assertEquals(req.param("name").value(), bean.name()); assertEquals(req.param("valid").booleanValue(), bean.isValid()); assertEquals(req.param("age").intValue(), bean.getAge()); return "OK"; } @org.jooby.mvc.POST @Path("/ibean") public String postibean(final org.jooby.Request req, final IBean bean) throws Exception { assertEquals(req.param("name").value(), bean.name()); assertEquals(req.param("valid").booleanValue(), bean.isValid()); assertEquals(req.param("age").intValue(), bean.getAge()); return "OK"; } @org.jooby.mvc.GET @Path("/beanwithargs") public String getbeanwithargs(final org.jooby.Request req, final BeanWithArgs bean) throws Exception { assertEquals(req.param("name").value(), bean.name); assertEquals(req.param("age").intValue(), (int) bean.age.get()); return "OK"; } @org.jooby.mvc.POST @Path("/beanwithargs") public String postbeanwithargs(final org.jooby.Request req, final BeanWithArgs bean) throws Exception { assertEquals(req.param("name").value(), bean.name); assertEquals(req.param("age").intValue(), (int) bean.age.get()); return "OK"; } @org.jooby.mvc.GET @Path("/beannoarg") public String getbeannoarg(final org.jooby.Request req, final BeanNoArg bean) throws Exception { assertEquals(req.param("name").value(), bean.getName()); assertEquals(req.param("age").intValue(), (int) bean.getAge().get()); return "OK"; } @org.jooby.mvc.POST @Path("/beannoarg") public String postbeannoarg(final org.jooby.Request req, final BeanNoArg bean) throws Exception { assertEquals(req.param("name").value(), bean.getName()); assertEquals(req.param("age").intValue(), (int) bean.getAge().get()); return "OK"; } @org.jooby.mvc.GET @Path("/defaultConstructor") public String invalidbean(final DefConstBean bean) throws Exception { return "OK"; } } { get("/ibean", req -> { IBean bean = req.params().to(IBean.class); assertEquals(req.param("name").value(), bean.name()); assertEquals(req.param("valid").booleanValue(), bean.isValid()); assertEquals(req.param("age").intValue(), bean.getAge()); return "OK"; }); post("/ibean", req -> { IBean bean = req.form(IBean.class); assertEquals(req.param("name").value(), bean.name()); assertEquals(req.param("valid").booleanValue(), bean.isValid()); assertEquals(req.param("age").intValue(), bean.getAge()); return "OK"; }); get("/beanwithargs", req -> { BeanWithArgs bean = req.params().to(BeanWithArgs.class); assertEquals(req.param("name").value(), bean.name); assertEquals(req.param("age").intValue(), (int) bean.age.get()); return "OK"; }); get("/defaultConstructor", req -> { req.form(DefConstBean.class); return "OK"; }); post("/beanwithargs", req -> { BeanWithArgs bean = req.form(BeanWithArgs.class); assertEquals(req.param("name").value(), bean.name); assertEquals(req.param("age").intValue(), (int) bean.age.get()); return "OK"; }); get("/beannoarg", req -> { BeanNoArg bean = req.params().to(BeanNoArg.class); assertEquals(req.param("name").value(), bean.getName()); assertEquals(req.param("age").intValue(), (int) bean.getAge().get()); return "OK"; }); post("/beannoarg", req -> { BeanNoArg bean = req.form(BeanNoArg.class); assertEquals(req.param("name").value(), bean.getName()); assertEquals(req.param("age").intValue(), (int) bean.getAge().get()); return "OK"; }); use(Resource.class); } @Test public void getibean() throws Exception { request() .get("/ibean?name=edgar&valid=true&age=17") .expect("OK"); request() .get("/r/ibean?name=edgar&valid=true&age=17") .expect("OK"); } @Test public void getbeanwithargs() throws Exception { request() .get("/beanwithargs?name=edgar&age=17") .expect("OK"); request() .get("/r/beanwithargs?name=edgar&age=17") .expect("OK"); } @Test public void getbeannoarg() throws Exception { request() .get("/beannoarg?name=edgar&age=17") .expect("OK"); request() .get("/r/beannoarg?name=edgar&age=17") .expect("OK"); } @Test public void defaultConstructor() throws Exception { request() .get("/defaultConstructor?name=edgar&age=17") .expect(200); request() .get("/r/defaultConstructor?name=edgar&age=17") .expect(200); } @Test public void postibean() throws Exception { request() .post("/ibean") .form() .add("name", "edgar") .add("age", 34) .add("valid", false) .expect("OK"); request() .post("/r/ibean") .form() .add("name", "edgar") .add("age", 34) .add("valid", false) .expect("OK"); request() .post("/ibean") .multipart() .add("name", "edgar") .add("age", 34) .add("valid", false) .expect("OK"); request() .post("/r/ibean") .multipart() .add("name", "edgar") .add("age", 34) .add("valid", false) .expect("OK"); } @Test public void postbeanwithargs() throws Exception { request() .post("/beanwithargs") .form() .add("name", "edgar") .add("age", 34) .expect("OK"); request() .post("/r/beanwithargs") .form() .add("name", "edgar") .add("age", 34) .expect("OK"); } @Test public void postbeannoarg() throws Exception { request() .post("/beannoarg") .form() .add("name", "edgar") .add("age", 34) .expect("OK"); request() .post("/r/beannoarg") .form() .add("name", "edgar") .add("age", 34) .expect("OK"); } }