package org.exist.http.urlrewrite;
import java.util.HashMap;
import java.util.Map;
import org.easymock.EasyMock;
import javax.servlet.http.HttpServletRequest;
import org.exist.http.urlrewrite.XQueryURLRewrite.RequestWrapper;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertArrayEquals;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.replay;
import static org.easymock.EasyMock.verify;
/**
*
* @author aretter
*/
public class XQueryURLRewriteTest
{
@Test
public void adjustPathForSourceLookup_fullXmldbUri() {
XQueryURLRewrite rewriter = new XQueryURLRewrite();
String basePath = "xmldb:exist:///db/adamretter.org.uk/";
String path = "/db/adamretter.org.uk/blog/entries/some-entry.xml?edit";
String adjustedPath = rewriter.adjustPathForSourceLookup(basePath, path);
assertEquals(adjustedPath, "blog/entries/some-entry.xml?edit");
}
@Test
public void adjustPathForSourceLookup_dbUri() {
XQueryURLRewrite rewriter = new XQueryURLRewrite();
String basePath = "/";
String path = "/db/adamretter.org.uk/blog/entries/some-entry.xml?edit";
String adjustedPath = rewriter.adjustPathForSourceLookup(basePath, path);
assertEquals(adjustedPath, "adamretter.org.uk/blog/entries/some-entry.xml?edit");
}
@Test
public void adjustPathForSourceLookup_fsUri() {
XQueryURLRewrite rewriter = new XQueryURLRewrite();
String basePath = "/";
String path = "/xquery/functions.xql";
String adjustedPath = rewriter.adjustPathForSourceLookup(basePath, path);
assertEquals(adjustedPath, "xquery/functions.xql");
}
@Test
public void requestWrapper_copiesRequestParams() {
final Map<String, String[]> testParameterMap = new HashMap<String, String[]>();
testParameterMap.put("paramName1", new String[] {"value1", "value1.1"});
testParameterMap.put("paramName2", new String[] {"value2", "value2.1"});
HttpServletRequest mockHttpServletRequest = EasyMock.createMock(HttpServletRequest.class);
//standard request wrapper stuff
expect(mockHttpServletRequest.getContentType()).andReturn("text/xml");
//end standard request wrapper stuff
expect(mockHttpServletRequest.getParameterMap()).andReturn(testParameterMap);
replay(mockHttpServletRequest);
RequestWrapper wrapper = new RequestWrapper(mockHttpServletRequest);
verify(mockHttpServletRequest);
assertEquals(testParameterMap.size(), wrapper.getParameterMap().size());
for(String paramName : testParameterMap.keySet()) {
assertArrayEquals(testParameterMap.get(paramName), wrapper.getParameterMap().get(paramName));
}
}
@Test
public void requestWrapper_addsParamAftercopiesRequestParams() {
final Map<String, String[]> testParameterMap = new HashMap<String, String[]>();
testParameterMap.put("paramName1", new String[] {"value1", "value1.1"});
testParameterMap.put("paramName2", new String[] {"value2", "value2.1"});
final String newRequestParamName = "newParamName";
final String newRequestParamValue = "newParamValue";
HttpServletRequest mockHttpServletRequest = EasyMock.createMock(HttpServletRequest.class);
//standard request wrapper stuff
expect(mockHttpServletRequest.getContentType()).andReturn("text/xml");
//end standard request wrapper stuff
expect(mockHttpServletRequest.getParameterMap()).andReturn(testParameterMap);
replay(mockHttpServletRequest);
RequestWrapper wrapper = new RequestWrapper(mockHttpServletRequest);
wrapper.addParameter(newRequestParamName, newRequestParamValue);
verify(mockHttpServletRequest);
final Map<String, String[]> newTestParameterMap = new HashMap<String, String[]>();
newTestParameterMap.putAll(testParameterMap);
newTestParameterMap.put(newRequestParamName, new String[] {newRequestParamValue });
assertEquals(newTestParameterMap.size(), wrapper.getParameterMap().size());
for(String paramName : newTestParameterMap.keySet()) {
assertArrayEquals(newTestParameterMap.get(paramName), wrapper.getParameterMap().get(paramName));
}
}
}