View Javadoc
1   package org.melati.poem.test;
2   
3   import org.melati.poem.Column;
4   import org.melati.poem.Group;
5   import org.melati.poem.GroupMembership;
6   import org.melati.poem.PoemThread;
7   import org.melati.poem.ReadPasswordAccessPoemException;
8   import org.melati.poem.RowDisappearedPoemException;
9   import org.melati.poem.User;
10  import org.melati.poem.WriteFieldAccessPoemException;
11  import org.melati.poem.WritePersistentAccessPoemException;
12  
13  /**
14   * @author timp
15   * @since 9 Jan 2007
16   *
17   */
18  public class UserTest extends PoemTestCase {
19  
20    public UserTest(String name) {
21      super(name);
22    }
23  
24    protected void setUp() throws Exception {
25      super.setUp();
26    }
27  
28    protected void tearDown() throws Exception {
29      super.tearDown();
30    }
31  
32    protected void databaseUnchanged() { 
33      Column<String> c = getDb().getUserTable().getNameColumn();
34      User tester = (User)c.firstWhereEq("tester");
35      if (tester != null)
36        tester.delete();
37      super.databaseUnchanged();
38  
39    }
40    
41    /**
42     * Test method for {@link org.melati.poem.User#toString()}.
43     */
44    public void testToString() {
45      
46    }
47  
48    /**
49     * The guest user should not be able to read 
50     * another users password.
51     * Test method for {@link org.melati.poem.User#getPassword()}.
52     */
53    public void testGetPassword() {
54      // Hsqldb memory database is the only one which finnesses the tidy up issue  
55      if (getDb().getDbms().toString().equals("org.melati.poem.dbms.Hsqldb")) { 
56        assertEquals("guest",getDb().guestUser().getPassword());
57        User tester = (User)getDb().getUserTable().newPersistent();
58        tester.setName("tester");
59        tester.setLogin("tester");
60        tester.setPassword("pwd");
61        tester.makePersistent();
62        assertEquals("pwd",tester.getPassword());
63      
64        PoemThread.setAccessToken(getDb().guestUser());
65        assertEquals("guest",getDb().guestUser().getPassword());
66        try {
67          assertEquals("pwd",tester.getPassword());
68          fail("should have blown up");
69        } catch (ReadPasswordAccessPoemException e) {
70          e = null;
71        }
72        assertFalse(tester.isGuest());
73        assertFalse(tester.isAdministrator());
74      }
75    }
76  
77    /**
78     * A user may read her own password but not set it. 
79     * Test method for {@link org.melati.poem.User#setPassword(java.lang.String)}.
80     */
81    public void testSetPassword() {
82      // Hsqldb memory database is the only one which finnesses the tidy up issue  
83      if (getDb().getDbms().toString().equals("org.melati.poem.dbms.Hsqldb")) { 
84        assertEquals("guest",getDb().guestUser().getPassword());
85        getDb().guestUser().setPassword("fred");
86        assertEquals("fred",getDb().guestUser().getPassword());
87        getDb().guestUser().setPassword("guest");
88        assertEquals("guest",getDb().guestUser().getPassword());
89        User tester = (User)getDb().getUserTable().newPersistent();
90        tester.setName("tester");
91        tester.setLogin("tester");
92        tester.setPassword("pwd");
93        tester.makePersistent();
94        assertEquals("pwd",tester.getPassword());
95  
96        PoemThread.setAccessToken(tester);
97        assertEquals("pwd",tester.getPassword());
98        try {
99          tester.setPassword("new");
100         fail("should have blown up");
101       } catch (WritePersistentAccessPoemException e) {
102         e = null;
103       }
104     }
105   }
106   /**
107    * Need another go as root.
108    * Test method for {@link org.melati.poem.User#setPassword(java.lang.String)}.
109    */
110   public void testSetPassword2() {
111     // Hsqldb memory database is the only one which finnesses the tidy up issue  
112     if (getDb().getDbms().toString().equals("org.melati.poem.dbms.Hsqldb")) { 
113       User tester = (User)getDb().getUserTable().newPersistent();
114       tester.setName("tester");
115       tester.setLogin("tester");
116       tester.setPassword("pwd");
117       tester.makePersistent();
118       assertEquals("pwd",tester.getPassword());
119 
120       PoemThread.setAccessToken(getDb().guestAccessToken());
121       try {
122         tester.setPassword("new");
123         fail("should have blown up");
124       } catch (WriteFieldAccessPoemException e) {
125         e = null;
126       }
127     }
128   }
129 
130   /**
131    * Test method for {@link org.melati.poem.User#User()}.
132    */
133   public void testUser() {
134     
135   }
136 
137   /**
138    * Test method for {@link org.melati.poem.User#
139    * User(java.lang.String, java.lang.String, java.lang.String)}.
140    */
141   public void testUserStringStringString() {
142     User u = new User("tester","tester","tester");
143     getDb().getUserTable().create(u); 
144     assertEquals("tester",u.getName());
145     u.setName("tester2");
146     // get the logSQL line covered
147     getDb().setLogSQL(true);
148     PoemThread.commit();
149     u.delete();
150     getDb().setLogSQL(false);
151   }
152 
153   /**
154    * Test method for {@link org.melati.poem.User#givesCapability(org.melati.poem.Capability)}.
155    */
156   public void testGivesCapability() {
157     
158   }
159 
160   /**
161    * Test method for {@link org.melati.poem.User#isGuest()}.
162    */
163   public void testIsGuest() {
164     assertTrue(getDb().guestUser().isGuest());
165     assertFalse(getDb().administratorUser().isGuest());
166   }
167 
168   /**
169    * Test method for {@link org.melati.poem.User#isAdministrator()}.
170    */
171   public void testIsAdministrator() {
172     assertFalse(getDb().guestUser().isAdministrator());
173     assertTrue(getDb().administratorUser().isAdministrator());    
174   }
175 
176   /**
177    * Test cascading delete works. 
178    */
179   public void testIntegrityFixDelete() {
180     User u = new User("tester","tester","tester");
181     getDb().getUserTable().create(u); 
182     assertEquals("tester",u.getName());
183     Group g = getDb().getGroupTable().administratorsGroup();
184     GroupMembership gm = (GroupMembership)getDb().getGroupMembershipTable().newPersistent();
185     gm.setGroup(g);
186     gm.setUser(u);
187     gm.makePersistent();
188     u.delete();
189     try {
190       gm.delete();
191       fail("Should have blown up.");
192     } catch(RowDisappearedPoemException e) { 
193       e = null;
194     }
195   }
196 
197 }