@@ -34,10 +34,10 @@ def assertRaisesMessage(self, exception, callable, message, *args,
3434 except exception , msg :
3535 self .assertEqual (str (msg ), message )
3636 else :
37- if hasattr (excClass , '__name__' ):
38- excName = excClass .__name__
37+ if hasattr (exception , '__name__' ):
38+ excName = exception .__name__
3939 else :
40- excName = str (excClass )
40+ excName = str (exception )
4141 raise self .failureException , excName
4242
4343 def testShowAction (self ):
@@ -98,7 +98,8 @@ def testQueryName(self):
9898class FakeFilterVarsTestCase (SearchActionTestCase ):
9999 def setUp (self ):
100100 SearchActionTestCase .setUp (self )
101- self .client .db .classes .getprops = lambda : {'foo' : hyperdb .Multilink ('foo' )}
101+ self .client .db .classes .getprops = lambda : {'foo' :
102+ hyperdb .Multilink ('foo' )}
102103
103104 def assertFilterEquals (self , expected ):
104105 self .action .fakeFilterVars ()
@@ -136,7 +137,8 @@ def testTokenizedStringKey(self):
136137 self .assertFilterEquals ('foo' )
137138
138139 # The single value gets replaced with the tokenized list.
139- self .assertEqual ([x .value for x in self .form ['foo' ]], ['hello' , 'world' ])
140+ self .assertEqual ([x .value for x in self .form ['foo' ]],
141+ ['hello' , 'world' ])
140142
141143class CollisionDetectionTestCase (ActionTestCase ):
142144 def setUp (self ):
@@ -149,7 +151,8 @@ def setUp(self):
149151 def testLastUserActivity (self ):
150152 self .assertEqual (self .action .lastUserActivity (), None )
151153
152- self .client .form .value .append (MiniFieldStorage ('@lastactivity' , str (self .now )))
154+ self .client .form .value .append (
155+ MiniFieldStorage ('@lastactivity' , str (self .now )))
153156 self .assertEqual (self .action .lastUserActivity (), self .now )
154157
155158 def testLastNodeActivity (self ):
@@ -165,20 +168,71 @@ def get(nodeid, propname):
165168 self .assertEqual (self .action .lastNodeActivity (), self .now )
166169
167170 def testCollision (self ):
168- self .failUnless (self .action .detectCollision (self .now , self .now + Interval ("1d" )))
169- self .failIf (self .action .detectCollision (self .now , self .now - Interval ("1d" )))
171+ self .failUnless (self .action .detectCollision (
172+ self .now , self .now + Interval ("1d" )))
173+ self .failIf (self .action .detectCollision (
174+ self .now , self .now - Interval ("1d" )))
170175 self .failIf (self .action .detectCollision (None , self .now ))
171176
177+ class LoginTestCase (ActionTestCase ):
178+ def setUp (self ):
179+ ActionTestCase .setUp (self )
180+ self .client .error_message = []
181+
182+ # set the db password to 'right'
183+ self .client .db .user .get = lambda a ,b : 'right'
184+
185+ # unless explicitly overridden, we should never get here
186+ self .client .opendb = lambda a : self .fail (
187+ "Logged in, but we shouldn't be." )
188+
189+ def assertLoginLeavesMessages (self , messages , username = None , password = None ):
190+ if username is not None :
191+ self .form .value .append (MiniFieldStorage ('__login_name' , username ))
192+ if password is not None :
193+ self .form .value .append (
194+ MiniFieldStorage ('__login_password' , password ))
195+
196+ LoginAction (self .client ).handle ()
197+ self .assertEqual (self .client .error_message , messages )
198+
199+ def testNoUsername (self ):
200+ self .assertLoginLeavesMessages (['Username required' ])
201+
202+ def testInvalidUsername (self ):
203+ def raiseKeyError (a ):
204+ raise KeyError
205+ self .client .db .user .lookup = raiseKeyError
206+ self .assertLoginLeavesMessages (['Invalid login' ], 'foo' )
207+
208+ def testInvalidPassword (self ):
209+ self .assertLoginLeavesMessages (['Invalid login' ], 'foo' , 'wrong' )
210+
211+ def testNoWebAccess (self ):
212+ self .assertLoginLeavesMessages (['You do not have permission to login' ],
213+ 'foo' , 'right' )
214+
215+ def testCorrectLogin (self ):
216+ self .client .db .security .hasPermission = lambda a ,b ,c : True
217+
218+ def opendb (username ):
219+ self .assertEqual (username , 'foo' )
220+ self .client .opendb = opendb
221+
222+ self .assertLoginLeavesMessages ([], 'foo' , 'right' )
223+
172224def test_suite ():
173225 suite = unittest .TestSuite ()
174226 suite .addTest (unittest .makeSuite (RetireActionTestCase ))
175227 suite .addTest (unittest .makeSuite (StandardSearchActionTestCase ))
176228 suite .addTest (unittest .makeSuite (FakeFilterVarsTestCase ))
177229 suite .addTest (unittest .makeSuite (ShowActionTestCase ))
178230 suite .addTest (unittest .makeSuite (CollisionDetectionTestCase ))
231+ suite .addTest (unittest .makeSuite (LoginTestCase ))
179232 return suite
180233
181234if __name__ == '__main__' :
182235 runner = unittest .TextTestRunner ()
183236 unittest .main (testRunner = runner )
184237
238+ # vim: set et sts=4 sw=4 :
0 commit comments