View Javadoc

1   package net.sf.r4h;
2   
3   import static net.sf.r4h.Order.ascByDate;
4   import static net.sf.r4h.Order.ascByName;
5   import static net.sf.r4h.Order.ascByTime;
6   import static net.sf.r4h.Order.desc;
7   import static net.sf.r4h.Order.descByDate;
8   import static net.sf.r4h.Order.descByName;
9   import static net.sf.r4h.Order.descByTime;
10  import static net.sf.r4h.Restrictions.equal;
11  import static net.sf.r4h.Restrictions.example;
12  import static net.sf.r4h.Restrictions.greater;
13  import static net.sf.r4h.Restrictions.greaterOrEqual;
14  import static net.sf.r4h.Restrictions.ilike;
15  import static net.sf.r4h.Restrictions.in;
16  import static net.sf.r4h.Restrictions.notIn;
17  import static net.sf.r4h.Restrictions.isEmpty;
18  import static net.sf.r4h.Restrictions.isNull;
19  import static net.sf.r4h.Restrictions.less;
20  import static net.sf.r4h.Restrictions.lessOrEqual;
21  import static net.sf.r4h.Restrictions.like;
22  import static net.sf.r4h.Restrictions.notEmpty;
23  import static net.sf.r4h.Restrictions.notEqual;
24  import static net.sf.r4h.Restrictions.notNull;
25  import static net.sf.r4h.Restrictions.propertyEqual;
26  import static net.sf.r4h.Restrictions.propertyGreater;
27  import static net.sf.r4h.Restrictions.propertyGreaterOrEqual;
28  import static net.sf.r4h.Restrictions.propertyLess;
29  import static net.sf.r4h.Restrictions.propertyLessOrEqual;
30  import static net.sf.r4h.Restrictions.sizeEqual;
31  import static net.sf.r4h.Restrictions.sizeGreater;
32  import static net.sf.r4h.Restrictions.sizeGreaterOrEqual;
33  import static net.sf.r4h.Restrictions.sizeLess;
34  import static net.sf.r4h.Restrictions.sizeLessOrEqual;
35  import static net.sf.r4h.HibernateRepositoryUtils.*;
36  
37  import java.util.ArrayList;
38  import java.util.Collections;
39  import java.util.HashSet;
40  import java.util.Set;
41  
42  import junit.framework.Assert;
43  import net.sf.r4h.HibernateRepositoryUtils;
44  import net.sf.r4h.Order;
45  import net.sf.r4h.Page;
46  import net.sf.r4h.Restrictions;
47  import net.sf.r4h.model.Bid;
48  import net.sf.r4h.model.Item;
49  import net.sf.r4h.model.User;
50  
51  import org.junit.Test;
52  
53  public class GetEntitiesTest extends AbstractDaoTest {
54  	private static final Page PAGE1_SIZE100 = new Page(1,100);
55  	private static final Order[] DO_NOT_ORDER = new Order[0];
56  
57  	@Test
58  	public void testEmpty() throws Exception {
59  		verify(new String[0], asArray(), user1, user2);
60  	}
61  
62  	@Test
63  	public void testIN() {
64  		Assert.assertEquals(Collections.EMPTY_LIST, userRepository.list("name",Restrictions.in(),new ArrayList<User>()));
65  		Set<String> names = new HashSet<String>();
66  		names.add("user1");
67  		verify(asArray("name"), HibernateRepositoryUtils.restrictions( in() ), new Object[] { names }, user1);
68  		names.add("user2");
69  		verify(asArray("name"), HibernateRepositoryUtils.restrictions( in() ), new Object[] { names }, user1, user2);
70  
71  		verify(asArray("name"), HibernateRepositoryUtils.restrictions( in().disableIfEmpty() ), new Object[] { new HashSet<String>() }, user1, user2);
72  
73  		verify(asArray("name"), HibernateRepositoryUtils.restrictions( in().disableIfEmpty() ), new Object[] { new String[] { "user2" } }, user2);
74  		verify(asArray("name"), HibernateRepositoryUtils.restrictions( in() ), new Object[] { new String[] {  } });
75  
76  		// TODO find out why this verion of IN doesn't work
77  		/**
78  		 * Set<Item> items = new HashSet<Item>(); items.add( user1.getItems().iterator().next()); verify(asArray("items"),new Object[]{items}, new Restriction[] { IN }, user1);
79  		 * items.add(user2.getItems().iterator().next()); verify(asArray("items"),new Object[]{items}, new Restriction[] { IN }, user1,user2);
80  		 */
81  	}
82  	
83  	@Test
84  		public void testNOT_IN() {
85  			Set<String> names = new HashSet<String>();
86  			names.add("user1");
87  			verify(asArray("name"),r( notIn() ), new Object[] { names }, user2);
88  			names.add("user2");
89  			verify(asArray("name"), r( notIn() ), new Object[] { names });
90  			verify(asArray("name"), r( notIn().disableIfEmpty() ), new Object[] { new HashSet<String>() },user1,user2);
91  			verify(asArray("name"), r( notIn().disableIfEmpty() ),new Object[] { new String[] { "user2" } }, user1);
92  			verify(asArray("name"), r( notIn().disableIfEmpty() ),new Object[] { new String[] {  } },  user1,user2);
93  		}
94  
95  	
96  
97  	@Test
98  	public void testProperties() {
99  		verify(asArray("items"), HibernateRepositoryUtils.restrictions( sizeLess() ), asArray(2), user1, user2);
100 		verify(asArray("items"), HibernateRepositoryUtils.restrictions( sizeLess() ), asArray(1));
101 
102 		verify(asArray("items"), HibernateRepositoryUtils.restrictions( sizeLessOrEqual() ), asArray(1), user1, user2);
103 		verify(asArray("items"), HibernateRepositoryUtils.restrictions( sizeLessOrEqual() ), asArray(0));
104 
105 		verify(asArray("items"), HibernateRepositoryUtils.restrictions( sizeEqual() ), asArray(0));
106 		verify(asArray("items"), HibernateRepositoryUtils.restrictions( sizeEqual() ), asArray(1), user1, user2);
107 
108 		verify(asArray("items"), HibernateRepositoryUtils.restrictions( sizeGreaterOrEqual() ), asArray(2));
109 		verify(asArray("items"), HibernateRepositoryUtils.restrictions( sizeGreaterOrEqual() ), asArray(0), user1, user2);
110 
111 		verify(asArray("items"), HibernateRepositoryUtils.restrictions( sizeGreater() ), asArray(2));
112 		verify(asArray("items"), HibernateRepositoryUtils.restrictions( sizeGreater() ), asArray(0), user1, user2);
113 
114 		verify(asArray("items.name"), HibernateRepositoryUtils.restrictions( propertyLess() ), asArray("name"));
115 		verify(asArray("items.name"), HibernateRepositoryUtils.restrictions( propertyLessOrEqual() ), asArray("name"), user1, user2);
116 		verify(asArray("items.name"), HibernateRepositoryUtils.restrictions( propertyEqual() ), asArray("name"), user1, user2);
117 		verify(asArray("items.name"), HibernateRepositoryUtils.restrictions( propertyGreaterOrEqual() ), asArray("name"), user1, user2);
118 		verify(asArray("items.name"), HibernateRepositoryUtils.restrictions( propertyGreater() ), asArray("name"));
119 
120 	}
121 
122 	@Test
123 	public void testHappyPath() throws Exception {
124 		verify(asArray("name"), asArray(user1.getName()), user1);
125 		verify(asArray("items.name"), asArray("item2"), user2);
126 
127 		verify(asArray("items.name"), asArray("item2"), user2);
128 
129 		verify("items.name", like(), "iTem2");
130 		verify("items.name", like(), "item2", user2);
131 		verify("items.name", "item2", user2);
132 		verify("items.name", like(), "item%", user1, user2);
133 		verify(asArray("items.name"), HibernateRepositoryUtils.restrictions( less() ), asArray("item2"), user1);
134 		verify(asArray("items.name"), HibernateRepositoryUtils.restrictions( less() ), asArray("item2"), user1);
135 		verify(asArray("items.name"), HibernateRepositoryUtils.restrictions( greaterOrEqual() ), asArray("item1"), user1, user2);
136 		verify(asArray("items.name"), HibernateRepositoryUtils.restrictions( greater() ), asArray("item1"), user2);
137 		verify(asArray("items.name"), HibernateRepositoryUtils.restrictions( greater().disabledIfValueIsNull() ), asArray("item1"), user2);
138 
139 		verify(asArray("items.name"), HibernateRepositoryUtils.restrictions( greater().disabledIfValueIsNull() ), asArray(), user1, user2);
140 
141 		verify(asArray("items.name"), HibernateRepositoryUtils.restrictions( notNull() ), asArray("item1"), user1, user2);
142 		verify(asArray("items.name"), HibernateRepositoryUtils.restrictions( isNull() ), asArray("item1"));
143 		verify(asArray("items.name"), HibernateRepositoryUtils.restrictions( isNull() ), asArray());
144 
145 		verify(asArray("items"), HibernateRepositoryUtils.restrictions( notEmpty() ), asArray("item1"), user1, user2);
146 		verify(asArray("items"), HibernateRepositoryUtils.restrictions( isEmpty() ), asArray("item1"));
147 		verify(asArray("items.name"), HibernateRepositoryUtils.restrictions( notEqual() ), asArray("iTem2"), user1, user2);
148 		verify(asArray("items.name"), HibernateRepositoryUtils.restrictions( notEqual().caseInsensitive() ), asArray("iTem2"), user1);
149 
150 		verify(asArray("items.name"), HibernateRepositoryUtils.restrictions( like().caseInsensitive() ), asArray("iTem2"), user2);
151 		
152 		verify(asArray("items.name"), HibernateRepositoryUtils.restrictions( ilike() ), asArray("iTem2"), user2);
153 		
154 		verify(asArray("items.name"), HibernateRepositoryUtils.restrictions( like().caseInsensitive() ), asArray("item2"), user2);
155 		verify(asArray("items.name"), HibernateRepositoryUtils.restrictions( lessOrEqual().caseInsensitive() ), asArray("item2"), user1, user2);
156 		verify(asArray("items.name"), HibernateRepositoryUtils.restrictions( less().caseInsensitive() ), asArray("item2"), user1);
157 		verify(asArray("items.name"), HibernateRepositoryUtils.restrictions( greaterOrEqual().caseInsensitive() ), asArray("item1"), user1, user2);
158 
159 		verify(asArray("items.bids.name"), asArray("bid1"), user1);
160 		verify(asArray("items.bids.item"), asArray(user1.getItems().iterator().next()), user1);
161 		verify(asArray("items.name"), HibernateRepositoryUtils.restrictions(greater().caseInsensitive()), asArray("item1"), user2);
162 	}
163 
164 	@Test
165 	public void testCaseSensitivity() throws Exception {
166 		verify(asArray("name"), asArray(user1.getName().toUpperCase()));
167 		verify(asArray("name"), asArray(user1.getName().toUpperCase()));
168 	}
169 
170 	@Test
171 	public void testOrder() throws Exception {
172 		verify(new String[0], asArray(), asArray(descByName()), user2, user1);
173 
174 		verify(new String[0], asArray(), asArray(desc("items.name").ignoreCase()), user2, user1);
175 		verify(new String[0], asArray(), asArray(desc("items.bids.name").ignoreCase()), user2, user1);
176 		verify(new String[0], asArray(), asArray(desc("items.bids.item").ignoreCase()), user2, user1);
177 
178 		assertEquals(userRepository.list(ascByName().ignoreCase()), asArray(user1, user2));
179 		assertEquals(userRepository.list(asArray(descByName().ignoreCase())), asArray(user2, user1));
180 
181 		assertEquals(userRepository.list(ascByDate().nullsLast()), asArray(user1, user2));
182 		assertEquals(userRepository.list(descByDate().nullsFirst()), asArray(user2, user1));
183 		assertEquals(userRepository.list(ascByDate().nullsFirst()), asArray(user2, user1));
184 		assertEquals(itemRepository.list(ascByTime()), asArray(user1.getItems().iterator().next(), user2.getItems().iterator().next()));
185 		assertEquals(itemRepository.list(descByTime()), asArray(user2.getItems().iterator().next(), user1.getItems().iterator().next()));	
186 	}
187 
188 	@Test
189 	public void testCase() throws Exception {
190 		assertEquals(userRepository.list(asArray("name"), asArray(equal()), asArray(user1.getName())), user1);
191 		assertEquals(userRepository.list("name", user2.getName()), user2);
192 	}
193 
194 	@Test
195 	public void testGetAllEntries() throws Exception {
196 		assertEquals(userRepository.list(), asArray(user1, user2));
197 
198 	}
199 
200 	@Test
201 	public void testGetEntities() {
202 		Item itemExample = new Item();
203 		itemExample.setName("item1");
204 		
205 		Assert.assertEquals(1, itemRepository.list(itemExample, PAGE1_SIZE100).size());
206 		itemExample.setName("item2");
207 		Assert.assertEquals(1, itemRepository.list(itemExample, PAGE1_SIZE100).size());
208 		itemExample.setName("item%");
209 		Assert.assertEquals(2, itemRepository.list(Restrictions.example().enableLike(), itemExample, PAGE1_SIZE100).size());
210 
211 		itemExample.setName(null);
212 		Assert.assertEquals(2, itemRepository.list(itemExample, PAGE1_SIZE100).size());
213 
214 		User userExample = new User();
215 		userExample.setName("user1");
216 		Assert.assertEquals(1, userRepository.list(userExample, PAGE1_SIZE100).size());
217 		userExample.setName("user2");
218 		Assert.assertEquals(1, userRepository.list(userExample, PAGE1_SIZE100).size());
219 		userExample.setName("user%");
220 		Assert.assertEquals(2, itemRepository.list(Restrictions.example().enableLike(), itemExample, PAGE1_SIZE100).size());
221 
222 		userExample.setName(null);
223 		Assert.assertEquals(2, itemRepository.list(itemExample, PAGE1_SIZE100).size());
224 	}
225 
226 	@Test
227 	public void testExpensiveQBE() {
228 		Item itemExample = new Item();
229 		itemExample.setName("item1");
230 
231 		Bid bid = new Bid();
232 		bid.setName("bid2");
233 		itemExample.getBids().add(bid);
234 		Assert.assertEquals(0, itemRepository.list(itemExample, PAGE1_SIZE100).size());
235 		bid.setName("bid1");
236 		Assert.assertEquals(1, itemRepository.list(itemExample, PAGE1_SIZE100).size());
237 		itemExample.setName("item%");
238 		itemExample.getBids().clear();
239 		Assert.assertEquals(2, itemRepository.list(Restrictions.example().enableLike(), itemExample, PAGE1_SIZE100).size());
240 
241 		User userExample = new User();
242 		itemExample.setName("item%");
243 		userExample.setItems(new HashSet<Item>());
244 		userExample.getItems().add(itemExample);
245 		Assert.assertEquals(2, userRepository.list(Restrictions.example().enableLike(), userExample).size());
246 		itemExample.getBids().add(bid);
247 		Assert.assertEquals(1, userRepository.list(Restrictions.example().enableLike(), userExample).size());
248 		bid.setName("Bid2");
249 		Assert.assertEquals(1, userRepository.list(Restrictions.example().enableLike().ignoreCase(), userExample).size());
250 		Assert.assertEquals(Long.valueOf(1), userRepository.count(Restrictions.example().enableLike().ignoreCase().excludeZeroes(), userExample));
251 		Assert.assertEquals(Long.valueOf(0), userRepository.count(Restrictions.example().enableLike().ignoreCase().excludeNone(), userExample));
252 
253 		bid.setName("bidNonExisting");
254 		Assert.assertEquals(0, userRepository.list(Restrictions.example().enableLike(), userExample).size());
255 	}
256 
257 	@Test
258 	public void testQBEandPropertyRestriction() {
259 		Item itemExample = new Item();
260 		Assert.assertEquals(2, itemRepository.list(itemExample).size());
261 		Assert.assertEquals(Long.valueOf(2), itemRepository.count(itemExample));
262 		Assert.assertEquals(2, itemRepository.list(itemExample).size());
263 		Assert.assertEquals(1, itemRepository.list(HibernateRepositoryUtils.properties("name", ""), HibernateRepositoryUtils.restrictions(equal(), example()), HibernateRepositoryUtils.values("item1", itemExample)).size());
264 	}
265 
266 	@Test
267 	public void contains() throws Exception {
268 		Assert.assertTrue(userRepository.contains(userRepository.get(user1.getId())));
269 	}
270 
271 	@Test
272 	public void listByHql() throws Exception {
273 		Assert.assertEquals(2, userRepository.listByHql("from User").size());
274 		Assert.assertEquals(1, userRepository.listByHql("from User where id=?", user1.getId()).size());
275 		Assert.assertEquals(1, userRepository.listByHql("from User where id = :param1", new String[] { "param1" }, new Object[] { user2.getId() }).size());
276 	}
277 	
278 	private void verify(String property, Object value, User... users) {
279 		assertEquals(userRepository.list(property, value), users);
280 	}
281 
282 	private void verify(String property, Restrictions.Restriction restriction, Object value, User... users) {
283 		assertEquals(userRepository.list(property, restriction, value), users);
284 	}
285 
286 	private void verify(String[] properties, Object[] values, User... users) {
287 		verify(properties, values, DO_NOT_ORDER, users);
288 	}
289 
290 	private void verify(String[] properties, Restrictions.Restriction[] restrictions, Object[] values, User... users) {
291 		assertEquals(userRepository.list(properties, restrictions, values), users);
292 	}
293 
294 	private void verify(String[] properties, Object[] values, Order[] orders, User... users) {
295 		assertEquals(userRepository.list(properties, values, orders), users);
296 	}
297 
298 }