package org.pac4j.play.http; import org.junit.Before; import org.junit.Test; import org.pac4j.core.context.HttpConstants; import org.pac4j.core.exception.TechnicalException; import org.pac4j.core.http.HttpActionAdapter; import org.pac4j.core.util.TestsConstants; import org.pac4j.core.util.TestsHelper; import org.pac4j.play.PlayWebContext; import play.mvc.Http; import play.mvc.Result; import play.test.Helpers; import play.test.WithApplication; import java.io.IOException; import java.util.HashMap; import java.util.Map; import static org.junit.Assert.*; import static org.mockito.Mockito.*; /** * Tests {@link DefaultHttpActionAdapter}. * * @author Jerome Leleu * @since 2.3.0 */ public final class DefaultHttpActionAdapterTests extends WithApplication implements TestsConstants{ private HttpActionAdapter<Result, PlayWebContext> adapter; private PlayWebContext context; @Before public void setUp() { adapter = new DefaultHttpActionAdapter(); context = mock(PlayWebContext.class); } protected String getBody(final Result result) throws IOException { return Helpers.contentAsString(result); } @Test public void testUnauthorized() throws IOException { final Result result = (Result) adapter.adapt(HttpConstants.UNAUTHORIZED, null); assertEquals(401, result.status()); assertEquals("authentication required", getBody(result)); } @Test public void testForbidden() throws IOException { final Result result = (Result) adapter.adapt(HttpConstants.FORBIDDEN, null); assertEquals(403, result.status()); assertEquals("forbidden", getBody(result)); } @Test public void testRedirect() throws IOException { final Http.Context ctx = mock(Http.Context.class); when(context.getJavaContext()).thenReturn(ctx); final Http.Response response = mock(Http.Response.class); when(ctx.response()).thenReturn(response); final Map<String, String> headers = new HashMap<>(); headers.put(HttpConstants.LOCATION_HEADER, PAC4J_URL); when(response.getHeaders()).thenReturn(headers); final Result result = (Result) adapter.adapt(HttpConstants.TEMP_REDIRECT, context); assertEquals(303, result.status()); assertEquals(PAC4J_URL, result.redirectLocation().get()); } @Test public void testBadRequest() throws IOException { final Result result = (Result) adapter.adapt(HttpConstants.BAD_REQUEST, context); assertEquals(400, result.status()); assertEquals("bad request", getBody(result)); } @Test public void testOk() throws IOException { when(context.getResponseContent()).thenReturn(VALUE); final Result result = (Result) adapter.adapt(HttpConstants.OK, context); assertEquals(200, result.status()); assertEquals(VALUE, getBody(result)); } @Test public void testUnsupported() throws IOException { TestsHelper.expectException(() -> adapter.adapt(HttpConstants.CREATED, null), TechnicalException.class, "Unsupported HTTP action: " + HttpConstants.CREATED); } }