package org.jooby.issues;
import java.net.URISyntaxException;
import java.nio.ByteBuffer;
import org.jooby.test.ServerFeature;
import org.junit.Test;
public class Issue444 extends ServerFeature {
{
parser((type, ctxt) -> {
if (type.getRawType() == ByteBuffer.class) {
return ctxt.body(body -> {
return ByteBuffer.wrap(body.bytes());
});
}
return ctxt.next();
});
post("/444", req -> {
ByteBuffer buffer = req.body(ByteBuffer.class);
return buffer.remaining();
});
post("/444/raw", req -> {
return req.body(String.class);
});
}
@Test
public void shouldAcceptPostWithoutContentType() throws URISyntaxException, Exception {
request()
.post("/444")
.body("abc", null)
.expect("3");
}
@Test
public void shouldFavorCustomParserOnFormUrlEncoded() throws URISyntaxException, Exception {
request()
.post("/444")
.body("abc", "application/x-www-form-urlencoded")
.expect("3");
}
@Test
public void shouldFavorCustomParserOnMultipart() throws URISyntaxException, Exception {
request()
.post("/444")
.body("abc", "multipart/form-data")
.expect("3");
}
@Test
public void shouldGetRawBody() throws URISyntaxException, Exception {
request()
.post("/444/raw")
.form()
.add("foo", "bar")
.add("bar", "foo")
.expect("foo=bar&bar=foo");
request()
.post("/444/raw")
.body("--ylYSWaNWL2lXy3vBYw458nuB9UDehD5o6iHZuLK\n" +
"Content-Disposition: form-data; name=\"foo\"\n" +
"Content-Type: text/plain\n" +
"Content-Transfer-Encoding: 8bit\n" +
"\n" +
"bar\n" +
"--ylYSWaNWL2lXy3vBYw458nuB9UDehD5o6iHZuLK\n" +
"Content-Disposition: form-data; name=\"bar\"; filename=\"foo.txt\"\n" +
"Content-Type: text/plain\n" +
"Content-Transfer-Encoding: binary\n" +
"\n" +
"foo\n" +
"--ylYSWaNWL2lXy3vBYw458nuB9UDehD5o6iHZuLK--", "multipart/form-data")
.expect("--ylYSWaNWL2lXy3vBYw458nuB9UDehD5o6iHZuLK\n" +
"Content-Disposition: form-data; name=\"foo\"\n" +
"Content-Type: text/plain\n" +
"Content-Transfer-Encoding: 8bit\n" +
"\n" +
"bar\n" +
"--ylYSWaNWL2lXy3vBYw458nuB9UDehD5o6iHZuLK\n" +
"Content-Disposition: form-data; name=\"bar\"; filename=\"foo.txt\"\n" +
"Content-Type: text/plain\n" +
"Content-Transfer-Encoding: binary\n" +
"\n" +
"foo\n" +
"--ylYSWaNWL2lXy3vBYw458nuB9UDehD5o6iHZuLK--");
}
}