use of org.apache.wicket.request.Url in project wicket by apache.
the class BaseWicketTester method urlFor.
/**
* @param link
* @return url for Link
*/
public String urlFor(Link<?> link) {
Args.notNull(link, "link");
Url url = Url.parse(link.urlForListener(new PageParameters()).toString());
return transform(url).toString();
}
use of org.apache.wicket.request.Url in project wicket by apache.
the class BaseWicketTester method processRequest.
/**
* Process the request. This is a fairly central function and is almost always invoked for
* executing the request.
* <p>
* You may subclass processRequest it, to monitor or change any pre-configured value. Request
* headers can be configured more easily by calling {@link #addRequestHeader(String, String)}.
*
* @param forcedRequest
* Can be null.
* @param forcedRequestHandler
* Can be null.
* @param redirect
* @return true, if process was executed successfully
*/
protected boolean processRequest(final MockHttpServletRequest forcedRequest, final IRequestHandler forcedRequestHandler, final boolean redirect) {
if (forcedRequest != null) {
request = forcedRequest;
}
forcedHandler = forcedRequestHandler;
if (!redirect && getRequest().getHeader("Wicket-Ajax") == null) {
lastRenderedPage = null;
}
// Add or replace any system provided header entry with the user provided.
if ((request != null) && (preHeader != null)) {
for (Map.Entry<String, String> entry : preHeader.entrySet()) {
if (Strings.isEmpty(entry.getKey()) == false) {
request.setHeader(entry.getKey(), entry.getValue());
}
}
// Reset the user provided headers
preHeader = null;
}
applyRequest();
requestCycle.scheduleRequestHandlerAfterCurrent(null);
try {
if (!requestCycle.processRequestAndDetach()) {
return false;
}
} finally {
recordRequestResponse();
setupNextRequestCycle();
}
try {
if (isFollowRedirects() && lastResponse.isRedirect()) {
if (redirectCount++ >= 100) {
throw new AssertionError("Possible infinite redirect detected. Bailing out.");
}
Url newUrl = Url.parse(lastResponse.getRedirectLocation(), Charset.forName(request.getCharacterEncoding()));
if (isExternalRedirect(lastRequest.getUrl(), newUrl)) {
// check #assertRedirectUrl
return true;
}
if (newUrl.isFull() || newUrl.isContextAbsolute()) {
request.setUrl(newUrl);
final String protocol = newUrl.getProtocol();
if (protocol != null) {
request.setScheme(protocol);
}
request.setSecure("https".equals(protocol));
if (newUrl.getHost() != null) {
request.setServerName(newUrl.getHost());
}
if (newUrl.getPort() != null) {
request.setServerPort(newUrl.getPort());
}
} else {
// append redirect URL to current URL (what browser would do)
Url mergedURL = new Url(lastRequest.getUrl().getSegments(), newUrl.getQueryParameters());
mergedURL.concatSegments(newUrl.getSegments());
request.setUrl(mergedURL);
}
processRequest(null, null, true);
--redirectCount;
}
return true;
} finally {
redirectCount = 0;
}
}
use of org.apache.wicket.request.Url in project wicket by apache.
the class ServletWebResponseTest method encodeRedirectAbsoluteUrl.
/**
* WICKET-5582 absolute URLs stay absolute after encoding
*/
@Test
void encodeRedirectAbsoluteUrl() {
final String url = "http://localhost:8080/path";
ServletWebRequest webRequest = mock(ServletWebRequest.class);
when(webRequest.isAjax()).thenReturn(Boolean.FALSE);
Url baseUrl = Url.parse("./baseUrl");
baseUrl.setProtocol("http");
baseUrl.setHost("someHost");
baseUrl.setPort(80);
when(webRequest.getClientUrl()).thenReturn(baseUrl);
UrlRenderer renderer = new UrlRenderer(webRequest);
RequestCycle requestCycle = mock(RequestCycle.class);
ThreadContext.setRequestCycle(requestCycle);
when(requestCycle.getUrlRenderer()).thenReturn(renderer);
HttpServletResponse httpServletResponse = mock(HttpServletResponse.class);
when(httpServletResponse.encodeRedirectURL(ArgumentMatchers.eq(url))).thenReturn(url + ";foo");
ServletWebResponse webResponse = new ServletWebResponse(webRequest, httpServletResponse);
assertEquals(url + ";foo", webResponse.encodeRedirectURL(url));
}
use of org.apache.wicket.request.Url in project wicket by apache.
the class ServletWebResponseTest method sendRedirect.
/**
* https://issues.apache.org/jira/browse/WICKET-3885
*
* Redirects in normal (non-Ajax) requests should call HttpServletResponse's sendRedirect()
* which cares to make the url absolute
*
* https://issues.apache.org/jira/browse/WICKET-4260
*
* Redirect to relative url should be stripped of leading dot
*
* @throws IOException
*/
@Test
void sendRedirect() throws IOException {
final String url = "./relative/path";
ServletWebRequest webRequest = mock(ServletWebRequest.class);
when(webRequest.isAjax()).thenReturn(Boolean.FALSE);
Url baseUrl = Url.parse("./baseUrl");
baseUrl.setProtocol("http");
baseUrl.setHost("someHost");
baseUrl.setPort(80);
when(webRequest.getClientUrl()).thenReturn(baseUrl);
HttpServletResponse httpServletResponse = mock(HttpServletResponse.class);
when(httpServletResponse.encodeRedirectURL(ArgumentMatchers.anyString())).thenReturn(url);
ServletWebResponse webResponse = new ServletWebResponse(webRequest, httpServletResponse);
webResponse.sendRedirect(url);
verify(httpServletResponse).sendRedirect("./relative/path");
assertTrue(webResponse.isRedirect());
}
use of org.apache.wicket.request.Url in project wicket by apache.
the class ServletWebResponseTest method sendRedirectAjax.
/**
* https://issues.apache.org/jira/browse/WICKET-3885
*
* Redirects in Ajax requests should produce <ajax-response> with relative url
*
* @throws IOException
*/
@Test
void sendRedirectAjax() throws IOException {
final String url = "./relative/path";
ServletWebRequest webRequest = mock(ServletWebRequest.class);
when(webRequest.isAjax()).thenReturn(Boolean.TRUE);
Url baseUrl = Url.parse("./baseUrl");
baseUrl.setProtocol("http");
baseUrl.setHost("someHost");
baseUrl.setPort(80);
when(webRequest.getClientUrl()).thenReturn(baseUrl);
HttpServletRequest httpServletRequest = mock(HttpServletRequest.class);
when(webRequest.getContainerRequest()).thenReturn(httpServletRequest);
when(httpServletRequest.getCharacterEncoding()).thenReturn("UTF-8");
HttpServletResponse httpServletResponse = mock(HttpServletResponse.class);
when(httpServletResponse.encodeRedirectURL(ArgumentMatchers.anyString())).thenReturn(url);
StringWriter writer = new StringWriter();
when(httpServletResponse.getWriter()).thenReturn(new PrintWriter(writer));
ServletWebResponse webResponse = new ServletWebResponse(webRequest, httpServletResponse);
webResponse.sendRedirect(url);
verify(httpServletResponse).setHeader("Ajax-Location", url);
verify(httpServletResponse).setContentType("text/xml;charset=UTF-8");
assertEquals("<ajax-response><redirect><![CDATA[./relative/path]]></redirect></ajax-response>", writer.toString());
assertTrue(webResponse.isRedirect());
}
Aggregations