package org.jboss.resteasy.test.request;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.jboss.resteasy.core.interception.PreMatchContainerRequestContext;
import org.jboss.resteasy.mock.MockHttpRequest;
import org.jboss.resteasy.spi.HttpRequest;
import org.junit.Before;
import org.junit.Test;
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.core.MultivaluedHashMap;
import javax.ws.rs.core.MultivaluedMap;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Collections;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
/**
* @tpSubChapter Request
* @tpChapter Integration tests
* @tpSince RESTEasy 3.0.17
* @tpTestCaseDetails Regression test for JBEAP-4707
*/
public class ContainerRequestContextTest {
private HttpRequest request;
protected static final Logger logger = LogManager.getLogger(ContainerRequestContextTest.class.getName());
@Before
public void before() throws URISyntaxException {
request = MockHttpRequest.create("GET", "http://foo.bar?foo=foo&bar=bar");
}
/**
* @tpTestDetails Test that ContainerRequestContext setRequestUri clear previous query parameters
* @tpSince RESTEasy 3.0.17
*/
@Test
public void testQueryParamatersClear() throws URISyntaxException {
ContainerRequestContext containerRequestContext = new PreMatchContainerRequestContext(request);
logger.info("request uri: " + containerRequestContext.getUriInfo().getRequestUri());
assertEquals("Wrong count of parameters in getUriInfo response", 2, containerRequestContext.getUriInfo().getQueryParameters().size());
MultivaluedMap<String, String> expected = new MultivaluedHashMap<>();
expected.put("foo", Collections.singletonList("foo"));
expected.put("bar", Collections.singletonList("bar"));
assertEquals("Wrong parameter in getUriInfo response", expected, containerRequestContext.getUriInfo().getQueryParameters());
containerRequestContext.setRequestUri(new URI("http://foo.bar"));
logger.info("request uri: " + containerRequestContext.getUriInfo().getRequestUri());
assertTrue("Wrong count of parameters in getUriInfo response", containerRequestContext.getUriInfo().getQueryParameters().isEmpty());
containerRequestContext.setRequestUri(new URI("http://foo.bar?foo=foo"));
logger.info("request uri: " + containerRequestContext.getUriInfo().getRequestUri());
expected = new MultivaluedHashMap<>();
expected.put("foo", Collections.singletonList("foo"));
assertEquals("Wrong parameter in getUriInfo response", expected, containerRequestContext.getUriInfo().getQueryParameters());
}
}