Mercurial > p > roundup > code
comparison test/test_cgi.py @ 1819:e24cebaaa7e8
Use FormError.
| author | Johannes Gijsbers <jlgijsbers@users.sourceforge.net> |
|---|---|
| date | Wed, 24 Sep 2003 14:54:23 +0000 |
| parents | c1eec970d5c0 |
| children | f63aa57386b0 |
comparison
equal
deleted
inserted
replaced
| 1818:85fd3d0e7d81 | 1819:e24cebaaa7e8 |
|---|---|
| 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.19 2003-09-07 20:37:33 jlgijsbers Exp $ | 11 # $Id: test_cgi.py,v 1.20 2003-09-24 14:54:23 jlgijsbers Exp $ |
| 12 | 12 |
| 13 import unittest, os, shutil, errno, sys, difflib, cgi, re | 13 import unittest, os, shutil, errno, sys, difflib, cgi, re |
| 14 | 14 |
| 15 from roundup.cgi import client | 15 from roundup.cgi import client |
| 16 from roundup.cgi.client import FormError | |
| 16 from roundup import init, instance, password, hyperdb, date | 17 from roundup import init, instance, password, hyperdb, date |
| 17 | 18 |
| 18 NEEDS_INSTANCE = 1 | 19 NEEDS_INSTANCE = 1 |
| 19 | 20 |
| 20 class FileUpload: | 21 class FileUpload: |
| 147 # | 148 # |
| 148 def testNothing(self): | 149 def testNothing(self): |
| 149 self.assertEqual(self.parseForm({}), ({('test', None): {}}, [])) | 150 self.assertEqual(self.parseForm({}), ({('test', None): {}}, [])) |
| 150 | 151 |
| 151 def testNothingWithRequired(self): | 152 def testNothingWithRequired(self): |
| 152 self.assertRaises(ValueError, self.parseForm, {':required': 'string'}) | 153 self.assertRaises(FormError, self.parseForm, {':required': 'string'}) |
| 153 self.assertRaises(ValueError, self.parseForm, | 154 self.assertRaises(FormError, self.parseForm, |
| 154 {':required': 'title,status', 'status':'1'}, 'issue') | 155 {':required': 'title,status', 'status':'1'}, 'issue') |
| 155 self.assertRaises(ValueError, self.parseForm, | 156 self.assertRaises(FormError, self.parseForm, |
| 156 {':required': ['title','status'], 'status':'1'}, 'issue') | 157 {':required': ['title','status'], 'status':'1'}, 'issue') |
| 157 self.assertRaises(ValueError, self.parseForm, | 158 self.assertRaises(FormError, self.parseForm, |
| 158 {':required': 'status', 'status':''}, 'issue') | 159 {':required': 'status', 'status':''}, 'issue') |
| 159 self.assertRaises(ValueError, self.parseForm, | 160 self.assertRaises(FormError, self.parseForm, |
| 160 {':required': 'nosy', 'nosy':''}, 'issue') | 161 {':required': 'nosy', 'nosy':''}, 'issue') |
| 161 | 162 |
| 162 # | 163 # |
| 163 # Nonexistant edit | 164 # Nonexistant edit |
| 164 # | 165 # |
| 165 def testEditNonexistant(self): | 166 def testEditNonexistant(self): |
| 166 self.assertRaises(IndexError, self.parseForm, {'boolean': ''}, | 167 self.assertRaises(FormError, self.parseForm, {'boolean': ''}, |
| 167 'test', '1') | 168 'test', '1') |
| 168 | 169 |
| 169 # | 170 # |
| 170 # String | 171 # String |
| 171 # | 172 # |
| 172 def testEmptyString(self): | 173 def testEmptyString(self): |
| 173 self.assertEqual(self.parseForm({'string': ''}), | 174 self.assertEqual(self.parseForm({'string': ''}), |
| 174 ({('test', None): {}}, [])) | 175 ({('test', None): {}}, [])) |
| 175 self.assertEqual(self.parseForm({'string': ' '}), | 176 self.assertEqual(self.parseForm({'string': ' '}), |
| 176 ({('test', None): {}}, [])) | 177 ({('test', None): {}}, [])) |
| 177 self.assertRaises(ValueError, self.parseForm, {'string': ['', '']}) | 178 self.assertRaises(FormError, self.parseForm, {'string': ['', '']}) |
| 178 | 179 |
| 179 def testSetString(self): | 180 def testSetString(self): |
| 180 self.assertEqual(self.parseForm({'string': 'foo'}), | 181 self.assertEqual(self.parseForm({'string': 'foo'}), |
| 181 ({('test', None): {'string': 'foo'}}, [])) | 182 ({('test', None): {'string': 'foo'}}, [])) |
| 182 self.assertEqual(self.parseForm({'string': 'a\r\nb\r\n'}), | 183 self.assertEqual(self.parseForm({'string': 'a\r\nb\r\n'}), |
| 212 def testEmptyLink(self): | 213 def testEmptyLink(self): |
| 213 self.assertEqual(self.parseForm({'link': ''}), | 214 self.assertEqual(self.parseForm({'link': ''}), |
| 214 ({('test', None): {}}, [])) | 215 ({('test', None): {}}, [])) |
| 215 self.assertEqual(self.parseForm({'link': ' '}), | 216 self.assertEqual(self.parseForm({'link': ' '}), |
| 216 ({('test', None): {}}, [])) | 217 ({('test', None): {}}, [])) |
| 217 self.assertRaises(ValueError, self.parseForm, {'link': ['', '']}) | 218 self.assertRaises(FormError, self.parseForm, {'link': ['', '']}) |
| 218 self.assertEqual(self.parseForm({'link': '-1'}), | 219 self.assertEqual(self.parseForm({'link': '-1'}), |
| 219 ({('test', None): {}}, [])) | 220 ({('test', None): {}}, [])) |
| 220 | 221 |
| 221 def testSetLink(self): | 222 def testSetLink(self): |
| 222 self.assertEqual(self.parseForm({'status': 'unread'}, 'issue'), | 223 self.assertEqual(self.parseForm({'status': 'unread'}, 'issue'), |
| 234 | 235 |
| 235 def testInvalidLinkValue(self): | 236 def testInvalidLinkValue(self): |
| 236 # XXX This is not the current behaviour - should we enforce this? | 237 # XXX This is not the current behaviour - should we enforce this? |
| 237 # self.assertRaises(IndexError, self.parseForm, | 238 # self.assertRaises(IndexError, self.parseForm, |
| 238 # {'status': '4'})) | 239 # {'status': '4'})) |
| 239 self.assertRaises(ValueError, self.parseForm, {'link': 'frozzle'}) | 240 self.assertRaises(FormError, self.parseForm, {'link': 'frozzle'}) |
| 240 self.assertRaises(ValueError, self.parseForm, {'status': 'frozzle'}, | 241 self.assertRaises(FormError, self.parseForm, {'status': 'frozzle'}, |
| 241 'issue') | 242 'issue') |
| 242 | 243 |
| 243 # | 244 # |
| 244 # Multilink | 245 # Multilink |
| 245 # | 246 # |
| 284 | 285 |
| 285 def testInvalidMultilinkValue(self): | 286 def testInvalidMultilinkValue(self): |
| 286 # XXX This is not the current behaviour - should we enforce this? | 287 # XXX This is not the current behaviour - should we enforce this? |
| 287 # self.assertRaises(IndexError, self.parseForm, | 288 # self.assertRaises(IndexError, self.parseForm, |
| 288 # {'nosy': '4'})) | 289 # {'nosy': '4'})) |
| 289 self.assertRaises(ValueError, self.parseForm, {'nosy': 'frozzle'}, | 290 self.assertRaises(FormError, self.parseForm, {'nosy': 'frozzle'}, |
| 290 'issue') | 291 'issue') |
| 291 self.assertRaises(ValueError, self.parseForm, {'nosy': '1,frozzle'}, | 292 self.assertRaises(FormError, self.parseForm, {'nosy': '1,frozzle'}, |
| 292 'issue') | 293 'issue') |
| 293 self.assertRaises(ValueError, self.parseForm, {'multilink': 'frozzle'}) | 294 self.assertRaises(FormError, self.parseForm, {'multilink': 'frozzle'}) |
| 294 | 295 |
| 295 def testMultilinkAdd(self): | 296 def testMultilinkAdd(self): |
| 296 nodeid = self.db.issue.create(nosy=['1']) | 297 nodeid = self.db.issue.create(nosy=['1']) |
| 297 # do nothing | 298 # do nothing |
| 298 self.assertEqual(self.parseForm({':add:nosy': ''}, 'issue', nodeid), | 299 self.assertEqual(self.parseForm({':add:nosy': ''}, 'issue', nodeid), |
| 328 self.assertEqual(self.parseForm({':add:nosy': ['3'], | 329 self.assertEqual(self.parseForm({':add:nosy': ['3'], |
| 329 ':remove:nosy': ['1','2']}, | 330 ':remove:nosy': ['1','2']}, |
| 330 'issue', nodeid), ({('issue', nodeid): {'nosy': ['3']}}, [])) | 331 'issue', nodeid), ({('issue', nodeid): {'nosy': ['3']}}, [])) |
| 331 | 332 |
| 332 # remove one that doesn't exist? | 333 # remove one that doesn't exist? |
| 333 self.assertRaises(ValueError, self.parseForm, {':remove:nosy': '4'}, | 334 self.assertRaises(FormError, self.parseForm, {':remove:nosy': '4'}, |
| 334 'issue', nodeid) | 335 'issue', nodeid) |
| 335 | 336 |
| 336 def testMultilinkRetired(self): | 337 def testMultilinkRetired(self): |
| 337 self.db.user.retire('2') | 338 self.db.user.retire('2') |
| 338 self.assertEqual(self.parseForm({'nosy': ['2','3']}, 'issue'), | 339 self.assertEqual(self.parseForm({'nosy': ['2','3']}, 'issue'), |
| 342 nodeid), ({('issue', nodeid): {'nosy': ['1']}}, [])) | 343 nodeid), ({('issue', nodeid): {'nosy': ['1']}}, [])) |
| 343 self.assertEqual(self.parseForm({':add:nosy': '3'}, 'issue', nodeid), | 344 self.assertEqual(self.parseForm({':add:nosy': '3'}, 'issue', nodeid), |
| 344 ({('issue', nodeid): {'nosy': ['1','2','3']}}, [])) | 345 ({('issue', nodeid): {'nosy': ['1','2','3']}}, [])) |
| 345 | 346 |
| 346 def testAddRemoveNonexistant(self): | 347 def testAddRemoveNonexistant(self): |
| 347 self.assertRaises(ValueError, self.parseForm, {':remove:foo': '2'}, | 348 self.assertRaises(FormError, self.parseForm, {':remove:foo': '2'}, |
| 348 'issue') | 349 'issue') |
| 349 self.assertRaises(ValueError, self.parseForm, {':add:foo': '2'}, | 350 self.assertRaises(FormError, self.parseForm, {':add:foo': '2'}, |
| 350 'issue') | 351 'issue') |
| 351 | 352 |
| 352 # | 353 # |
| 353 # Password | 354 # Password |
| 354 # | 355 # |
| 355 def testEmptyPassword(self): | 356 def testEmptyPassword(self): |
| 356 self.assertEqual(self.parseForm({'password': ''}, 'user'), | 357 self.assertEqual(self.parseForm({'password': ''}, 'user'), |
| 357 ({('user', None): {}}, [])) | 358 ({('user', None): {}}, [])) |
| 358 self.assertEqual(self.parseForm({'password': ''}, 'user'), | 359 self.assertEqual(self.parseForm({'password': ''}, 'user'), |
| 359 ({('user', None): {}}, [])) | 360 ({('user', None): {}}, [])) |
| 360 self.assertRaises(ValueError, self.parseForm, {'password': ['', '']}, | 361 self.assertRaises(FormError, self.parseForm, {'password': ['', '']}, |
| 361 'user') | 362 'user') |
| 362 self.assertRaises(ValueError, self.parseForm, {'password': 'foo', | 363 self.assertRaises(FormError, self.parseForm, {'password': 'foo', |
| 363 ':confirm:password': ['', '']}, 'user') | 364 ':confirm:password': ['', '']}, 'user') |
| 364 | 365 |
| 365 def testSetPassword(self): | 366 def testSetPassword(self): |
| 366 self.assertEqual(self.parseForm({'password': 'foo', | 367 self.assertEqual(self.parseForm({'password': 'foo', |
| 367 ':confirm:password': 'foo'}, 'user'), | 368 ':confirm:password': 'foo'}, 'user'), |
| 368 ({('user', None): {'password': 'foo'}}, [])) | 369 ({('user', None): {'password': 'foo'}}, [])) |
| 369 | 370 |
| 370 def testSetPasswordConfirmBad(self): | 371 def testSetPasswordConfirmBad(self): |
| 371 self.assertRaises(ValueError, self.parseForm, {'password': 'foo'}, | 372 self.assertRaises(FormError, self.parseForm, {'password': 'foo'}, |
| 372 'user') | 373 'user') |
| 373 self.assertRaises(ValueError, self.parseForm, {'password': 'foo', | 374 self.assertRaises(FormError, self.parseForm, {'password': 'foo', |
| 374 ':confirm:password': 'bar'}, 'user') | 375 ':confirm:password': 'bar'}, 'user') |
| 375 | 376 |
| 376 def testEmptyPasswordNotSet(self): | 377 def testEmptyPasswordNotSet(self): |
| 377 nodeid = self.db.user.create(username='1', | 378 nodeid = self.db.user.create(username='1', |
| 378 password=password.Password('foo')) | 379 password=password.Password('foo')) |
| 390 def testEmptyBoolean(self): | 391 def testEmptyBoolean(self): |
| 391 self.assertEqual(self.parseForm({'boolean': ''}), | 392 self.assertEqual(self.parseForm({'boolean': ''}), |
| 392 ({('test', None): {}}, [])) | 393 ({('test', None): {}}, [])) |
| 393 self.assertEqual(self.parseForm({'boolean': ' '}), | 394 self.assertEqual(self.parseForm({'boolean': ' '}), |
| 394 ({('test', None): {}}, [])) | 395 ({('test', None): {}}, [])) |
| 395 self.assertRaises(ValueError, self.parseForm, {'boolean': ['', '']}) | 396 self.assertRaises(FormError, self.parseForm, {'boolean': ['', '']}) |
| 396 | 397 |
| 397 def testSetBoolean(self): | 398 def testSetBoolean(self): |
| 398 self.assertEqual(self.parseForm({'boolean': 'yes'}), | 399 self.assertEqual(self.parseForm({'boolean': 'yes'}), |
| 399 ({('test', None): {'boolean': 1}}, [])) | 400 ({('test', None): {'boolean': 1}}, [])) |
| 400 self.assertEqual(self.parseForm({'boolean': 'a\r\nb\r\n'}), | 401 self.assertEqual(self.parseForm({'boolean': 'a\r\nb\r\n'}), |
| 420 def testEmptyNumber(self): | 421 def testEmptyNumber(self): |
| 421 self.assertEqual(self.parseForm({'number': ''}), | 422 self.assertEqual(self.parseForm({'number': ''}), |
| 422 ({('test', None): {}}, [])) | 423 ({('test', None): {}}, [])) |
| 423 self.assertEqual(self.parseForm({'number': ' '}), | 424 self.assertEqual(self.parseForm({'number': ' '}), |
| 424 ({('test', None): {}}, [])) | 425 ({('test', None): {}}, [])) |
| 425 self.assertRaises(ValueError, self.parseForm, {'number': ['', '']}) | 426 self.assertRaises(FormError, self.parseForm, {'number': ['', '']}) |
| 426 | 427 |
| 427 def testInvalidNumber(self): | 428 def testInvalidNumber(self): |
| 428 self.assertRaises(ValueError, self.parseForm, {'number': 'hi, mum!'}) | 429 self.assertRaises(FormError, self.parseForm, {'number': 'hi, mum!'}) |
| 429 | 430 |
| 430 def testSetNumber(self): | 431 def testSetNumber(self): |
| 431 self.assertEqual(self.parseForm({'number': '1'}), | 432 self.assertEqual(self.parseForm({'number': '1'}), |
| 432 ({('test', None): {'number': 1}}, [])) | 433 ({('test', None): {'number': 1}}, [])) |
| 433 self.assertEqual(self.parseForm({'number': '\n0\n'}), | 434 self.assertEqual(self.parseForm({'number': '\n0\n'}), |
| 453 def testEmptyDate(self): | 454 def testEmptyDate(self): |
| 454 self.assertEqual(self.parseForm({'date': ''}), | 455 self.assertEqual(self.parseForm({'date': ''}), |
| 455 ({('test', None): {}}, [])) | 456 ({('test', None): {}}, [])) |
| 456 self.assertEqual(self.parseForm({'date': ' '}), | 457 self.assertEqual(self.parseForm({'date': ' '}), |
| 457 ({('test', None): {}}, [])) | 458 ({('test', None): {}}, [])) |
| 458 self.assertRaises(ValueError, self.parseForm, {'date': ['', '']}) | 459 self.assertRaises(FormError, self.parseForm, {'date': ['', '']}) |
| 459 | 460 |
| 460 def testInvalidDate(self): | 461 def testInvalidDate(self): |
| 461 self.assertRaises(ValueError, self.parseForm, {'date': '12'}) | 462 self.assertRaises(FormError, self.parseForm, {'date': '12'}) |
| 462 | 463 |
| 463 def testSetDate(self): | 464 def testSetDate(self): |
| 464 self.assertEqual(self.parseForm({'date': '2003-01-01'}), | 465 self.assertEqual(self.parseForm({'date': '2003-01-01'}), |
| 465 ({('test', None): {'date': date.Date('2003-01-01')}}, [])) | 466 ({('test', None): {'date': date.Date('2003-01-01')}}, [])) |
| 466 nodeid = self.db.test.create(date=date.Date('2003-01-01')) | 467 nodeid = self.db.test.create(date=date.Date('2003-01-01')) |
| 504 ] | 505 ] |
| 505 ) | 506 ) |
| 506 ) | 507 ) |
| 507 | 508 |
| 508 def testLinkBadDesignator(self): | 509 def testLinkBadDesignator(self): |
| 509 self.assertRaises(ValueError, self.parseForm, | 510 self.assertRaises(FormError, self.parseForm, |
| 510 {'test-1@link@link': 'blah'}) | 511 {'test-1@link@link': 'blah'}) |
| 511 self.assertRaises(ValueError, self.parseForm, | 512 self.assertRaises(FormError, self.parseForm, |
| 512 {'test-1@link@link': 'issue'}) | 513 {'test-1@link@link': 'issue'}) |
| 513 | 514 |
| 514 def testLinkNotLink(self): | 515 def testLinkNotLink(self): |
| 515 self.assertRaises(ValueError, self.parseForm, | 516 self.assertRaises(FormError, self.parseForm, |
| 516 {'test-1@link@boolean': 'issue-1'}) | 517 {'test-1@link@boolean': 'issue-1'}) |
| 517 self.assertRaises(ValueError, self.parseForm, | 518 self.assertRaises(FormError, self.parseForm, |
| 518 {'test-1@link@string': 'issue-1'}) | 519 {'test-1@link@string': 'issue-1'}) |
| 519 | 520 |
| 520 def testBackwardsCompat(self): | 521 def testBackwardsCompat(self): |
| 521 res = self.parseForm({':note': 'spam'}, 'issue') | 522 res = self.parseForm({':note': 'spam'}, 'issue') |
| 522 date = res[0][('msg', '-1')]['date'] | 523 date = res[0][('msg', '-1')]['date'] |
