comparison test/test_cgi.py @ 1393:71928bf79302

more CGI fixes and tests
author Richard Jones <richard@users.sourceforge.net>
date Mon, 20 Jan 2003 23:05:20 +0000
parents 2bd4822f96a6
children 3ac43c62a250
comparison
equal deleted inserted replaced
1392:083cce7840aa 1393:71928bf79302
6 # 6 #
7 # This module is distributed in the hope that it will be useful, 7 # This module is distributed in the hope that it will be useful,
8 # but WITHOUT ANY WARRANTY; without even the implied warranty of 8 # but WITHOUT ANY WARRANTY; without even the implied warranty of
9 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 9 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
10 # 10 #
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 $
12 12
13 import unittest, os, shutil, errno, sys, difflib, cgi 13 import unittest, os, shutil, errno, sys, difflib, cgi
14 14
15 from roundup.cgi import client 15 from roundup.cgi import client
16 from roundup import init, instance, password 16 from roundup import init, instance, password, hyperdb, date
17 17
18 def makeForm(args): 18 def makeForm(args):
19 form = cgi.FieldStorage() 19 form = cgi.FieldStorage()
20 for k,v in args.items(): 20 for k,v in args.items():
21 if type(v) is type([]): 21 if type(v) is type([]):
41 self.db.user.create(username='Chef', address='chef@bork.bork.bork', 41 self.db.user.create(username='Chef', address='chef@bork.bork.bork',
42 realname='Bork, Chef', roles='User') 42 realname='Bork, Chef', roles='User')
43 self.db.user.create(username='mary', address='mary@test', 43 self.db.user.create(username='mary', address='mary@test',
44 roles='User', realname='Contrary, Mary') 44 roles='User', realname='Contrary, Mary')
45 45
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
46 def tearDown(self): 51 def tearDown(self):
47 self.db.close() 52 self.db.close()
48 try: 53 try:
49 shutil.rmtree(self.dirname) 54 shutil.rmtree(self.dirname)
50 except OSError, error: 55 except OSError, error:
64 self.db.issue, makeForm({':required': 'title,status', 69 self.db.issue, makeForm({':required': 'title,status',
65 'status':'1'})) 70 'status':'1'}))
66 self.assertRaises(ValueError, client.parsePropsFromForm, self.db, 71 self.assertRaises(ValueError, client.parsePropsFromForm, self.db,
67 self.db.issue, makeForm({':required': ['title','status'], 72 self.db.issue, makeForm({':required': ['title','status'],
68 'status':'1'})) 73 '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')
69 87
70 # 88 #
71 # String 89 # String
72 # 90 #
73 def testEmptyString(self): 91 def testEmptyString(self):
81 def testSetString(self): 99 def testSetString(self):
82 self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue, 100 self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue,
83 makeForm({'title': 'foo'})), {'title': 'foo'}) 101 makeForm({'title': 'foo'})), {'title': 'foo'})
84 self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue, 102 self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue,
85 makeForm({'title': 'a\r\nb\r\n'})), {'title': 'a\nb'}) 103 makeForm({'title': 'a\r\nb\r\n'})), {'title': 'a\nb'})
104 nodeid = self.db.issue.create(title='foo')
105 self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue,
106 makeForm({'title': 'foo'}), nodeid), {})
86 107
87 def testEmptyStringSet(self): 108 def testEmptyStringSet(self):
88 nodeid = self.db.issue.create(title='foo') 109 nodeid = self.db.issue.create(title='foo')
89 self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue, 110 self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue,
90 makeForm({'title': ''}), nodeid), {'title': ''}) 111 makeForm({'title': ''}), nodeid), {'title': None})
91 nodeid = self.db.issue.create(title='foo') 112 nodeid = self.db.issue.create(title='foo')
92 self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue, 113 self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue,
93 makeForm({'title': ' '}), nodeid), {'title': ''}) 114 makeForm({'title': ' '}), nodeid), {'title': None})
94 115
95 # 116 #
96 # Link 117 # Link
97 # 118 #
98 def testEmptyLink(self): 119 def testEmptyLink(self):
108 def testSetLink(self): 129 def testSetLink(self):
109 self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue, 130 self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue,
110 makeForm({'status': 'unread'})), {'status': '1'}) 131 makeForm({'status': 'unread'})), {'status': '1'})
111 self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue, 132 self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue,
112 makeForm({'status': '1'})), {'status': '1'}) 133 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), {})
113 137
114 def testUnsetLink(self): 138 def testUnsetLink(self):
115 nodeid = self.db.issue.create(status='unread') 139 nodeid = self.db.issue.create(status='unread')
116 self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue, 140 self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue,
117 makeForm({'status': '-1'}), nodeid), {'status': None}) 141 makeForm({'status': '-1'}), nodeid), {'status': None})
120 # XXX This is not the current behaviour - should we enforce this? 144 # XXX This is not the current behaviour - should we enforce this?
121 # self.assertRaises(IndexError, client.parsePropsFromForm, self.db, 145 # self.assertRaises(IndexError, client.parsePropsFromForm, self.db,
122 # self.db.issue, makeForm({'status': '4'})) 146 # self.db.issue, makeForm({'status': '4'}))
123 self.assertRaises(ValueError, client.parsePropsFromForm, self.db, 147 self.assertRaises(ValueError, client.parsePropsFromForm, self.db,
124 self.db.issue, makeForm({'status': 'frozzle'})) 148 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'}))
126 152
127 # 153 #
128 # Multilink 154 # Multilink
129 # 155 #
130 def testEmptyMultilink(self): 156 def testEmptyMultilink(self):
150 self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue, 176 self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue,
151 makeForm({'nosy': ''}), nodeid), {'nosy': []}) 177 makeForm({'nosy': ''}), nodeid), {'nosy': []})
152 nodeid = self.db.issue.create(nosy=['1','2']) 178 nodeid = self.db.issue.create(nosy=['1','2'])
153 self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue, 179 self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue,
154 makeForm({'nosy': ' '}), nodeid), {'nosy': []}) 180 makeForm({'nosy': ' '}), nodeid), {'nosy': []})
181 self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue,
182 makeForm({'nosy': '1,2'}), nodeid), {})
155 183
156 def testInvalidMultilinkValue(self): 184 def testInvalidMultilinkValue(self):
157 # XXX This is not the current behaviour - should we enforce this? 185 # XXX This is not the current behaviour - should we enforce this?
158 # self.assertRaises(IndexError, client.parsePropsFromForm, self.db, 186 # self.assertRaises(IndexError, client.parsePropsFromForm, self.db,
159 # self.db.issue, makeForm({'nosy': '4'})) 187 # self.db.issue, makeForm({'nosy': '4'}))
160 self.assertRaises(ValueError, client.parsePropsFromForm, self.db, 188 self.assertRaises(ValueError, client.parsePropsFromForm, self.db,
161 self.db.issue, makeForm({'nosy': 'frozzle'})) 189 self.db.issue, makeForm({'nosy': 'frozzle'}))
162 self.assertRaises(ValueError, client.parsePropsFromForm, self.db, 190 self.assertRaises(ValueError, client.parsePropsFromForm, self.db,
163 self.db.issue, makeForm({'nosy': '1,frozzle'})) 191 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'}))
165 195
166 def testMultilinkAdd(self): 196 def testMultilinkAdd(self):
167 nodeid = self.db.issue.create(nosy=['1']) 197 nodeid = self.db.issue.create(nosy=['1'])
168 # do nothing 198 # do nothing
169 self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue, 199 self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue,
239 self.db.user, makeForm({'password': 'foo'})) 269 self.db.user, makeForm({'password': 'foo'}))
240 self.assertRaises(ValueError, client.parsePropsFromForm, self.db, 270 self.assertRaises(ValueError, client.parsePropsFromForm, self.db,
241 self.db.user, makeForm({'password': 'foo', 271 self.db.user, makeForm({'password': 'foo',
242 'password:confirm': 'bar'})) 272 'password:confirm': 'bar'}))
243 273
244 def testEmptyPasswordNOTSet(self): 274 def testEmptyPasswordNotSet(self):
245 nodeid = self.db.user.create(username='1', password=password.Password('foo')) 275 nodeid = self.db.user.create(username='1',
276 password=password.Password('foo'))
246 self.assertEqual(client.parsePropsFromForm(self.db, self.db.user, 277 self.assertEqual(client.parsePropsFromForm(self.db, self.db.user,
247 makeForm({'password': ''}), nodeid), {}) 278 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'))
249 self.assertEqual(client.parsePropsFromForm(self.db, self.db.user, 281 self.assertEqual(client.parsePropsFromForm(self.db, self.db.user,
250 makeForm({'password': '', 'password:confirm': ''}), nodeid), {}) 282 makeForm({'password': '', 'password:confirm': ''}), nodeid), {})
251 283
252 # 284 #
253 # Boolean 285 # Boolean
254 # 286 #
255 # XXX this needs a property to work on. 287 def testEmptyBoolean(self):
256 # def testEmptyBoolean(self): 288 self.assertEqual(client.parsePropsFromForm(self.db, self.db.test,
257 # self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue, 289 makeForm({'boolean': ''})), {})
258 # makeForm({'title': ''})), {}) 290 self.assertEqual(client.parsePropsFromForm(self.db, self.db.test,
259 # self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue, 291 makeForm({'boolean': ' '})), {})
260 # makeForm({'title': ' '})), {}) 292 self.assertRaises(ValueError, client.parsePropsFromForm, self.db,
261 # self.assertRaises(ValueError, client.parsePropsFromForm, self.db, 293 self.db.test, makeForm({'boolean': ['', '']}))
262 # self.db.issue, makeForm({'title': ['', '']})) 294
263 295 def testSetBoolean(self):
264 # def testSetBoolean(self): 296 self.assertEqual(client.parsePropsFromForm(self.db, self.db.test,
265 # self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue, 297 makeForm({'boolean': 'yes'})), {'boolean': 1})
266 # makeForm({'title': 'foo'})), {'title': 'foo'}) 298 self.assertEqual(client.parsePropsFromForm(self.db, self.db.test,
267 # self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue, 299 makeForm({'boolean': 'a\r\nb\r\n'})), {'boolean': 0})
268 # makeForm({'title': 'a\r\nb\r\n'})), {'title': 'a\nb'}) 300 nodeid = self.db.test.create(boolean=1)
269 301 self.assertEqual(client.parsePropsFromForm(self.db, self.db.test,
270 # def testEmptyBooleanSet(self): 302 makeForm({'boolean': 'yes'}), nodeid), {})
271 # nodeid = self.db.issue.create(title='foo') 303 nodeid = self.db.test.create(boolean=0)
272 # self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue, 304 self.assertEqual(client.parsePropsFromForm(self.db, self.db.test,
273 # makeForm({'title': ''}), nodeid), {'title': ''}) 305 makeForm({'boolean': 'no'}), nodeid), {})
274 # nodeid = self.db.issue.create(title='foo') 306
275 # self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue, 307 def testEmptyBooleanSet(self):
276 # makeForm({'title': ' '}), nodeid), {'title': ''}) 308 nodeid = self.db.test.create(boolean=0)
277 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})
314
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})
278 341
279 def suite(): 342 def suite():
280 l = [unittest.makeSuite(FormTestCase), 343 l = [unittest.makeSuite(FormTestCase),
281 ] 344 ]
282 return unittest.TestSuite(l) 345 return unittest.TestSuite(l)

Roundup Issue Tracker: http://roundup-tracker.org/