package org.jooby;
import java.util.List;
import java.util.Optional;
import javax.inject.Named;
import org.jooby.mvc.GET;
import org.jooby.mvc.Header;
import org.jooby.mvc.Path;
import org.jooby.test.ServerFeature;
import org.junit.Test;
public class HeaderParamFeature extends ServerFeature {
public enum VOWELS {
A,
B;
}
public static class Resource {
@GET
@Path("/boolean")
public Object booleanHeader(@Header final boolean h) {
return h;
}
@GET
@Path("/booleanList")
public Object booleanHeader(@Header final List<Boolean> h) {
return h.toString();
}
@GET
@Path("/booleanOptional")
public Object booleanHeader(@Header final Optional<Boolean> h) {
return h.toString();
}
@GET
@Path("/modifiedSince")
public Object modifiedSince(@Named("If-Modified-Since") @Header final Optional<Long> h) {
return h.orElse(-1l);
}
@GET
@Path("/int")
public Object intHeader(@Header final int h) {
return h;
}
@GET
@Path("/enum")
public Object enumHeader(@Header final VOWELS h) {
return h;
}
}
{
use(Resource.class);
}
@Test
public void booleanHeader() throws Exception {
request()
.get("/boolean")
.header("h", true)
.expect("true");
}
@Test
public void booleanListHeader() throws Exception {
request()
.get("/booleanList")
.header("h", true)
.header("h", false)
.expect("[true, false]");
}
@Test
public void booleanOptionalHeader() throws Exception {
request()
.get("/booleanOptional")
.expect("Optional.empty");
request()
.get("/booleanOptional")
.header("h", true)
.expect("Optional[true]");
}
@Test
public void modifiedSince() throws Exception {
request()
.get("/modifiedSince")
.expect("-1");
request()
.get("/modifiedSince")
.header("If-Modified-Since", "Mon, 14 Jul 2014 21:35:09 GMT")
.expect("1405373709000");
}
@Test
public void missingHeader() throws Exception {
request()
.get("/int")
.expect(400);
}
@Test
public void intHeader() throws Exception {
request()
.get("/int")
.header("h", "302")
.expect("302");
}
@Test
public void enumHeader() throws Exception {
request()
.get("/enum")
.header("h", "A")
.expect("A");
}
}