1 package org.melati.poem.test;
2
3 import java.text.DateFormat;
4 import java.util.Enumeration;
5
6 import org.melati.poem.Column;
7 import org.melati.poem.FieldSet;
8 import org.melati.poem.Capability;
9 import org.melati.poem.Table;
10 import org.melati.poem.TailoredQuery;
11 import org.melati.poem.PoemLocale;
12
13
14
15
16 public class TailoredQueryTest extends EverythingTestCase {
17
18 public TailoredQueryTest(String name) {
19 super(name);
20 }
21
22 protected void setUp()
23 throws Exception {
24 super.setUp();
25 }
26
27 protected void tearDown()
28 throws Exception {
29 super.tearDown();
30 }
31
32
33
34
35
36 public void testTailoredQueryColumnArrayTableArrayStringString() {
37 Column<?>[] columns = {
38 getDb().getUserTable().getNameColumn(),
39 getDb().getGroupTable().getNameColumn(), };
40 Table<?>[] tables = { getDb().getGroupMembershipTable() };
41
42 String whereClause =
43 getDb().getDbms().getQuotedName("user") +
44 " = " +
45 getDb().getDbms().getQuotedName("user") +
46 "." +
47 getDb().getDbms().getQuotedName("id") +
48 " and " +
49 getDb().getDbms().getQuotedName("group") +
50 " = " +
51 getDb().getDbms().getQuotedName("group") +
52 "." +
53 getDb().getDbms().getQuotedName("id");
54
55 TailoredQuery q = new TailoredQuery(columns,
56 tables,
57 whereClause,
58 getDb().getUserTable().getNameColumn().
59 fullQuotedName());
60 int count = 0;
61 for (Enumeration<FieldSet> ms = q.selection(); ms.hasMoreElements();) {
62 count++;
63
64 ms.nextElement();
65
66
67
68
69
70
71
72
73 }
74 assertEquals(1,count);
75 }
76
77
78
79
80
81 public void testTailoredQueryStringColumnArrayTableArrayStringString() {
82 Column<?>[] columns = { getDb().getUserTable().getNameColumn(),
83 getDb().getGroupTable().getNameColumn(), };
84 Table<?>[] tables = { getDb().getGroupMembershipTable() };
85
86 String whereClause =
87 getDb().getDbms().getQuotedName("user") +
88 " = " +
89 getDb().getDbms().getQuotedName("user") +
90 "." +
91 getDb().getDbms().getQuotedName("id") +
92 " and " +
93 getDb().getDbms().getQuotedName("group") +
94 " = " +
95 getDb().getDbms().getQuotedName("group") +
96 "." +
97 getDb().getDbms().getQuotedName("id");
98
99 TailoredQuery q = new TailoredQuery("distinct",
100 columns,
101 tables,
102 whereClause,
103 null);
104 int count = 0;
105 for (Enumeration<FieldSet> ms = q.selection(); ms.hasMoreElements();) {
106 count++;
107
108 ms.nextElement();
109
110
111
112
113
114
115
116
117 }
118 assertEquals(1, count);
119
120 }
121
122
123
124
125 public void testSelection() {
126 Column<?>[] columns = { getDb().getUserTable().getNameColumn(),
127 getDb().getGroupTable().getNameColumn(), };
128 Table<?>[] tables = { getDb().getGroupMembershipTable() };
129
130 String whereClause =
131 getDb().getDbms().getQuotedName("user") +
132 " = " +
133 getDb().getDbms().getQuotedName("user") +
134 "." +
135 getDb().getDbms().getQuotedName("id") +
136 " and " +
137 getDb().getDbms().getQuotedName("group") +
138 " = " +
139 getDb().getDbms().getQuotedName("group") +
140 "." +
141 getDb().getDbms().getQuotedName("id");
142
143 TailoredQuery q = new TailoredQuery(
144 columns,
145 tables,
146 whereClause,
147 null);
148 int count = 0;
149 for (Enumeration<FieldSet> ms = q.selection(); ms.hasMoreElements();) {
150 count++;
151
152 ms.nextElement();
153
154
155
156
157
158
159
160
161 }
162 assertEquals(1,count);
163
164 }
165
166
167
168
169 public void testSelection_firstRaw() {
170 Column<?>[] columns = { getDb().getUserTable().getNameColumn(),
171 getDb().getGroupTable().getNameColumn(), };
172 Table<?>[] tables = { getDb().getGroupMembershipTable() };
173
174 String whereClause =
175 getDb().getDbms().getQuotedName("user") +
176 " = " +
177 getDb().getDbms().getQuotedName("user") +
178 "." +
179 getDb().getDbms().getQuotedName("id") +
180 " and " +
181 getDb().getDbms().getQuotedName("group") +
182 " = " +
183 getDb().getDbms().getQuotedName("group") +
184 "." +
185 getDb().getDbms().getQuotedName("id");
186
187 TailoredQuery q = new TailoredQuery(
188 columns,
189 tables,
190 whereClause,
191 null);
192 int count = 0;
193 for (Enumeration<Object> ms = q.selection_firstRaw(); ms.hasMoreElements();) {
194 count++;
195 ms.nextElement();
196 }
197 assertEquals(1,count);
198 }
199
200
201
202
203 public void testToString() {
204 Column<?>[] columns = { getDb().getUserTable().getNameColumn(),
205 getDb().getGroupTable().getNameColumn(), };
206 Table<?>[] tables = { getDb().getGroupMembershipTable() };
207
208 String whereClause =
209 getDb().getDbms().getQuotedName("user") +
210 " = " +
211 getDb().getDbms().getQuotedName("user") +
212 "." +
213 getDb().getDbms().getQuotedName("id") +
214 " and " +
215 getDb().getDbms().getQuotedName("group") +
216 " = " +
217 getDb().getDbms().getQuotedName("group") +
218 "." +
219 getDb().getDbms().getQuotedName("id");
220
221 TailoredQuery q = new TailoredQuery(
222 columns,
223 tables,
224 whereClause,
225 null);
226 int count = 0;
227 for (Enumeration<FieldSet> ms = q.selection(); ms.hasMoreElements();) {
228 count++;
229
230 ms.nextElement();
231
232
233
234
235
236
237
238
239 }
240 assertEquals(1,count);
241
242 assertTrue(q.toString().indexOf("SELECT") > 0 &&
243 q.toString().toUpperCase().indexOf("USER") > 0 );
244 }
245
246
247
248
249 public void testProtected() {
250 EverythingDatabase db = (EverythingDatabase)getDb();
251 Capability spyMaster = db.getCapabilityTable().ensure("spyMaster");
252 Capability moneyPenny = db.getCapabilityTable().ensure("moneyPenny");
253
254 User spy = (User)db.getUserTable().newPersistent();
255 spy.setLogin("spy");
256 spy.setName("Spy");
257 spy.setPassword("spy");
258 spy.makePersistent();
259
260 Protected spyMission = (Protected)db.getProtectedTable().newPersistent();
261 spyMission.setCanRead(moneyPenny);
262 spyMission.setCanSelect(moneyPenny);
263 spyMission.setCanWrite(moneyPenny);
264 spyMission.setCanDelete(spyMaster);
265 spyMission.setSpy(spy);
266 spyMission.setMission("impossible");
267 spyMission.setDeleted(false);
268 spyMission.makePersistent();
269
270 Column<?>[] columns = {
271 getDb().getUserTable().getNameColumn(),
272 db.getProtectedTable().getMissionColumn() };
273 Table<?>[] otherTables = { db.getProtectedTable() };
274
275 String whereClause =
276 db.getUserTable().getNameColumn().fullQuotedName() +
277 " = 'Spy' " +
278 " AND " +
279 db.getUserTable().troidColumn().fullQuotedName() +
280 " = " +
281 db.getProtectedTable().getSpyColumn().fullQuotedName();
282 TailoredQuery q = new TailoredQuery(
283 columns,
284 otherTables,
285 whereClause,
286 null);
287 int count = 0;
288 for (Enumeration<FieldSet> ms = q.selection(); ms.hasMoreElements();) {
289 count++;
290 FieldSet fs = ms.nextElement();
291 System.err.println(fs);
292 System.out.println(
293 fs.get("User_name").getCookedString(PoemLocale.HERE,
294 DateFormat.MEDIUM)
295 + ", "
296 + fs.get("Protected_mission").getCookedString(PoemLocale.HERE,
297 DateFormat.MEDIUM));
298 }
299 assertEquals(1,count);
300
301 assertTrue(q.toString().indexOf("SELECT") > 0 &&
302 q.toString().toUpperCase().indexOf("USER") > 0 );
303
304 spyMission.delete();
305 spy.delete();
306 spyMaster.delete();
307 moneyPenny.delete();
308 }
309
310 }