package org.jooby.issues; import java.util.ArrayList; import java.util.List; import java.util.Optional; import org.jooby.test.ServerFeature; import org.junit.Test; public class Issue480 extends ServerFeature { public static class Member { String firstname; String lastname; @Override public String toString() { return firstname + " " + lastname; } } public static class Group { List<Member> members; @Override public String toString() { return Optional.ofNullable(members).map(it -> it.toString()).orElse("[]"); } } public static class Person { String name; List<Person> children = new ArrayList<>(); @Override public String toString() { return name + children; } } public static class RListOfStr { ListOfStr str; @Override public String toString() { return str.toString(); } } public static class ListOfStr { List<String> children = new ArrayList<>(); @Override public String toString() { return children.toString(); } } public static class ListOfInt { List<Integer> children = new ArrayList<>(); @Override public String toString() { return children.toString(); } } { get("/480", req -> { return req.params().toList(Member.class); }); get("/480/nested", req -> { return req.params(Group.class); }); get("/480/tree", req -> { return req.params(Person.class); }); get("/480/listOfStr", req -> { return req.params(ListOfStr.class); }); get("/480/rlistOfStr", req -> { return req.params(RListOfStr.class); }); get("/480/listOfInt", req -> { return req.params(ListOfInt.class); }); } @Test public void rootList() throws Exception { request() .get("/480?[0][firstname]=Pedro&[0][lastname]=PicaPiedra") .expect("[Pedro PicaPiedra]"); request() .get( "/480?[0][firstname]=Pedro&[0][lastname]=PicaPiedra&[1][firstname]=Pablo&[1][lastname]=Marmol") .expect("[Pedro PicaPiedra, Pablo Marmol]"); } @Test public void nestedList() throws Exception { request() .get("/480/nested?members[0][firstname]=Pedro&members[0][lastname]=PicaPiedra") .expect("[Pedro PicaPiedra]"); request() .get( "/480/nested?members[0][firstname]=Pedro&members[0][lastname]=PicaPiedra&members[1][firstname]=Pablo&members[1][lastname]=Marmol") .expect("[Pedro PicaPiedra, Pablo Marmol]"); } @Test public void skipUnknownPath() throws Exception { request() .get("/480/nested?unknown=x") .expect("[]"); request() .get("/480/nested?members[0][firstname]=Pedro&members[0][lastname]=PicaPiedra&unknown=x") .expect("[Pedro PicaPiedra]"); } @Test public void skipUnknownNestedPath() throws Exception { request() .get( "/480/nested?members[0][firstname]=Pedro&members[0][lastname]=PicaPiedra&members[0][unknown]=x") .expect("[Pedro PicaPiedra]"); } @Test public void shouldTraverseTreeLike() throws Exception { request() .get("/480/tree?name=A&children[0][name]=B") .expect("A[B[]]"); request() .get("/480/tree?name=A&children[0][name]=B&children[1][name]=C") .expect("A[B[], C[]]"); } @Test public void shouldWorkWithListOfStr() throws Exception { request() .get("/480/listOfStr?children[0]=foo") .expect("[foo]"); request() .get("/480/listOfStr?children[0]=foo&children[1]=bar") .expect("[foo, bar]"); request() .get("/480/rlistOfStr?str[children][0]=foo&str[children][1]=bar") .expect("[foo, bar]"); } @Test public void shouldGetItemsInOrder() throws Exception { request() .get("/480/listOfStr?children[1]=1&children[2]=2&children[0]=0") .expect("[0, 1, 2]"); } @Test public void shouldWorkWithListInt() throws Exception { request() .get("/480/listOfInt?children[0]=1") .expect("[1]"); request() .get("/480/listOfInt?children[0]=1&children[1]=2") .expect("[1, 2]"); } }