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
77
78
79
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 }