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.4 2003-01-15 11:14:01 richard Exp $
11+ # $Id: test_cgi.py,v 1.4.2.1 2003-01-15 22:38:14 richard Exp $
1212
1313import unittest , os , shutil , errno , sys , difflib , cgi
1414
@@ -58,9 +58,14 @@ def testNothing(self):
5858 makeForm ({})), {})
5959
6060 def testNothingWithRequired (self ):
61- form = makeForm ({':required' : 'title' })
6261 self .assertRaises (ValueError , client .parsePropsFromForm , self .db ,
63- self .db .issue , form )
62+ self .db .issue , makeForm ({':required' : 'title' }))
63+ self .assertRaises (ValueError , client .parsePropsFromForm , self .db ,
64+ self .db .issue , makeForm ({':required' : 'title,status' ,
65+ 'status' :'1' }))
66+ self .assertRaises (ValueError , client .parsePropsFromForm , self .db ,
67+ self .db .issue , makeForm ({':required' : ['title' ,'status' ],
68+ 'status' :'1' }))
6469
6570 #
6671 # String
@@ -87,6 +92,38 @@ def testEmptyStringSet(self):
8792 self .assertEqual (client .parsePropsFromForm (self .db , self .db .issue ,
8893 makeForm ({'title' : ' ' }), nodeid ), {'title' : '' })
8994
95+ #
96+ # Link
97+ #
98+ def testEmptyLink (self ):
99+ self .assertEqual (client .parsePropsFromForm (self .db , self .db .issue ,
100+ makeForm ({'status' : '' })), {})
101+ self .assertEqual (client .parsePropsFromForm (self .db , self .db .issue ,
102+ makeForm ({'status' : ' ' })), {})
103+ self .assertRaises (ValueError , client .parsePropsFromForm , self .db ,
104+ self .db .issue , makeForm ({'status' : ['' , '' ]}))
105+ self .assertEqual (client .parsePropsFromForm (self .db , self .db .issue ,
106+ makeForm ({'status' : '-1' })), {})
107+
108+ def testSetLink (self ):
109+ self .assertEqual (client .parsePropsFromForm (self .db , self .db .issue ,
110+ makeForm ({'status' : 'unread' })), {'status' : '1' })
111+ self .assertEqual (client .parsePropsFromForm (self .db , self .db .issue ,
112+ makeForm ({'status' : '1' })), {'status' : '1' })
113+
114+ def testUnsetLink (self ):
115+ nodeid = self .db .issue .create (status = 'unread' )
116+ self .assertEqual (client .parsePropsFromForm (self .db , self .db .issue ,
117+ makeForm ({'status' : '-1' }), nodeid ), {'status' : None })
118+
119+ def testInvalidLinkValue (self ):
120+ # XXX This is not the current behaviour - should we enforce this?
121+ # self.assertRaises(IndexError, client.parsePropsFromForm, self.db,
122+ # self.db.issue, makeForm({'status': '4'}))
123+ self .assertRaises (ValueError , client .parsePropsFromForm , self .db ,
124+ self .db .issue , makeForm ({'status' : 'frozzle' }))
125+ # XXX need a test for the TypeError where the link class doesn't define a key?
126+
90127 #
91128 # Multilink
92129 #
@@ -124,7 +161,7 @@ def testInvalidMultilinkValue(self):
124161 self .db .issue , makeForm ({'nosy' : 'frozzle' }))
125162 self .assertRaises (ValueError , client .parsePropsFromForm , self .db ,
126163 self .db .issue , makeForm ({'nosy' : '1,frozzle' }))
127- # XXX need a test for the TypeError (where the ML class doesn't define a key
164+ # XXX need a test for the TypeError (where the ML class doesn't define a key?
128165
129166 def testMultilinkAdd (self ):
130167 nodeid = self .db .issue .create (nosy = ['1' ])
@@ -162,6 +199,22 @@ def testMultilinkRemove(self):
162199 self .assertRaises (ValueError , client .parsePropsFromForm , self .db ,
163200 self .db .issue , makeForm ({':remove:nosy' : '4' }), nodeid )
164201
202+ def testMultilinkRetired (self ):
203+ self .db .user .retire ('2' )
204+ self .assertEqual (client .parsePropsFromForm (self .db , self .db .issue ,
205+ makeForm ({'nosy' : ['2' ,'3' ]})), {'nosy' : ['2' ,'3' ]})
206+ nodeid = self .db .issue .create (nosy = ['1' ,'2' ])
207+ self .assertEqual (client .parsePropsFromForm (self .db , self .db .issue ,
208+ makeForm ({':remove:nosy' : '2' }), nodeid ), {'nosy' : ['1' ]})
209+ self .assertEqual (client .parsePropsFromForm (self .db , self .db .issue ,
210+ makeForm ({':add:nosy' : '3' }), nodeid ), {'nosy' : ['1' ,'2' ,'3' ]})
211+
212+ def testAddRemoveNonexistant (self ):
213+ self .assertRaises (ValueError , client .parsePropsFromForm , self .db ,
214+ self .db .issue , makeForm ({':remove:foo' : '2' }))
215+ self .assertRaises (ValueError , client .parsePropsFromForm , self .db ,
216+ self .db .issue , makeForm ({':add:foo' : '2' }))
217+
165218 #
166219 # Password
167220 #
@@ -196,6 +249,32 @@ def testEmptyPasswordNOTSet(self):
196249 self .assertEqual (client .parsePropsFromForm (self .db , self .db .user ,
197250 makeForm ({'password' : '' , 'password:confirm' : '' }), nodeid ), {})
198251
252+ #
253+ # Boolean
254+ #
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': ''})
277+
199278
200279def suite ():
201280 l = [unittest .makeSuite (FormTestCase ),
0 commit comments