/**
* $Id: RequestUtilsTest.java 105077 2012-02-24 22:54:29Z ottenhoff@longsight.com $
* $URL: https://source.sakaiproject.org/svn/entitybroker/trunk/utils/src/test/org/sakaiproject/entitybroker/util/request/RequestUtilsTest.java $
* RequestUtilsTest.java - entity-broker - Jul 28, 2008 7:55:59 AM - azeckoski
**************************************************************************
* Copyright (c) 2008, 2009 The Sakai Foundation
*
* Licensed under the Educational Community License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.opensource.org/licenses/ECL-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.sakaiproject.entitybroker.util.request;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import junit.framework.TestCase;
import org.sakaiproject.entitybroker.entityprovider.extension.Formats;
import org.sakaiproject.entitybroker.entityprovider.search.Order;
import org.sakaiproject.entitybroker.entityprovider.search.Search;
import org.sakaiproject.entitybroker.util.http.EntityHttpServletRequest;
import org.sakaiproject.entitybroker.util.http.EntityHttpServletResponse;
import org.sakaiproject.entitybroker.util.request.RequestUtils;
/**
* testing the request utilities
*
* @author Aaron Zeckoski (azeckoski @ gmail.com)
*/
public class RequestUtilsTest extends TestCase {
public void testMakeSearchFromRequestStorage() {
Search search = null;
Map<String, Object> params = new HashMap<String, Object>();
params.clear();
search = RequestUtils.makeSearchFromRequestParams(params);
assertNotNull(search);
assertTrue( search.isEmpty() );
assertEquals(0, search.getRestrictions().length);
search.addOrder( new Order("test") );
params.clear();
params.put("test", "stuff");
search = RequestUtils.makeSearchFromRequestParams(params);
assertNotNull(search);
assertFalse( search.isEmpty() );
assertEquals(1, search.getRestrictions().length);
assertNotNull( search.getRestrictionByProperty("test") );
assertEquals("stuff", search.getRestrictionByProperty("test").value);
// make sure _method is ignored
params.clear();
params.put("test", "stuff");
params.put("_method", "PUT");
search = RequestUtils.makeSearchFromRequestParams(params);
assertNotNull(search);
assertFalse( search.isEmpty() );
assertEquals(1, search.getRestrictions().length);
assertNotNull( search.getRestrictionByProperty("test") );
assertEquals("stuff", search.getRestrictionByProperty("test").value);
params.clear();
params.put("test", "stuff");
params.put("other", 1000);
search = RequestUtils.makeSearchFromRequestParams(params);
assertNotNull(search);
assertFalse( search.isEmpty() );
assertEquals(2, search.getRestrictions().length);
assertNotNull( search.getRestrictionByProperty("test") );
assertEquals("stuff", search.getRestrictionByProperty("test").value);
assertNotNull( search.getRestrictionByProperty("other") );
assertEquals(1000, search.getRestrictionByProperty("other").value);
// test paging params
params.clear();
params.put("test", "stuff");
params.put("_limit", "10");
params.put("_start", "5");
search = RequestUtils.makeSearchFromRequestParams(params);
assertNotNull(search);
assertFalse( search.isEmpty() );
assertEquals(1, search.getRestrictions().length);
assertNotNull( search.getRestrictionByProperty("test") );
assertEquals("stuff", search.getRestrictionByProperty("test").value);
assertEquals(10, search.getLimit());
assertEquals(5, search.getStart());
params.clear();
params.put("test", "stuff");
params.put("_page", "3");
params.put("_perpage", "5");
search = RequestUtils.makeSearchFromRequestParams(params);
assertNotNull(search);
assertFalse( search.isEmpty() );
assertEquals(1, search.getRestrictions().length);
assertNotNull( search.getRestrictionByProperty("test") );
assertEquals("stuff", search.getRestrictionByProperty("test").value);
assertEquals(5, search.getLimit());
assertEquals(10, search.getStart());
}
public void testMakeSearchFromRequestStorageOrder() {
Search search = null;
Map<String, Object> params = new HashMap<String, Object>();
params.clear();
params.put("test", "stuff");
params.put("_order", "name");
search = RequestUtils.makeSearchFromRequestParams(params);
assertNotNull(search);
assertFalse( search.isEmpty() );
assertEquals(1, search.getRestrictions().length);
assertNotNull( search.getRestrictionByProperty("test") );
assertEquals("stuff", search.getRestrictionByProperty("test").value);
assertEquals(0, search.getLimit());
assertEquals(0, search.getStart());
assertEquals(1, search.getOrders().length);
assertEquals("name", search.getOrders()[0].getProperty());
assertEquals(true, search.getOrders()[0].isAscending());
params.clear();
params.put("test", "stuff");
params.put("_order", "name_reverse");
search = RequestUtils.makeSearchFromRequestParams(params);
assertNotNull(search);
assertFalse( search.isEmpty() );
assertEquals(1, search.getRestrictions().length);
assertNotNull( search.getRestrictionByProperty("test") );
assertEquals("stuff", search.getRestrictionByProperty("test").value);
assertEquals(0, search.getLimit());
assertEquals(0, search.getStart());
assertEquals(1, search.getOrders().length);
assertEquals("name", search.getOrders()[0].getProperty());
assertEquals(false, search.getOrders()[0].isAscending());
params.clear();
params.put("test", "stuff");
params.put("_order", "name,email");
search = RequestUtils.makeSearchFromRequestParams(params);
assertNotNull(search);
assertFalse( search.isEmpty() );
assertEquals(1, search.getRestrictions().length);
assertNotNull( search.getRestrictionByProperty("test") );
assertEquals("stuff", search.getRestrictionByProperty("test").value);
assertEquals(0, search.getLimit());
assertEquals(0, search.getStart());
assertEquals(2, search.getOrders().length);
assertEquals("name", search.getOrders()[0].getProperty());
assertEquals(true, search.getOrders()[0].isAscending());
assertEquals("email", search.getOrders()[1].getProperty());
assertEquals(true, search.getOrders()[1].isAscending());
params.clear();
params.put("test", "stuff");
params.put("_order", "name,email_desc,phone_asc");
search = RequestUtils.makeSearchFromRequestParams(params);
assertNotNull(search);
assertFalse( search.isEmpty() );
assertEquals(1, search.getRestrictions().length);
assertNotNull( search.getRestrictionByProperty("test") );
assertEquals("stuff", search.getRestrictionByProperty("test").value);
assertEquals(0, search.getLimit());
assertEquals(0, search.getStart());
assertEquals(3, search.getOrders().length);
assertEquals("name", search.getOrders()[0].getProperty());
assertEquals(true, search.getOrders()[0].isAscending());
assertEquals("email", search.getOrders()[1].getProperty());
assertEquals(false, search.getOrders()[1].isAscending());
assertEquals("phone", search.getOrders()[2].getProperty());
assertEquals(true, search.getOrders()[2].isAscending());
}
/**
* Test method for {@link org.sakaiproject.entitybroker.util.request.RequestUtils#setResponseEncoding(java.lang.String, javax.servlet.http.HttpServletResponse)}.
*/
public void testSetResponseEncoding() {
EntityHttpServletResponse res = new EntityHttpServletResponse();
RequestUtils.setResponseEncoding(Formats.XML, res);
assertEquals(Formats.UTF_8, res.getCharacterEncoding());
assertEquals(Formats.XML_MIME_TYPE, res.getContentType());
}
public void testShortComparator() {
ArrayList<String> l = new ArrayList<String>();
l.add("E");
l.add("DD");
l.add("BBBBB");
l.add("CCC");
l.add("AAAAAAAAAA");
Collections.sort(l, new RequestUtils.ShortestStringLastComparator());
assertNotNull(l);
assertEquals("AAAAAAAAAA", l.get(0));
assertEquals("BBBBB", l.get(1));
assertEquals("CCC", l.get(2));
assertEquals("DD", l.get(3));
assertEquals("E", l.get(4));
}
public void testFindAndHandleFormat() {
EntityHttpServletRequest req = new EntityHttpServletRequest("/stuff/111.xml");
EntityHttpServletResponse res = new EntityHttpServletResponse();
String format = null;
req = new EntityHttpServletRequest("/stuff/111.xml");
res = new EntityHttpServletResponse();
format = RequestUtils.findAndHandleFormat(req, res, null);
assertNotNull(format);
assertEquals(Formats.XML, format);
req = new EntityHttpServletRequest("/stuff/111.html");
res = new EntityHttpServletResponse();
format = RequestUtils.findAndHandleFormat(req, res, null);
assertNotNull(format);
assertEquals(Formats.HTML, format);
req = new EntityHttpServletRequest("/stuff/111.json");
res = new EntityHttpServletResponse();
format = RequestUtils.findAndHandleFormat(req, res, null);
assertNotNull(format);
assertEquals(Formats.JSON, format);
req = new EntityHttpServletRequest("/stuff/111");
res = new EntityHttpServletResponse();
format = RequestUtils.findAndHandleFormat(req, res, null);
assertNotNull(format);
assertEquals(Formats.HTML, format);
// test the accept header works
req = new EntityHttpServletRequest("/stuff/111");
req.addHeader("Accept", Formats.XML_MIME_TYPE);
res = new EntityHttpServletResponse();
format = RequestUtils.findAndHandleFormat(req, res, null);
assertNotNull(format);
assertEquals(Formats.XML, format);
req = new EntityHttpServletRequest("/stuff/111");
req.addHeader("Accept", Formats.JSON_MIME_TYPE, Formats.TXT_MIME_TYPE, "text/*", "*/*");
res = new EntityHttpServletResponse();
format = RequestUtils.findAndHandleFormat(req, res, null);
assertNotNull(format);
assertEquals(Formats.JSON, format);
req = new EntityHttpServletRequest("/stuff/111");
req.addHeader("Accept", "fakey/*", "something/thing", "*/*");
res = new EntityHttpServletResponse();
format = RequestUtils.findAndHandleFormat(req, res, null);
assertNotNull(format);
assertEquals(Formats.HTML, format);
}
}