Search in sources :

Example 51 with Url

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();
}
Also used : PageParameters(org.apache.wicket.request.mapper.parameter.PageParameters) Url(org.apache.wicket.request.Url)

Example 52 with Url

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;
    }
}
Also used : Map(java.util.Map) HashMap(java.util.HashMap) Url(org.apache.wicket.request.Url)

Example 53 with Url

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));
}
Also used : RequestCycle(org.apache.wicket.request.cycle.RequestCycle) MockHttpServletResponse(org.apache.wicket.protocol.http.mock.MockHttpServletResponse) HttpServletResponse(jakarta.servlet.http.HttpServletResponse) UrlRenderer(org.apache.wicket.request.UrlRenderer) Url(org.apache.wicket.request.Url) Test(org.junit.jupiter.api.Test)

Example 54 with 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());
}
Also used : MockHttpServletResponse(org.apache.wicket.protocol.http.mock.MockHttpServletResponse) HttpServletResponse(jakarta.servlet.http.HttpServletResponse) Url(org.apache.wicket.request.Url) Test(org.junit.jupiter.api.Test)

Example 55 with Url

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 &lt;ajax-response&gt; 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());
}
Also used : HttpServletRequest(jakarta.servlet.http.HttpServletRequest) MockHttpServletRequest(org.apache.wicket.protocol.http.mock.MockHttpServletRequest) StringWriter(java.io.StringWriter) MockHttpServletResponse(org.apache.wicket.protocol.http.mock.MockHttpServletResponse) HttpServletResponse(jakarta.servlet.http.HttpServletResponse) Url(org.apache.wicket.request.Url) PrintWriter(java.io.PrintWriter) Test(org.junit.jupiter.api.Test)

Aggregations

Url (org.apache.wicket.request.Url)361 Test (org.junit.jupiter.api.Test)220 IRequestHandler (org.apache.wicket.request.IRequestHandler)145 PageParameters (org.apache.wicket.request.mapper.parameter.PageParameters)58 MockWebRequest (org.apache.wicket.mock.MockWebRequest)57 UrlRenderer (org.apache.wicket.request.UrlRenderer)57 RenderPageRequestHandler (org.apache.wicket.core.request.handler.RenderPageRequestHandler)51 IRequestablePage (org.apache.wicket.request.component.IRequestablePage)50 Test (org.junit.Test)46 PageProvider (org.apache.wicket.core.request.handler.PageProvider)40 ResourceReferenceRequestHandler (org.apache.wicket.request.handler.resource.ResourceReferenceRequestHandler)35 IPageProvider (org.apache.wicket.core.request.handler.IPageProvider)34 ResourceUrl (org.apache.wicket.request.resource.caching.ResourceUrl)33 BookmarkableListenerRequestHandler (org.apache.wicket.core.request.handler.BookmarkableListenerRequestHandler)27 ListenerRequestHandler (org.apache.wicket.core.request.handler.ListenerRequestHandler)26 Request (org.apache.wicket.request.Request)25 MockPage (org.apache.wicket.MockPage)22 BookmarkablePageRequestHandler (org.apache.wicket.core.request.handler.BookmarkablePageRequestHandler)18 BufferedWebResponse (org.apache.wicket.protocol.http.BufferedWebResponse)16 PageAndComponentProvider (org.apache.wicket.core.request.handler.PageAndComponentProvider)15