Mercurial > p > roundup > code
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) |
