View Javadoc
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   * @author timp
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     * @see org.melati.poem.TailoredQuery#TailoredQuery(Column[], Table[], String,
34     *      String)
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      //System.err.println(whereClause);  
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        //FieldSet fs = (FieldSet) 
64        ms.nextElement();
65        /*
66        System.out.println(
67            fs.get("user_name").getCookedString(PoemLocale.HERE,
68                                                DateFormat.MEDIUM)
69            + ", "
70            + fs.get("group_name").getCookedString(PoemLocale.HERE,
71                DateFormat.MEDIUM));
72         */
73      }
74      assertEquals(1,count);
75    }
76  
77    /**
78     * @see org.melati.poem.TailoredQuery#TailoredQuery(String, Column[], Table[],
79     *      String, String)
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      //System.err.println(whereClause);  
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       //FieldSet fs = (FieldSet) 
108       ms.nextElement();
109       /*
110       System.out.println(
111           fs.get("user_name").getCookedString(PoemLocale.HERE,
112                                               DateFormat.MEDIUM)
113           + ", "
114           + fs.get("group_name").getCookedString(PoemLocale.HERE,
115               DateFormat.MEDIUM));
116        */
117     }
118     assertEquals(1, count);
119 
120   }
121 
122   /**
123    * @see org.melati.poem.TailoredQuery#selection()
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     //System.err.println(whereClause);  
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       //FieldSet fs = (FieldSet) 
152       ms.nextElement();
153       /*
154       System.out.println(
155           fs.get("user_name").getCookedString(PoemLocale.HERE,
156                                               DateFormat.MEDIUM)
157           + ", "
158           + fs.get("group_name").getCookedString(PoemLocale.HERE,
159               DateFormat.MEDIUM));
160         */
161     }
162     assertEquals(1,count);
163 
164   }
165 
166   /**
167    * @see org.melati.poem.TailoredQuery#selection_firstRaw()
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     //System.err.println(whereClause);  
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    * @see java.lang.Object#toString()
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     //System.err.println(whereClause);  
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       //FieldSet fs = (FieldSet) 
230       ms.nextElement();
231       /*
232       System.out.println(
233           fs.get("user_name").getCookedString(PoemLocale.HERE,
234                                               DateFormat.MEDIUM)
235           + ", "
236           + fs.get("group_name").getCookedString(PoemLocale.HERE,
237               DateFormat.MEDIUM));
238        */
239     }
240     assertEquals(1,count);
241     // System.err.println(q);
242     assertTrue(q.toString().indexOf("SELECT") > 0 && 
243         q.toString().toUpperCase().indexOf("USER") > 0 );
244   }
245 
246   /**
247    * Test table protection
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     // System.err.println(q);
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 }