View Javadoc
1   /**
2    * 
3    */
4   package org.melati.poem.test;
5   
6   import java.sql.PreparedStatement;
7   import java.sql.ResultSet;
8   
9   import org.melati.poem.AppBugPoemException;
10  import org.melati.poem.CachedSelection;
11  import org.melati.poem.Column;
12  import org.melati.poem.ColumnInfo;
13  import org.melati.poem.DefinitionSource;
14  import org.melati.poem.DisplayLevel;
15  import org.melati.poem.Field;
16  import org.melati.poem.NullTypeMismatchPoemException;
17  import org.melati.poem.Persistent;
18  import org.melati.poem.SQLPoemType;
19  import org.melati.poem.Searchability;
20  import org.melati.poem.StandardIntegrityFix;
21  import org.melati.poem.Table;
22  import org.melati.poem.TroidPoemType;
23  import org.melati.poem.User;
24  import org.melati.poem.Column.SettingException;
25  import org.melati.poem.util.EnumUtils;
26  
27  /**
28   * @author timp
29   *
30   */
31  public class ColumnTest extends PoemTestCase {
32  
33    /**
34     * Constructor for ColumnTest.
35     * @param name
36     */
37    public ColumnTest(String name) {
38      super(name);
39    }
40  
41    /**
42     * {@inheritDoc}
43     * @see org.melati.poem.test.PoemTestCase#setUp()
44     */
45    protected void setUp()
46        throws Exception {
47      super.setUp();
48    }
49  
50    /**
51     * {@inheritDoc}
52     * @see org.melati.poem.test.PoemTestCase#tearDown()
53     */
54    protected void tearDown()
55        throws Exception {
56      super.tearDown();
57    }
58  
59    /**
60     * @see org.melati.poem.Column#Column(Table, String, SQLPoemType, DefinitionSource)
61     */
62    public void testColumn() {
63  
64    }
65  
66    /**
67     * @see org.melati.poem.Column#getDatabase()
68     */
69    public void testGetDatabase() {
70      assertEquals(getDb(), 
71          getDb().getUserTable().troidColumn().getDatabase());
72    }
73  
74    /**
75     * @see org.melati.poem.Column#getTable()
76     */
77    public void testGetTable() {
78      assertEquals(getDb().getUserTable(), 
79          getDb().getUserTable().troidColumn().getTable());
80    }
81  
82    /**
83     * @see org.melati.poem.Column#getName()
84     */
85    public void testGetName() {
86      assertEquals("id", 
87          getDb().getUserTable().troidColumn().getName());
88    }
89  
90    /**
91     * @see org.melati.poem.Column#quotedName()
92     */
93    public void testQuotedName() {
94      assertEquals(getDb().quotedName("id"), 
95          getDb().getUserTable().troidColumn().quotedName());
96    }
97  
98    /**
99     * @see org.melati.poem.Column#fullQuotedName()
100    */
101   public void testFullQuotedName() {
102     assertEquals(getDb().quotedName("user")+ "." + getDb().quotedName("id"), 
103         getDb().getUserTable().troidColumn().fullQuotedName());
104 
105   }
106 
107   /**
108    * @see org.melati.poem.Column#getDisplayName()
109    */
110   public void testGetDisplayName() {
111     assertEquals("Id", 
112         getDb().getUserTable().troidColumn().getDisplayName());
113 
114   }
115 
116   /**
117    * @see org.melati.poem.Column#getDescription()
118    */
119   public void testGetDescription() {
120     assertEquals("The Table Row Object ID", 
121         getDb().getUserTable().troidColumn().getDescription());
122   }
123 
124   /**
125    * @see org.melati.poem.Column#getColumnInfo()
126    */
127   public void testGetColumnInfo() {
128     assertEquals("columnInfo/0", 
129         getDb().getUserTable().troidColumn().getColumnInfo().toString());
130   }
131 
132   /**
133    * @see org.melati.poem.Column#getDisplayLevel()
134    */
135   public void testGetDisplayLevel() {
136     assertEquals(DisplayLevel.detail, 
137         getDb().getUserTable().troidColumn().getDisplayLevel());
138     assertEquals(DisplayLevel.primary, 
139         getDb().getUserTable().getColumn("name").getDisplayLevel());
140     assertEquals(DisplayLevel.summary, 
141         getDb().getUserTable().getColumn("login").getDisplayLevel());
142   }
143 
144   /**
145    * @see org.melati.poem.Column#setDisplayLevel(DisplayLevel)
146    */
147   public void testSetDisplayLevel() {
148     assertEquals(DisplayLevel.summary, 
149         getDb().getUserTable().getColumn("login").getDisplayLevel());
150     getDb().getUserTable().getColumn("login").setDisplayLevel(DisplayLevel.detail);
151     assertEquals(DisplayLevel.detail, 
152         getDb().getUserTable().getColumn("login").getDisplayLevel());
153     getDb().getUserTable().getColumn("login").setDisplayLevel(DisplayLevel.summary);
154     assertEquals(DisplayLevel.summary, 
155         getDb().getUserTable().getColumn("login").getDisplayLevel());
156   }
157 
158   /**
159    * @see org.melati.poem.Column#getSearchability()
160    */
161   public void testGetSearchability() {
162     assertEquals(Searchability.yes, 
163         getDb().getUserTable().troidColumn().getSearchability());
164     assertEquals(Searchability.primary, 
165         getDb().getUserTable().getColumn("name").getSearchability());
166     assertEquals(Searchability.yes, 
167         getDb().getUserTable().getColumn("login").getSearchability());
168     assertEquals(Searchability.no, 
169         getDb().getUserTable().getColumn("password").getSearchability());
170 
171   }
172 
173   /**
174    * @see org.melati.poem.Column#setSearchability(Searchability)
175    */
176   public void testSetSearchability() {
177     assertEquals(Searchability.yes, 
178         getDb().getUserTable().getColumn("login").getSearchability());
179     getDb().getUserTable().getColumn("login").setSearchability(Searchability.no);
180     assertEquals(Searchability.no, 
181         getDb().getUserTable().getColumn("login").getSearchability());
182     getDb().getUserTable().getColumn("login").setSearchability(Searchability.yes);
183     assertEquals(Searchability.yes, 
184         getDb().getUserTable().getColumn("login").getSearchability());
185 
186   }
187 
188   /**
189    * @see org.melati.poem.Column#getUserEditable()
190    */
191   public void testGetUserEditable() {
192 
193   }
194 
195   /**
196    * @see org.melati.poem.Column#getUserCreateable()
197    */
198   public void testGetUserCreateable() {
199 
200   }
201 
202   /**
203    * @see org.melati.poem.Column#getSQLType()
204    */
205   public void testGetSQLType() {
206 
207   }
208 
209   /**
210    * @see org.melati.poem.Column#getType()
211    */
212   public void testGetType() {
213 
214   }
215 
216   /**
217    * @see org.melati.poem.Column#isTroidColumn()
218    */
219   public void testIsTroidColumn() {
220 
221   }
222 
223   /**
224    * @see org.melati.poem.Column#isDeletedColumn()
225    */
226   public void testIsDeletedColumn() {
227 
228   }
229 
230   /**
231    * @see org.melati.poem.Column#getIndexed()
232    */
233   public void testGetIndexed() {
234 
235   }
236 
237   /**
238    * @see org.melati.poem.Column#getUnique()
239    */
240   public void testGetUnique() {
241 
242   }
243 
244   /**
245    * @see org.melati.poem.Column#getIntegrityFix()
246    */
247   public void testGetIntegrityFix() {
248     assertEquals(StandardIntegrityFix.prevent,
249         getDb().getUserTable().troidColumn().getIntegrityFix());
250   }
251 
252   /**
253    * Set the integrityFix and set it back again.
254    * @see org.melati.poem.Column#setIntegrityFix(StandardIntegrityFix)
255    */
256   public void testSetIntegrityFix() {
257     assertEquals(StandardIntegrityFix.prevent,
258         getDb().getUserTable().troidColumn().getIntegrityFix());
259     getDb().getUserTable().troidColumn().setIntegrityFix(StandardIntegrityFix.delete);
260     assertEquals(StandardIntegrityFix.delete,
261         getDb().getUserTable().troidColumn().getIntegrityFix());
262     getDb().getUserTable().troidColumn().setIntegrityFix(StandardIntegrityFix.prevent);
263     assertEquals(StandardIntegrityFix.prevent,
264         getDb().getUserTable().troidColumn().getIntegrityFix());
265 
266   }
267 
268   /**
269    * @see org.melati.poem.Column#getRenderInfo()
270    */
271   public void testGetRenderInfo() {
272 
273   }
274 
275   /**
276    * @see org.melati.poem.Column#getWidth()
277    */
278   public void testGetWidth() {
279 
280   }
281 
282   /**
283    * @see org.melati.poem.Column#getHeight()
284    */
285   public void testGetHeight() {
286 
287   }
288 
289   /**
290    * @see org.melati.poem.Column#getDisplayOrderPriority()
291    */
292   public void testGetDisplayOrderPriority() {
293 
294   }
295 
296   /**
297    * @see org.melati.poem.Column#getSortDescending()
298    */
299   public void testGetSortDescending() {
300 
301   }
302 
303   /**
304    * @see org.melati.poem.Column#toString()
305    */
306   public void testToString() {
307 
308   }
309 
310   /**
311    * @see org.melati.poem.Column#dump()
312    */
313   public void testDump() {
314     getDb().getUserTable().troidColumn().dump();
315   }
316 
317   /**
318    * @see org.melati.poem.Column#eqClause(Object)
319    */
320   public void testEqClause() {
321     assertEquals(getDb().getDbms().getQuotedName("user") + 
322         "." + getDb().getDbms().getQuotedName("id") + " IS NULL", 
323             getDb().getUserTable().troidColumn().eqClause(null));
324     assertEquals(getDb().getDbms().getQuotedName("user") + "." + 
325         getDb().getDbms().getQuotedName("id") + " = 1", 
326                  getDb().getUserTable().troidColumn().eqClause(new Integer(1)));
327   }
328 
329   /**
330    * @see org.melati.poem.Column#selectionWhereEq(Object)
331    */
332   public void testSelectionWhereEq() {
333     if (getDb().getDbms().canDropColumns()) {
334       assertEquals(new Integer(69), 
335           new Integer(EnumUtils.vectorOf(
336               getDb().getColumnInfoTable().getHeightColumn().
337               selectionWhereEq(new Integer(1))).size()));
338     }
339     try {
340       getDb().getColumnInfoTable().getHeightColumn().
341           selectionWhereEq(null);
342       fail("Should have bombed");
343     } catch (NullTypeMismatchPoemException e) {
344       e = null;
345     }
346   }
347 
348   /**
349    * @see org.melati.poem.Column#firstWhereEq(Object)
350    */
351   public void testFirstWhereEq() {
352     assertNull(getDb().getColumnInfoTable().getHeightColumn().
353         firstWhereEq(new Integer(0)));
354     assertNull(getDb().getColumnInfoTable().getHeightColumn().
355         firstWhereEq(new Integer(2)));
356     assertEquals("columnInfo/0", 
357         getDb().getColumnInfoTable().getHeightColumn().
358             firstWhereEq(new Integer(1)).toString());
359   }
360 
361   /**
362    * @see org.melati.poem.Column#cachedSelectionWhereEq(Object)
363    */
364   @SuppressWarnings("unchecked")
365   public void testCachedSelectionWhereEq() {
366     CachedSelection<ColumnInfo> cs = getDb().getColumnInfoTable().getHeightColumn().
367         cachedSelectionWhereEq(new Integer(1));
368     if (getDb().getDbms().canDropColumns()) {
369       assertEquals(69,cs.count());
370     }
371     int queries = getDb().getQueryCount();
372     if (getDb().getDbms().canDropColumns()) {
373       assertEquals(69,cs.count());
374     }
375     int queries2 = getDb().getQueryCount();
376     if (getDb().getDbms().canDropColumns()) {
377       assertEquals(queries, queries2);
378     }
379     int queries3 = getDb().getQueryCount();
380     if (getDb().getDbms().canDropColumns()) {
381       assertEquals(queries2, queries3);
382     }
383   }
384 
385   /**
386    * @see org.melati.poem.Column#getRaw(Persistent)
387    */
388   public void testGetRaw() {
389 
390   }
391 
392   /**
393    * @see org.melati.poem.Column#getRaw_unsafe(Persistent)
394    */
395   public void testGetRaw_unsafe() {
396 
397   }
398 
399   /**
400    * @see org.melati.poem.Column#setRaw(Persistent, Object)
401    */
402   public void testSetRaw() {
403 
404   }
405 
406   /**
407    * @see org.melati.poem.Column#setRaw_unsafe(Persistent, Object)
408    */
409   public void testSetRaw_unsafe() {
410 
411   }
412 
413   /**
414    * @see org.melati.poem.Column#getCooked(Persistent)
415    */
416   public void testGetCooked() {
417 
418   }
419 
420   /**
421    * @see org.melati.poem.Column#setCooked(Persistent, Object)
422    */
423   public void testSetCooked() {
424 
425   }
426 
427   /**
428    * @see org.melati.poem.Column#load_unsafe(ResultSet, int, Persistent)
429    */
430   public void testLoad_unsafe() {
431 
432   }
433 
434   /**
435    * @see org.melati.poem.Column#save_unsafe(Persistent, PreparedStatement, int)
436    */
437   public void testSave_unsafe() {
438 
439   }
440 
441   /**
442    * @see org.melati.poem.Column#asEmptyField()
443    */
444   public void testAsEmptyField() {
445     Field<Integer> f = getDb().getUserTable().troidColumn().asEmptyField();
446     assertEquals("id",f.getName());
447     assertEquals("Id",f.getDisplayName());
448     assertEquals("The Table Row Object ID",f.getDescription());
449     assertEquals(1,f.getHeight());
450     assertEquals(20,f.getWidth());
451     assertNull(f.getRaw());
452     try { 
453       f.getCooked();
454       fail("Should have bombed");
455     } catch (NullTypeMismatchPoemException e) {
456       e = null;
457     }
458     assertTrue(f.getIndexed());
459     assertFalse(f.getUserEditable());
460     assertFalse(f.getUserCreateable());
461     assertNull(f.getRenderInfo());
462     assertTrue(f.getType() instanceof TroidPoemType);
463   }
464 
465   /**
466    * @see org.melati.poem.Column#setRawString(Persistent, String)
467    */
468   public void testSetRawString() {
469     User admin = getDb().getUserTable().administratorUser();
470     try { 
471       getDb().getUserTable().troidColumn().setRawString(admin, "one");
472       fail("Should have bombed");
473     } catch (SettingException e) {
474       e = null;
475     }
476     getDb().getUserTable().getNameColumn().setRawString(admin, "Admin");
477     assertEquals("Admin", admin.getName());
478     getDb().getUserTable().getNameColumn().setRawString(admin, "Melati database administrator");
479   }
480 
481   /**
482    * @see org.melati.poem.Column#referencesTo(Persistent)
483    */
484   public void testReferencesTo() {
485     Column<Integer> userTroidColumn = getDb().getUserTable().troidColumn();
486     User admin = getDb().getUserTable().administratorUser();
487     assertEquals("", EnumUtils.concatenated("|", userTroidColumn.referencesTo(admin)));
488     Column<Integer> userColumn = getDb().getGroupMembershipTable().getUserColumn();
489     assertEquals("groupMembership/0", 
490                  EnumUtils.concatenated("|", userColumn.referencesTo(admin)));    
491   }
492 
493   /**
494    * @see org.melati.poem.Column#ensure(Persistent)
495    */
496   public void testEnsure() {
497     User fred = (User)getDb().getUserTable().newPersistent();
498     fred.setName("Fred");
499     fred.setLogin("fred");
500     fred.setPassword("fred");
501     Column<?> userNameColumn = getDb().getUserTable().getColumn("name");
502     User ensured = (User)userNameColumn.ensure(fred);
503     assertEquals("Fred", ensured.getName());
504     fred.delete();
505   }
506 
507   /**
508    * @see org.melati.poem.Column#firstFree(String)
509    */
510   public void testFirstFree() {
511     Column<?> userTroidColumn = getDb().getUserTable().troidColumn();
512     assertEquals(2, userTroidColumn.firstFree(null));    
513 
514     try {
515       Column<?> userNameColumn = getDb().getUserTable().getColumn("name");
516       userNameColumn.firstFree(null);
517       fail("Should have bombed");
518     } catch (AppBugPoemException e) {
519       e = null;
520     }
521     // Think that these two show what could go wrong
522     assertEquals(0, userTroidColumn.firstFree("ID > 1"));    
523     assertEquals(1, userTroidColumn.firstFree("ID < 1"));    
524 
525   }
526 
527 }