1   /**
2    * 
3    */
4   package org.melati.poem.test;
5   
6   import java.sql.Date;
7   
8   import org.melati.poem.PoemThread;
9   import org.melati.poem.PoemTypeFactory;
10  import org.melati.poem.Setting;
11  import org.melati.poem.Setting.SettingTypeMismatchException;
12  import org.melati.poem.Setting.SettingValidationException;
13  
14  /**
15   * @author timp
16   * 
17   */
18  public class SettingTest extends EverythingTestCase {
19  
20    /**
21     * Constructor for SettingTest.
22     * 
23     * @param name
24     */
25    public SettingTest(String name) {
26      super(name);
27    }
28  
29    /**
30     * @see PoemTestCase#setUp()
31     */
32    protected void setUp() throws Exception {
33      super.setUp();
34    }
35  
36    /**
37     * @see PoemTestCase#tearDown()
38     */
39    protected void tearDown() throws Exception {
40      super.tearDown();
41    }
42  
43    /**
44     * @see org.melati.poem.Setting#setValue(String)
45     */
46    public void testSetValue() {
47      Setting stringSetting = getDb().getSettingTable().ensure("stringSetting",
48          "set", "String", "A set string setting");
49      stringSetting.setValue("new");
50      assertEquals("new", stringSetting.getCooked());
51      stringSetting.setRaw("new2");
52      assertEquals("new2", stringSetting.getCooked());
53      stringSetting.delete();
54  
55      Setting integerSetting = getDb().getSettingTable().ensure("integerSetting",
56          12, "Integer Setting", "A set Integer setting");
57      integerSetting.setRaw(new Integer(13));
58      assertEquals(new Integer(13), integerSetting.getCooked());
59      try {
60        integerSetting.setValue("ghgh");
61        fail("Should have blown up");
62      } catch (SettingValidationException e) {
63        e = null;
64      }
65  
66      try { 
67        integerSetting.setRaw("ghgh");
68        fail("Should have blown up");
69      } catch (SettingValidationException e) {
70        e = null;
71      }
72      integerSetting.delete();
73  
74    }
75  
76    /**
77     * @see org.melati.poem.Setting#getValueField()
78     */
79    public void testGetValueField() {
80      Setting s = new Setting(PoemTypeFactory.STRING.getCode(), "testSetting",
81              "eggs", "Test Setting", "A test setting");
82      getDb().getSettingTable().create(s);
83      assertEquals("eggs", s.getValueField().getCooked());
84  
85      s.delete();
86  
87      s = new Setting(PoemTypeFactory.PASSWORD.getCode(), "columnSetting",
88              "0", "Password", "A test setting");
89      getDb().getSettingTable().create(s);
90      s.setRaw(getDb().getUserTable().administratorUser().getPasswordField());
91      assertEquals("password: FIXME", s.getValueField().getCooked());
92      s.delete();
93      
94  
95   
96    }
97  
98    /**
99     * @see org.melati.poem.Setting#Setting(Integer, String, String, String,
100    *      String)
101    */
102   public void testSettingIntegerStringStringStringString() {
103     Setting s = new Setting(PoemTypeFactory.STRING.getCode(), "testSetting",
104             "eggs", "Test Setting", "A test setting");
105         getDb().getSettingTable().create(s);
106         assertEquals("eggs", s.getValue());
107         s.delete();
108   }
109 
110   /**
111    * @see org.melati.poem.Setting#setRaw(Object)
112    */
113   public void testSetRawObject() {
114     Setting s = new Setting(PoemTypeFactory.STRING.getCode(), "testSetting",
115         "eggs", "Test Setting", "A test setting");
116     getDb().getSettingTable().create(s);
117     assertEquals("eggs", s.getValue());
118     s.delete();
119 
120     Setting integerSetting = getDb().getSettingTable().ensure("integerSetting",
121         12, "Integer", "A set Integer setting");
122     integerSetting.setRaw(new Integer(13));
123     assertEquals(new Integer(13), integerSetting.getCooked());
124     try {
125       integerSetting.setRaw("pp");
126       fail("Should have bombed.");
127     } catch (SettingValidationException e) {
128       e = null;
129     }
130 
131     integerSetting.delete();
132     
133     Setting timestampSetting = getDb().getSettingTable().ensure("timestampSetting",
134             PoemTypeFactory.TIMESTAMP, new Date(System.currentTimeMillis()), "Timestamp", "A timestamp setting");
135     try { 
136       timestampSetting.setRaw("Not a date");
137       fail("Should have bombed");
138     } catch (SettingValidationException e) { 
139       e = null;
140     }
141     timestampSetting.delete();
142   }
143 
144   /**
145    * FIXME Should we be able to change nullability?
146    * You cannot change the type, so hard to see how 
147    * Exception could be thrown in getRaw().
148    * 
149    * @see org.melati.poem.Setting#getRaw()
150    */
151   public void testGetRaw() {
152     Setting s = new Setting(PoemTypeFactory.STRING.getCode(), "testSetting",
153         "eggs", "Test Setting", "A test setting");
154     getDb().getSettingTable().create(s);
155     s.setNullable(true);
156     //System.err.println("Type:"+ s.getType());
157     //System.err.println("Nullable:"+ s.toTypeParameter().getNullable());
158     assertEquals("eggs", s.getValue());
159     s.setValue(null);
160     s.setNullable(false);
161     PoemThread.commit();
162     //System.err.println("Nullable:"+ s.toTypeParameter().getNullable());
163     //System.err.println("Type:"+ s.getType());
164     try {
165       s.getRaw();
166      // fail("Should have blown up.");
167     } catch (SettingValidationException e) {
168       e.printStackTrace();
169       e = null;
170     }
171     s.delete();
172 
173   }
174 
175   /**
176    * @see org.melati.poem.Setting#getCooked()
177    */
178   public void testGetCooked() {
179 
180   }
181 
182   /**
183    * @see org.melati.poem.Setting#getIntegerCooked()
184    */
185   public void testGetIntegerCooked() {
186     Setting integerSetting = getDb().getSettingTable().ensure("integerSetting",
187         12, "Integer", "A set Integer setting");
188     integerSetting.setRaw(new Integer(13));
189     assertEquals(new Integer(13), integerSetting.getCooked());
190     assertEquals(new Integer(13), integerSetting.getIntegerCooked());
191     integerSetting.setNullable(true);
192     integerSetting.setRaw(null);
193     assertNull(integerSetting.getIntegerCooked());
194     integerSetting.setNullable(false);
195     try {
196       integerSetting.getIntegerCooked();
197       fail("Should have bombed.");
198     } catch (SettingTypeMismatchException e) {
199       e = null;
200     }
201 
202     integerSetting.delete();
203   }
204 
205   /**
206    * @see org.melati.poem.Setting#getStringCooked()
207    */
208   public void testGetStringCooked() {
209     Setting stringSetting = getDb().getSettingTable().ensure("stringSetting",
210         "set", "String", "A set String setting");
211     stringSetting.setRaw("v2");
212     assertEquals("v2", stringSetting.getCooked());
213     assertEquals("v2", stringSetting.getStringCooked());
214     stringSetting.setNullable(true);
215     stringSetting.setRaw(null);
216     assertNull(stringSetting.getStringCooked());
217     stringSetting.setNullable(false);
218     try {
219       stringSetting.getStringCooked();
220       fail("Should have bombed.");
221     } catch (SettingTypeMismatchException e) {
222       e = null;
223     }
224 
225     stringSetting.delete();
226 
227   }
228 
229   /**
230    * @see org.melati.poem.Setting#getBooleanCooked()
231    */
232   public void testGetBooleanCooked() {
233     Setting booleanSetting = getDb().getSettingTable().ensure("booleanSetting",
234         false, "Boolean", "A set boolean setting");
235     booleanSetting.setRaw(Boolean.TRUE);
236     assertEquals(Boolean.TRUE, booleanSetting.getCooked());
237     assertEquals(Boolean.TRUE, booleanSetting.getBooleanCooked());
238     booleanSetting.setNullable(true);
239     booleanSetting.setRaw(null);
240     assertNull(booleanSetting.getBooleanCooked());
241     booleanSetting.setNullable(false);
242     try {
243       booleanSetting.getBooleanCooked();
244       fail("Should have bombed.");
245     } catch (SettingTypeMismatchException e) {
246       e = null;
247     }
248 
249     booleanSetting.delete();
250   }
251 
252   /**
253    * @see org.melati.poem.Setting#getValue()
254    */
255   public void testGetValue() {
256     Setting userSetting = getDb().getSettingTable().ensure("userSetting",
257         PoemTypeFactory.TROID,
258         getDb().guestUser().getTroid(),
259         "User", "A User setting");
260     assertEquals(new Integer(0),userSetting.getCooked());
261     userSetting.delete();
262   }
263 
264 }