package org.exist.http.urlrewrite; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.easymock.EasyMock; import static org.easymock.EasyMock.expect; import static org.easymock.EasyMock.verify; import static org.easymock.EasyMock.replay; import org.exist.Namespaces; import org.junit.Test; import static org.junit.Assert.assertEquals; import org.w3c.dom.Element; import org.w3c.dom.Node; /** * * @author aretter */ public class URLRewriteTest { @Test public void constructorAddsMultipleParameterValuesForSameParameterName() { final String ELEMENT_ADD_PARAMETER = "add-parameter"; final String PARAM_NAME = "param1"; final String PARAM_VALUE_1 = "value1.1"; final String PARAM_VALUE_2 = "value1.2"; Element mockConfig = EasyMock.createMock(Element.class); Element mockParameter1 = EasyMock.createMock(Element.class); Element mockParameter2 = EasyMock.createMock(Element.class); expect(mockConfig.hasAttribute("absolute")).andReturn(false); expect(mockConfig.hasAttribute("method")).andReturn(false); expect(mockConfig.hasChildNodes()).andReturn(true); expect(mockConfig.getFirstChild()).andReturn(mockParameter1); expect(mockParameter1.getNodeType()).andReturn(Node.ELEMENT_NODE); expect(mockParameter1.getNamespaceURI()).andReturn(Namespaces.EXIST_NS); expect(mockParameter1.getLocalName()).andReturn(ELEMENT_ADD_PARAMETER); expect(mockParameter1.getAttribute("name")).andReturn(PARAM_NAME); expect(mockParameter1.getAttribute("value")).andReturn(PARAM_VALUE_1); expect(mockParameter1.getNextSibling()).andReturn(mockParameter2); expect(mockParameter2.getNodeType()).andReturn(Node.ELEMENT_NODE); expect(mockParameter2.getNamespaceURI()).andReturn(Namespaces.EXIST_NS); expect(mockParameter2.getLocalName()).andReturn(ELEMENT_ADD_PARAMETER); expect(mockParameter2.getAttribute("name")).andReturn(PARAM_NAME); expect(mockParameter2.getAttribute("value")).andReturn(PARAM_VALUE_2); expect(mockParameter2.getNextSibling()).andReturn(null); replay(mockConfig, mockParameter1, mockParameter2); TestableURLRewrite urlRewrite = new TestableURLRewrite(mockConfig, null); verify(mockConfig, mockParameter1, mockParameter2); final Map<String, List<String>> testParameters = new HashMap<String, List<String>>(); List<String> values = new ArrayList<String>(); values.add(PARAM_VALUE_1); values.add(PARAM_VALUE_2); testParameters.put(PARAM_NAME, values); assertEquals(testParameters.size(), urlRewrite.getParameters().size()); for(String paramName : testParameters.keySet()) { assertEquals(testParameters.get(paramName), urlRewrite.getParameters().get(paramName)); } } private class TestableURLRewrite extends URLRewrite { public TestableURLRewrite(Element config, String uri) { super(config, uri); } public TestableURLRewrite(TestableURLRewrite other) { super(other); } public Map<String, List<String>> getParameters() { return parameters; } @Override public void doRewrite(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { throw new UnsupportedOperationException("Not supported yet."); } @Override protected URLRewrite copy() { return new TestableURLRewrite(this); } } }