88# but WITHOUT ANY WARRANTY; without even the implied warranty of
99# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
1010#
11- # $Id: test_cgi.py,v 1.5 2003-01-15 22:39:07 richard Exp $
11+ # $Id: test_cgi.py,v 1.6 2003-01-20 23:05:20 richard Exp $
1212
1313import unittest , os , shutil , errno , sys , difflib , cgi
1414
1515from roundup .cgi import client
16- from roundup import init , instance , password
16+ from roundup import init , instance , password , hyperdb , date
1717
1818def makeForm (args ):
1919 form = cgi .FieldStorage ()
@@ -43,6 +43,11 @@ def setUp(self):
4343 self .db .user .create (username = 'mary' , address = 'mary@test' ,
4444 roles = 'User' , realname = 'Contrary, Mary' )
4545
46+ test = self .instance .dbinit .Class (self .db , "test" ,
47+ boolean = hyperdb .Boolean (), link = hyperdb .Link ('test' ),
48+ multilink = hyperdb .Multilink ('test' ), date = hyperdb .Date (),
49+ interval = hyperdb .Interval ())
50+
4651 def tearDown (self ):
4752 self .db .close ()
4853 try :
@@ -66,6 +71,19 @@ def testNothingWithRequired(self):
6671 self .assertRaises (ValueError , client .parsePropsFromForm , self .db ,
6772 self .db .issue , makeForm ({':required' : ['title' ,'status' ],
6873 'status' :'1' }))
74+ self .assertRaises (ValueError , client .parsePropsFromForm , self .db ,
75+ self .db .issue , makeForm ({':required' : 'status' ,
76+ 'status' :'' }))
77+ self .assertRaises (ValueError , client .parsePropsFromForm , self .db ,
78+ self .db .issue , makeForm ({':required' : 'nosy' ,
79+ 'nosy' :'' }))
80+
81+ #
82+ # Nonexistant edit
83+ #
84+ def testEditNonexistant (self ):
85+ self .assertRaises (IndexError , client .parsePropsFromForm , self .db ,
86+ self .db .test , makeForm ({'boolean' : '' }), '1' )
6987
7088 #
7189 # String
@@ -83,14 +101,17 @@ def testSetString(self):
83101 makeForm ({'title' : 'foo' })), {'title' : 'foo' })
84102 self .assertEqual (client .parsePropsFromForm (self .db , self .db .issue ,
85103 makeForm ({'title' : 'a\r \n b\r \n ' })), {'title' : 'a\n b' })
104+ nodeid = self .db .issue .create (title = 'foo' )
105+ self .assertEqual (client .parsePropsFromForm (self .db , self .db .issue ,
106+ makeForm ({'title' : 'foo' }), nodeid ), {})
86107
87108 def testEmptyStringSet (self ):
88109 nodeid = self .db .issue .create (title = 'foo' )
89110 self .assertEqual (client .parsePropsFromForm (self .db , self .db .issue ,
90- makeForm ({'title' : '' }), nodeid ), {'title' : '' })
111+ makeForm ({'title' : '' }), nodeid ), {'title' : None })
91112 nodeid = self .db .issue .create (title = 'foo' )
92113 self .assertEqual (client .parsePropsFromForm (self .db , self .db .issue ,
93- makeForm ({'title' : ' ' }), nodeid ), {'title' : '' })
114+ makeForm ({'title' : ' ' }), nodeid ), {'title' : None })
94115
95116 #
96117 # Link
@@ -110,6 +131,9 @@ def testSetLink(self):
110131 makeForm ({'status' : 'unread' })), {'status' : '1' })
111132 self .assertEqual (client .parsePropsFromForm (self .db , self .db .issue ,
112133 makeForm ({'status' : '1' })), {'status' : '1' })
134+ nodeid = self .db .issue .create (status = 'unread' )
135+ self .assertEqual (client .parsePropsFromForm (self .db , self .db .issue ,
136+ makeForm ({'status' : 'unread' }), nodeid ), {})
113137
114138 def testUnsetLink (self ):
115139 nodeid = self .db .issue .create (status = 'unread' )
@@ -122,7 +146,9 @@ def testInvalidLinkValue(self):
122146# self.db.issue, makeForm({'status': '4'}))
123147 self .assertRaises (ValueError , client .parsePropsFromForm , self .db ,
124148 self .db .issue , makeForm ({'status' : 'frozzle' }))
125- # XXX need a test for the TypeError where the link class doesn't define a key?
149+
150+ self .assertRaises (ValueError , client .parsePropsFromForm , self .db ,
151+ self .db .test , makeForm ({'link' : 'frozzle' }))
126152
127153 #
128154 # Multilink
@@ -152,6 +178,8 @@ def testEmptyMultilinkSet(self):
152178 nodeid = self .db .issue .create (nosy = ['1' ,'2' ])
153179 self .assertEqual (client .parsePropsFromForm (self .db , self .db .issue ,
154180 makeForm ({'nosy' : ' ' }), nodeid ), {'nosy' : []})
181+ self .assertEqual (client .parsePropsFromForm (self .db , self .db .issue ,
182+ makeForm ({'nosy' : '1,2' }), nodeid ), {})
155183
156184 def testInvalidMultilinkValue (self ):
157185# XXX This is not the current behaviour - should we enforce this?
@@ -161,7 +189,9 @@ def testInvalidMultilinkValue(self):
161189 self .db .issue , makeForm ({'nosy' : 'frozzle' }))
162190 self .assertRaises (ValueError , client .parsePropsFromForm , self .db ,
163191 self .db .issue , makeForm ({'nosy' : '1,frozzle' }))
164- # XXX need a test for the TypeError (where the ML class doesn't define a key?
192+
193+ self .assertRaises (ValueError , client .parsePropsFromForm , self .db ,
194+ self .db .test , makeForm ({'multilink' : 'frozzle' }))
165195
166196 def testMultilinkAdd (self ):
167197 nodeid = self .db .issue .create (nosy = ['1' ])
@@ -241,40 +271,73 @@ def testSetPasswordConfirmBad(self):
241271 self .db .user , makeForm ({'password' : 'foo' ,
242272 'password:confirm' : 'bar' }))
243273
244- def testEmptyPasswordNOTSet (self ):
245- nodeid = self .db .user .create (username = '1' , password = password .Password ('foo' ))
274+ def testEmptyPasswordNotSet (self ):
275+ nodeid = self .db .user .create (username = '1' ,
276+ password = password .Password ('foo' ))
246277 self .assertEqual (client .parsePropsFromForm (self .db , self .db .user ,
247278 makeForm ({'password' : '' }), nodeid ), {})
248- nodeid = self .db .user .create (username = '2' , password = password .Password ('foo' ))
279+ nodeid = self .db .user .create (username = '2' ,
280+ password = password .Password ('foo' ))
249281 self .assertEqual (client .parsePropsFromForm (self .db , self .db .user ,
250282 makeForm ({'password' : '' , 'password:confirm' : '' }), nodeid ), {})
251283
252284 #
253285 # Boolean
254286 #
255- # XXX this needs a property to work on.
256- # def testEmptyBoolean(self):
257- # self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue,
258- # makeForm({'title': ''})), {})
259- # self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue,
260- # makeForm({'title': ' '})), {})
261- # self.assertRaises(ValueError, client.parsePropsFromForm, self.db,
262- # self.db.issue, makeForm({'title': ['', '']}))
263-
264- # def testSetBoolean(self):
265- # self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue,
266- # makeForm({'title': 'foo'})), {'title': 'foo'})
267- # self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue,
268- # makeForm({'title': 'a\r\nb\r\n'})), {'title': 'a\nb'})
269-
270- # def testEmptyBooleanSet(self):
271- # nodeid = self.db.issue.create(title='foo')
272- # self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue,
273- # makeForm({'title': ''}), nodeid), {'title': ''})
274- # nodeid = self.db.issue.create(title='foo')
275- # self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue,
276- # makeForm({'title': ' '}), nodeid), {'title': ''})
287+ def testEmptyBoolean (self ):
288+ self .assertEqual (client .parsePropsFromForm (self .db , self .db .test ,
289+ makeForm ({'boolean' : '' })), {})
290+ self .assertEqual (client .parsePropsFromForm (self .db , self .db .test ,
291+ makeForm ({'boolean' : ' ' })), {})
292+ self .assertRaises (ValueError , client .parsePropsFromForm , self .db ,
293+ self .db .test , makeForm ({'boolean' : ['' , '' ]}))
294+
295+ def testSetBoolean (self ):
296+ self .assertEqual (client .parsePropsFromForm (self .db , self .db .test ,
297+ makeForm ({'boolean' : 'yes' })), {'boolean' : 1 })
298+ self .assertEqual (client .parsePropsFromForm (self .db , self .db .test ,
299+ makeForm ({'boolean' : 'a\r \n b\r \n ' })), {'boolean' : 0 })
300+ nodeid = self .db .test .create (boolean = 1 )
301+ self .assertEqual (client .parsePropsFromForm (self .db , self .db .test ,
302+ makeForm ({'boolean' : 'yes' }), nodeid ), {})
303+ nodeid = self .db .test .create (boolean = 0 )
304+ self .assertEqual (client .parsePropsFromForm (self .db , self .db .test ,
305+ makeForm ({'boolean' : 'no' }), nodeid ), {})
306+
307+ def testEmptyBooleanSet (self ):
308+ nodeid = self .db .test .create (boolean = 0 )
309+ self .assertEqual (client .parsePropsFromForm (self .db , self .db .test ,
310+ makeForm ({'boolean' : '' }), nodeid ), {'boolean' : None })
311+ nodeid = self .db .test .create (boolean = 1 )
312+ self .assertEqual (client .parsePropsFromForm (self .db , self .db .test ,
313+ makeForm ({'boolean' : ' ' }), nodeid ), {'boolean' : None })
277314
315+ #
316+ # Date
317+ #
318+ def testEmptyDate (self ):
319+ self .assertEqual (client .parsePropsFromForm (self .db , self .db .test ,
320+ makeForm ({'date' : '' })), {})
321+ self .assertEqual (client .parsePropsFromForm (self .db , self .db .test ,
322+ makeForm ({'date' : ' ' })), {})
323+ self .assertRaises (ValueError , client .parsePropsFromForm , self .db ,
324+ self .db .test , makeForm ({'date' : ['' , '' ]}))
325+
326+ def testSetDate (self ):
327+ self .assertEqual (client .parsePropsFromForm (self .db , self .db .test ,
328+ makeForm ({'date' : '2003-01-01' })),
329+ {'date' : date .Date ('2003-01-01' )})
330+ nodeid = self .db .test .create (date = date .Date ('2003-01-01' ))
331+ self .assertEqual (client .parsePropsFromForm (self .db , self .db .test ,
332+ makeForm ({'date' : '2003-01-01' }), nodeid ), {})
333+
334+ def testEmptyDateSet (self ):
335+ nodeid = self .db .test .create (date = date .Date ('.' ))
336+ self .assertEqual (client .parsePropsFromForm (self .db , self .db .test ,
337+ makeForm ({'date' : '' }), nodeid ), {'date' : None })
338+ nodeid = self .db .test .create (date = date .Date ('1970-01-01.00:00:00' ))
339+ self .assertEqual (client .parsePropsFromForm (self .db , self .db .test ,
340+ makeForm ({'date' : ' ' }), nodeid ), {'date' : None })
278341
279342def suite ():
280343 l = [unittest .makeSuite (FormTestCase ),
0 commit comments