Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,8 @@ public String getScheme() {

@Override
public String getFullRequestURL() {
return getScheme() + "://" + getServerName() + ":" + getServerPort() + req.path();
String query = req.queryString().map(it -> "?" + it).orElse("");
return getScheme() + "://" + getServerName() + ":" + getServerPort() + req.path() + query;
}

private Map<String, String[]> params(final Request req) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -489,6 +489,7 @@ public void fullRequestURL() throws Exception {
expect(req.hostname()).andReturn("localhost");
expect(req.port()).andReturn(8080);
expect(req.path()).andReturn("/login");
expect(req.queryString()).andReturn(Optional.empty());
})
.run(unit -> {
AuthContext ctx = new AuthContext(unit.get(Request.class), unit.get(Response.class));
Expand Down
62 changes: 62 additions & 0 deletions jooby-pac4j/src/test/java/org/jooby/pac4j/Issue599.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
package org.jooby.pac4j;

import static org.easymock.EasyMock.expect;
import static org.junit.Assert.assertEquals;

import java.util.Map;
import java.util.Optional;

import org.jooby.Err;
import org.jooby.Mutant;
import org.jooby.Request;
import org.jooby.Response;
import org.jooby.Status;
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 com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;

@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.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());
});
}

}