package org.springside.modules.unit.orm; import static org.junit.Assert.*; import java.util.Date; import java.util.List; import org.joda.time.DateTime; import org.junit.Test; import org.springframework.mock.web.MockHttpServletRequest; import org.springside.modules.orm.PropertyFilter; import org.springside.modules.orm.PropertyFilter.MatchType; /** * PropertyFilter的测试类 * * @author calvin */ public class PropertyFilterTest { @Test public void createFilter() { //Boolean EQ filter PropertyFilter booleanEqFilter = new PropertyFilter("EQB_foo", "true"); assertEquals(MatchType.EQ, booleanEqFilter.getMatchType()); assertEquals(Boolean.class, booleanEqFilter.getPropertyClass()); assertEquals(true, booleanEqFilter.getMatchValue()); //Date LT filter PropertyFilter dateLtFilter = new PropertyFilter("LTD_foo", "2046-01-01"); assertEquals(MatchType.LT, dateLtFilter.getMatchType()); assertEquals(Date.class, dateLtFilter.getPropertyClass()); assertEquals("foo", dateLtFilter.getPropertyName()); assertEquals(new DateTime(2046, 1, 1, 0, 0, 0, 0).toDate(), dateLtFilter.getMatchValue()); //Integer GT filter PropertyFilter intGtFilter = new PropertyFilter("GTI_foo", "123"); assertEquals(MatchType.GT, intGtFilter.getMatchType()); assertEquals(Integer.class, intGtFilter.getPropertyClass()); assertEquals("foo", intGtFilter.getPropertyName()); assertEquals(123, intGtFilter.getMatchValue()); //Double LE filter PropertyFilter doubleLeFilter = new PropertyFilter("LEN_foo", "12.33"); assertEquals(MatchType.LE, doubleLeFilter.getMatchType()); assertEquals(Double.class, doubleLeFilter.getPropertyClass()); assertEquals("foo", doubleLeFilter.getPropertyName()); assertEquals(12.33, doubleLeFilter.getMatchValue()); //Long GE filter PropertyFilter longGeFilter = new PropertyFilter("GEL_foo", "123456789"); assertEquals(MatchType.GE, longGeFilter.getMatchType()); assertEquals(Long.class, longGeFilter.getPropertyClass()); assertEquals("foo", longGeFilter.getPropertyName()); assertEquals(123456789L, longGeFilter.getMatchValue()); //Like OR filter PropertyFilter likeOrFilter = new PropertyFilter("LIKES_foo_OR_bar", "hello"); assertEquals(MatchType.LIKE, likeOrFilter.getMatchType()); assertEquals(String.class, likeOrFilter.getPropertyClass()); assertArrayEquals(new String[] { "foo", "bar" }, likeOrFilter.getPropertyNames()); assertEquals("hello", likeOrFilter.getMatchValue()); } @Test public void createErrorFilter() throws Exception { int exceptionCount = 0; try { new PropertyFilter("ABS_foo", "hello"); } catch (IllegalArgumentException e) { exceptionCount++; } try { new PropertyFilter("GEX_foo", "hello"); } catch (IllegalArgumentException e) { exceptionCount++; } try { new PropertyFilter("EQS_", "hello"); } catch (IllegalArgumentException e) { exceptionCount++; } assertEquals(3, exceptionCount); } @Test public void buildPropertyFiltersFromHttpRequest() { //normal case MockHttpServletRequest request = new MockHttpServletRequest(); request.setParameter("filter_EQS_loginName", "abcd"); List<PropertyFilter> filters = PropertyFilter.buildFromHttpRequest(request); assertEquals(1, filters.size()); PropertyFilter filter = filters.get(0); assertEquals(PropertyFilter.MatchType.EQ, filter.getMatchType()); assertEquals("loginName", filter.getPropertyName()); assertEquals(String.class, filter.getPropertyClass()); assertEquals("abcd", filter.getMatchValue()); //filter prefix name is prefix request = new MockHttpServletRequest(); request.setParameter("prefix_EQS_loginName", "abcd"); filters = PropertyFilter.buildFromHttpRequest(request, "prefix"); assertEquals(1, filters.size()); assertEquals(PropertyFilter.MatchType.EQ, filters.get(0).getMatchType()); //ignore filter without value request = new MockHttpServletRequest(); request.setParameter("filter_EQS_loginName", ""); filters = PropertyFilter.buildFromHttpRequest(request); assertEquals(0, filters.size()); } }