package org.jooby.pac4j; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import org.jooby.*; import org.jooby.internal.pac4j.AuthContext; import org.jooby.internal.pac4j.AuthSerializer; import org.jooby.test.MockUnit; import org.jooby.test.MockUnit.Block; import org.junit.Test; import org.junit.runner.RunWith; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import java.util.Map; import java.util.Optional; import static org.easymock.EasyMock.*; import static org.junit.Assert.*; @RunWith(PowerMockRunner.class) @PrepareForTest({AuthContext.class, AuthSerializer.class}) public class Issue599 { private Block params = unit -> { Mutant param = unit.get(Mutant.class); expect(param.toList()).andReturn(ImmutableList.of("v1")); expect(param.toList()).andThrow(new Err(Status.BAD_REQUEST)); Map<String, Mutant> map = ImmutableMap.of("p1", param, "p2", param); Mutant params = unit.mock(Mutant.class); expect(params.toMap()).andReturn(map); Request req = unit.get(Request.class); expect(req.params()).andReturn(params); }; @Test public void shouldKeepQueryString() throws Exception { new MockUnit(Request.class, Response.class, Mutant.class) .expect(params) .expect(unit -> { Request req = unit.get(Request.class); expect(req.secure()).andReturn(false); expect(req.hostname()).andReturn("localhost"); expect(req.port()).andReturn(8080); expect(req.path()).andReturn("/foo"); expect(req.contextPath()).andReturn(""); expect(req.queryString()).andReturn(Optional.of("bar=1")); }) .run(unit -> { AuthContext ctx = new AuthContext(unit.get(Request.class), unit.get(Response.class)); assertEquals("http://localhost:8080/foo?bar=1", ctx.getFullRequestURL()); }); } @Test public void shouldKeepQueryStringWithContextpath() throws Exception { new MockUnit(Request.class, Response.class, Mutant.class) .expect(params) .expect(unit -> { Request req = unit.get(Request.class); expect(req.secure()).andReturn(false); expect(req.hostname()).andReturn("localhost"); expect(req.port()).andReturn(8080); expect(req.path()).andReturn("/foo"); expect(req.contextPath()).andReturn("/cpath"); expect(req.queryString()).andReturn(Optional.of("bar=1")); }) .run(unit -> { AuthContext ctx = new AuthContext(unit.get(Request.class), unit.get(Response.class)); assertEquals("http://localhost:8080/cpath/foo?bar=1", ctx.getFullRequestURL()); }); } }