package io.dropwizard.jersey.optional; import com.codahale.metrics.MetricRegistry; import io.dropwizard.jersey.AbstractJerseyTest; import io.dropwizard.jersey.DropwizardResourceConfig; import org.junit.Test; import javax.ws.rs.FormParam; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.Application; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import java.util.Optional; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.failBecauseExceptionWasNotThrown; public class OptionalMessageBodyWriterTest extends AbstractJerseyTest { @Override protected Application configure() { return DropwizardResourceConfig.forTesting(new MetricRegistry()) .register(new EmptyOptionalExceptionMapper()) .register(OptionalReturnResource.class); } @Test public void presentOptionalsReturnTheirValue() throws Exception { assertThat(target("optional-return") .queryParam("id", "woo").request() .get(String.class)) .isEqualTo("woo"); } @Test public void presentOptionalsReturnTheirValueWithResponse() throws Exception { assertThat(target("optional-return/response-wrapped") .queryParam("id", "woo").request() .get(String.class)) .isEqualTo("woo"); } @Test public void absentOptionalsThrowANotFound() throws Exception { try { target("optional-return").request().get(String.class); failBecauseExceptionWasNotThrown(WebApplicationException.class); } catch (WebApplicationException e) { assertThat(e.getResponse().getStatus()) .isEqualTo(404); } } @Path("optional-return") @Produces(MediaType.TEXT_PLAIN) public static class OptionalReturnResource { @GET public Optional<String> showWithQueryParam(@QueryParam("id") String id) { return Optional.ofNullable(id); } @POST public Optional<String> showWithFormParam(@FormParam("id") String id) { return Optional.ofNullable(id); } @Path("response-wrapped") @GET public Response showWithQueryParamResponse(@QueryParam("id") String id) { return Response.ok(Optional.ofNullable(id)).build(); } } }