comparison test/test_cgi.py @ 1420:3ac43c62a250

implemented extension to form parsing... ...to allow editing of multiple items and creation of multiple items (but only one per class) the colon ":" special form variable designator may now be any of : + @
author Richard Jones <richard@users.sourceforge.net>
date Wed, 12 Feb 2003 06:41:58 +0000
parents 71928bf79302
children 58ce2c1614cd
comparison
equal deleted inserted replaced
1419:c717b8d63a7e 1420:3ac43c62a250
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.6 2003-01-20 23:05:20 richard Exp $ 11 # $Id: test_cgi.py,v 1.7 2003-02-12 06:41:58 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, hyperdb, date 16 from roundup import init, instance, password, hyperdb, date
21 if type(v) is type([]): 21 if type(v) is type([]):
22 [form.list.append(cgi.MiniFieldStorage(k, x)) for x in v] 22 [form.list.append(cgi.MiniFieldStorage(k, x)) for x in v]
23 else: 23 else:
24 form.list.append(cgi.MiniFieldStorage(k, v)) 24 form.list.append(cgi.MiniFieldStorage(k, v))
25 return form 25 return form
26
27 class config:
28 TRACKER_NAME = 'testing testing'
29 TRACKER_WEB = 'http://testing.testing/'
26 30
27 class FormTestCase(unittest.TestCase): 31 class FormTestCase(unittest.TestCase):
28 def setUp(self): 32 def setUp(self):
29 self.dirname = '_test_cgi_form' 33 self.dirname = '_test_cgi_form'
30 try: 34 try:
42 realname='Bork, Chef', roles='User') 46 realname='Bork, Chef', roles='User')
43 self.db.user.create(username='mary', address='mary@test', 47 self.db.user.create(username='mary', address='mary@test',
44 roles='User', realname='Contrary, Mary') 48 roles='User', realname='Contrary, Mary')
45 49
46 test = self.instance.dbinit.Class(self.db, "test", 50 test = self.instance.dbinit.Class(self.db, "test",
51 string=hyperdb.String(),
47 boolean=hyperdb.Boolean(), link=hyperdb.Link('test'), 52 boolean=hyperdb.Boolean(), link=hyperdb.Link('test'),
48 multilink=hyperdb.Multilink('test'), date=hyperdb.Date(), 53 multilink=hyperdb.Multilink('test'), date=hyperdb.Date(),
49 interval=hyperdb.Interval()) 54 interval=hyperdb.Interval())
55
56 def parseForm(self, form, classname='test', nodeid=None):
57 cl = client.Client(self.instance, None, {'PATH_INFO':'/'},
58 makeForm(form))
59 cl.classname = classname
60 cl.nodeid = nodeid
61 cl.db = self.db
62 return cl.parsePropsFromForm()
50 63
51 def tearDown(self): 64 def tearDown(self):
52 self.db.close() 65 self.db.close()
53 try: 66 try:
54 shutil.rmtree(self.dirname) 67 shutil.rmtree(self.dirname)
57 70
58 # 71 #
59 # Empty form 72 # Empty form
60 # 73 #
61 def testNothing(self): 74 def testNothing(self):
62 self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue, 75 self.assertEqual(self.parseForm({}), {'test': {}})
63 makeForm({})), {})
64 76
65 def testNothingWithRequired(self): 77 def testNothingWithRequired(self):
66 self.assertRaises(ValueError, client.parsePropsFromForm, self.db, 78 self.assertRaises(ValueError, self.parseForm, {':required': 'string'})
67 self.db.issue, makeForm({':required': 'title'})) 79 self.assertRaises(ValueError, self.parseForm,
68 self.assertRaises(ValueError, client.parsePropsFromForm, self.db, 80 {':required': 'title,status', 'status':'1'}, 'issue')
69 self.db.issue, makeForm({':required': 'title,status', 81 self.assertRaises(ValueError, self.parseForm,
70 'status':'1'})) 82 {':required': ['title','status'], 'status':'1'}, 'issue')
71 self.assertRaises(ValueError, client.parsePropsFromForm, self.db, 83 self.assertRaises(ValueError, self.parseForm,
72 self.db.issue, makeForm({':required': ['title','status'], 84 {':required': 'status', 'status':''}, 'issue')
73 'status':'1'})) 85 self.assertRaises(ValueError, self.parseForm,
74 self.assertRaises(ValueError, client.parsePropsFromForm, self.db, 86 {':required': 'nosy', 'nosy':''}, 'issue')
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 87
81 # 88 #
82 # Nonexistant edit 89 # Nonexistant edit
83 # 90 #
84 def testEditNonexistant(self): 91 def testEditNonexistant(self):
85 self.assertRaises(IndexError, client.parsePropsFromForm, self.db, 92 self.assertRaises(IndexError, self.parseForm, {'boolean': ''},
86 self.db.test, makeForm({'boolean': ''}), '1') 93 'test', '1')
87 94
88 # 95 #
89 # String 96 # String
90 # 97 #
91 def testEmptyString(self): 98 def testEmptyString(self):
92 self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue, 99 self.assertEqual(self.parseForm({'string': ''}), {'test': {}})
93 makeForm({'title': ''})), {}) 100 self.assertEqual(self.parseForm({'string': ' '}), {'test': {}})
94 self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue, 101 self.assertRaises(ValueError, self.parseForm, {'string': ['', '']})
95 makeForm({'title': ' '})), {})
96 self.assertRaises(ValueError, client.parsePropsFromForm, self.db,
97 self.db.issue, makeForm({'title': ['', '']}))
98 102
99 def testSetString(self): 103 def testSetString(self):
100 self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue, 104 self.assertEqual(self.parseForm({'string': 'foo'}),
101 makeForm({'title': 'foo'})), {'title': 'foo'}) 105 {'test': {'string': 'foo'}})
102 self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue, 106 self.assertEqual(self.parseForm({'string': 'a\r\nb\r\n'}),
103 makeForm({'title': 'a\r\nb\r\n'})), {'title': 'a\nb'}) 107 {'test': {'string': 'a\nb'}})
104 nodeid = self.db.issue.create(title='foo') 108 nodeid = self.db.issue.create(title='foo')
105 self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue, 109 self.assertEqual(self.parseForm({'title': 'foo'}, 'issue', nodeid),
106 makeForm({'title': 'foo'}), nodeid), {}) 110 {'issue'+nodeid: {}})
107 111
108 def testEmptyStringSet(self): 112 def testEmptyStringSet(self):
109 nodeid = self.db.issue.create(title='foo') 113 nodeid = self.db.issue.create(title='foo')
110 self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue, 114 self.assertEqual(self.parseForm({'title': ''}, 'issue', nodeid),
111 makeForm({'title': ''}), nodeid), {'title': None}) 115 {'issue'+nodeid: {'title': None}})
112 nodeid = self.db.issue.create(title='foo') 116 nodeid = self.db.issue.create(title='foo')
113 self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue, 117 self.assertEqual(self.parseForm({'title': ' '}, 'issue', nodeid),
114 makeForm({'title': ' '}), nodeid), {'title': None}) 118 {'issue'+nodeid: {'title': None}})
115 119
116 # 120 #
117 # Link 121 # Link
118 # 122 #
119 def testEmptyLink(self): 123 def testEmptyLink(self):
120 self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue, 124 self.assertEqual(self.parseForm({'link': ''}), {'test': {}})
121 makeForm({'status': ''})), {}) 125 self.assertEqual(self.parseForm({'link': ' '}), {'test': {}})
122 self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue, 126 self.assertRaises(ValueError, self.parseForm, {'link': ['', '']})
123 makeForm({'status': ' '})), {}) 127 self.assertEqual(self.parseForm({'link': '-1'}), {'test': {}})
124 self.assertRaises(ValueError, client.parsePropsFromForm, self.db,
125 self.db.issue, makeForm({'status': ['', '']}))
126 self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue,
127 makeForm({'status': '-1'})), {})
128 128
129 def testSetLink(self): 129 def testSetLink(self):
130 self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue, 130 self.assertEqual(self.parseForm({'status': 'unread'}, 'issue'),
131 makeForm({'status': 'unread'})), {'status': '1'}) 131 {'issue': {'status': '1'}})
132 self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue, 132 self.assertEqual(self.parseForm({'status': '1'}, 'issue'),
133 makeForm({'status': '1'})), {'status': '1'}) 133 {'issue': {'status': '1'}})
134 nodeid = self.db.issue.create(status='unread') 134 nodeid = self.db.issue.create(status='unread')
135 self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue, 135 self.assertEqual(self.parseForm({'status': 'unread'}, 'issue', nodeid),
136 makeForm({'status': 'unread'}), nodeid), {}) 136 {'issue'+nodeid: {}})
137 137
138 def testUnsetLink(self): 138 def testUnsetLink(self):
139 nodeid = self.db.issue.create(status='unread') 139 nodeid = self.db.issue.create(status='unread')
140 self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue, 140 self.assertEqual(self.parseForm({'status': '-1'}, 'issue', nodeid),
141 makeForm({'status': '-1'}), nodeid), {'status': None}) 141 {'issue'+nodeid: {'status': None}})
142 142
143 def testInvalidLinkValue(self): 143 def testInvalidLinkValue(self):
144 # XXX This is not the current behaviour - should we enforce this? 144 # XXX This is not the current behaviour - should we enforce this?
145 # self.assertRaises(IndexError, client.parsePropsFromForm, self.db, 145 # self.assertRaises(IndexError, self.parseForm,
146 # self.db.issue, makeForm({'status': '4'})) 146 # {'status': '4'}))
147 self.assertRaises(ValueError, client.parsePropsFromForm, self.db, 147 self.assertRaises(ValueError, self.parseForm, {'link': 'frozzle'})
148 self.db.issue, makeForm({'status': 'frozzle'})) 148
149 149 self.assertRaises(ValueError, self.parseForm, {'link': 'frozzle'})
150 self.assertRaises(ValueError, client.parsePropsFromForm, self.db,
151 self.db.test, makeForm({'link': 'frozzle'}))
152 150
153 # 151 #
154 # Multilink 152 # Multilink
155 # 153 #
156 def testEmptyMultilink(self): 154 def testEmptyMultilink(self):
157 self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue, 155 self.assertEqual(self.parseForm({'nosy': ''}), {'test': {}})
158 makeForm({'nosy': ''})), {}) 156 self.assertEqual(self.parseForm({'nosy': ' '}), {'test': {}})
159 self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue,
160 makeForm({'nosy': ' '})), {})
161 157
162 def testSetMultilink(self): 158 def testSetMultilink(self):
163 self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue, 159 self.assertEqual(self.parseForm({'nosy': '1'}, 'issue'),
164 makeForm({'nosy': '1'})), {'nosy': ['1']}) 160 {'issue': {'nosy': ['1']}})
165 self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue, 161 self.assertEqual(self.parseForm({'nosy': 'admin'}, 'issue'),
166 makeForm({'nosy': 'admin'})), {'nosy': ['1']}) 162 {'issue': {'nosy': ['1']}})
167 self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue, 163 self.assertEqual(self.parseForm({'nosy': ['1','2']}, 'issue'),
168 makeForm({'nosy': ['1','2']})), {'nosy': ['1','2']}) 164 {'issue': {'nosy': ['1','2']}})
169 self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue, 165 self.assertEqual(self.parseForm({'nosy': '1,2'}, 'issue'),
170 makeForm({'nosy': '1,2'})), {'nosy': ['1','2']}) 166 {'issue': {'nosy': ['1','2']}})
171 self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue, 167 self.assertEqual(self.parseForm({'nosy': 'admin,2'}, 'issue'),
172 makeForm({'nosy': 'admin,2'})), {'nosy': ['1','2']}) 168 {'issue': {'nosy': ['1','2']}})
173 169
174 def testEmptyMultilinkSet(self): 170 def testEmptyMultilinkSet(self):
175 nodeid = self.db.issue.create(nosy=['1','2']) 171 nodeid = self.db.issue.create(nosy=['1','2'])
176 self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue, 172 self.assertEqual(self.parseForm({'nosy': ''}, 'issue', nodeid),
177 makeForm({'nosy': ''}), nodeid), {'nosy': []}) 173 {'issue'+nodeid: {'nosy': []}})
178 nodeid = self.db.issue.create(nosy=['1','2']) 174 nodeid = self.db.issue.create(nosy=['1','2'])
179 self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue, 175 self.assertEqual(self.parseForm({'nosy': ' '}, 'issue', nodeid),
180 makeForm({'nosy': ' '}), nodeid), {'nosy': []}) 176 {'issue'+nodeid: {'nosy': []}})
181 self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue, 177 self.assertEqual(self.parseForm({'nosy': '1,2'}, 'issue', nodeid),
182 makeForm({'nosy': '1,2'}), nodeid), {}) 178 {'issue'+nodeid: {}})
183 179
184 def testInvalidMultilinkValue(self): 180 def testInvalidMultilinkValue(self):
185 # XXX This is not the current behaviour - should we enforce this? 181 # XXX This is not the current behaviour - should we enforce this?
186 # self.assertRaises(IndexError, client.parsePropsFromForm, self.db, 182 # self.assertRaises(IndexError, self.parseForm,
187 # self.db.issue, makeForm({'nosy': '4'})) 183 # {'nosy': '4'}))
188 self.assertRaises(ValueError, client.parsePropsFromForm, self.db, 184 self.assertRaises(ValueError, self.parseForm, {'nosy': 'frozzle'},
189 self.db.issue, makeForm({'nosy': 'frozzle'})) 185 'issue')
190 self.assertRaises(ValueError, client.parsePropsFromForm, self.db, 186 self.assertRaises(ValueError, self.parseForm, {'nosy': '1,frozzle'},
191 self.db.issue, makeForm({'nosy': '1,frozzle'})) 187 'issue')
192 188 self.assertRaises(ValueError, self.parseForm, {'multilink': 'frozzle'})
193 self.assertRaises(ValueError, client.parsePropsFromForm, self.db,
194 self.db.test, makeForm({'multilink': 'frozzle'}))
195 189
196 def testMultilinkAdd(self): 190 def testMultilinkAdd(self):
197 nodeid = self.db.issue.create(nosy=['1']) 191 nodeid = self.db.issue.create(nosy=['1'])
198 # do nothing 192 # do nothing
199 self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue, 193 self.assertEqual(self.parseForm({':add:nosy': ''}, 'issue', nodeid),
200 makeForm({':add:nosy': ''}), nodeid), {}) 194 {'issue'+nodeid: {}})
201 195
202 # do something ;) 196 # do something ;)
203 self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue, 197 self.assertEqual(self.parseForm({':add:nosy': '2'}, 'issue', nodeid),
204 makeForm({':add:nosy': '2'}), nodeid), {'nosy': ['1','2']}) 198 {'issue'+nodeid: {'nosy': ['1','2']}})
205 self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue, 199 self.assertEqual(self.parseForm({':add:nosy': '2,mary'}, 'issue',
206 makeForm({':add:nosy': '2,mary'}), nodeid), {'nosy': ['1','2','4']}) 200 nodeid), {'issue'+nodeid: {'nosy': ['1','2','4']}})
207 self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue, 201 self.assertEqual(self.parseForm({':add:nosy': ['2','3']}, 'issue',
208 makeForm({':add:nosy': ['2','3']}), nodeid), {'nosy': ['1','2','3']}) 202 nodeid), {'issue'+nodeid: {'nosy': ['1','2','3']}})
209 203
210 def testMultilinkAddNew(self): 204 def testMultilinkAddNew(self):
211 self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue, 205 self.assertEqual(self.parseForm({':add:nosy': ['2','3']}, 'issue'),
212 makeForm({':add:nosy': ['2','3']})), {'nosy': ['2','3']}) 206 {'issue': {'nosy': ['2','3']}})
213 207
214 def testMultilinkRemove(self): 208 def testMultilinkRemove(self):
215 nodeid = self.db.issue.create(nosy=['1','2']) 209 nodeid = self.db.issue.create(nosy=['1','2'])
216 # do nothing 210 # do nothing
217 self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue, 211 self.assertEqual(self.parseForm({':remove:nosy': ''}, 'issue', nodeid),
218 makeForm({':remove:nosy': ''}), nodeid), {}) 212 {'issue'+nodeid: {}})
219 213
220 # do something ;) 214 # do something ;)
221 self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue, 215 self.assertEqual(self.parseForm({':remove:nosy': '1'}, 'issue',
222 makeForm({':remove:nosy': '1'}), nodeid), {'nosy': ['2']}) 216 nodeid), {'issue'+nodeid: {'nosy': ['2']}})
223 self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue, 217 self.assertEqual(self.parseForm({':remove:nosy': 'admin,2'},
224 makeForm({':remove:nosy': 'admin,2'}), nodeid), {'nosy': []}) 218 'issue', nodeid), {'issue'+nodeid: {'nosy': []}})
225 self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue, 219 self.assertEqual(self.parseForm({':remove:nosy': ['1','2']},
226 makeForm({':remove:nosy': ['1','2']}), nodeid), {'nosy': []}) 220 'issue', nodeid), {'issue'+nodeid: {'nosy': []}})
227 221
228 # remove one that doesn't exist? 222 # remove one that doesn't exist?
229 self.assertRaises(ValueError, client.parsePropsFromForm, self.db, 223 self.assertRaises(ValueError, self.parseForm, {':remove:nosy': '4'},
230 self.db.issue, makeForm({':remove:nosy': '4'}), nodeid) 224 'issue', nodeid)
231 225
232 def testMultilinkRetired(self): 226 def testMultilinkRetired(self):
233 self.db.user.retire('2') 227 self.db.user.retire('2')
234 self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue, 228 self.assertEqual(self.parseForm({'nosy': ['2','3']}, 'issue'),
235 makeForm({'nosy': ['2','3']})), {'nosy': ['2','3']}) 229 {'issue': {'nosy': ['2','3']}})
236 nodeid = self.db.issue.create(nosy=['1','2']) 230 nodeid = self.db.issue.create(nosy=['1','2'])
237 self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue, 231 self.assertEqual(self.parseForm({':remove:nosy': '2'}, 'issue',
238 makeForm({':remove:nosy': '2'}), nodeid), {'nosy': ['1']}) 232 nodeid), {'issue'+nodeid: {'nosy': ['1']}})
239 self.assertEqual(client.parsePropsFromForm(self.db, self.db.issue, 233 self.assertEqual(self.parseForm({':add:nosy': '3'}, 'issue', nodeid),
240 makeForm({':add:nosy': '3'}), nodeid), {'nosy': ['1','2','3']}) 234 {'issue'+nodeid: {'nosy': ['1','2','3']}})
241 235
242 def testAddRemoveNonexistant(self): 236 def testAddRemoveNonexistant(self):
243 self.assertRaises(ValueError, client.parsePropsFromForm, self.db, 237 self.assertRaises(ValueError, self.parseForm, {':remove:foo': '2'},
244 self.db.issue, makeForm({':remove:foo': '2'})) 238 'issue')
245 self.assertRaises(ValueError, client.parsePropsFromForm, self.db, 239 self.assertRaises(ValueError, self.parseForm, {':add:foo': '2'},
246 self.db.issue, makeForm({':add:foo': '2'})) 240 'issue')
247 241
248 # 242 #
249 # Password 243 # Password
250 # 244 #
251 def testEmptyPassword(self): 245 def testEmptyPassword(self):
252 self.assertEqual(client.parsePropsFromForm(self.db, self.db.user, 246 self.assertEqual(self.parseForm({'password': ''}, 'user'),
253 makeForm({'password': ''})), {}) 247 {'user': {}})
254 self.assertEqual(client.parsePropsFromForm(self.db, self.db.user, 248 self.assertEqual(self.parseForm({'password': ''}, 'user'),
255 makeForm({'password': ''})), {}) 249 {'user': {}})
256 self.assertRaises(ValueError, client.parsePropsFromForm, self.db, 250 self.assertRaises(ValueError, self.parseForm, {'password': ['', '']},
257 self.db.user, makeForm({'password': ['', '']})) 251 'user')
258 self.assertRaises(ValueError, client.parsePropsFromForm, self.db, 252 self.assertRaises(ValueError, self.parseForm, {'password': 'foo',
259 self.db.user, makeForm({'password': 'foo', 253 'password:confirm': ['', '']}, 'user')
260 'password:confirm': ['', '']}))
261 254
262 def testSetPassword(self): 255 def testSetPassword(self):
263 self.assertEqual(client.parsePropsFromForm(self.db, self.db.user, 256 self.assertEqual(self.parseForm({'password': 'foo',
264 makeForm({'password': 'foo', 'password:confirm': 'foo'})), 257 'password:confirm': 'foo'}, 'user'), {'user': {'password': 'foo'}})
265 {'password': 'foo'})
266 258
267 def testSetPasswordConfirmBad(self): 259 def testSetPasswordConfirmBad(self):
268 self.assertRaises(ValueError, client.parsePropsFromForm, self.db, 260 self.assertRaises(ValueError, self.parseForm, {'password': 'foo'},
269 self.db.user, makeForm({'password': 'foo'})) 261 'user')
270 self.assertRaises(ValueError, client.parsePropsFromForm, self.db, 262 self.assertRaises(ValueError, self.parseForm, {'password': 'foo',
271 self.db.user, makeForm({'password': 'foo', 263 'password:confirm': 'bar'}, 'user')
272 'password:confirm': 'bar'}))
273 264
274 def testEmptyPasswordNotSet(self): 265 def testEmptyPasswordNotSet(self):
275 nodeid = self.db.user.create(username='1', 266 nodeid = self.db.user.create(username='1',
276 password=password.Password('foo')) 267 password=password.Password('foo'))
277 self.assertEqual(client.parsePropsFromForm(self.db, self.db.user, 268 self.assertEqual(self.parseForm({'password': ''}, 'user', nodeid),
278 makeForm({'password': ''}), nodeid), {}) 269 {'user'+nodeid: {}})
279 nodeid = self.db.user.create(username='2', 270 nodeid = self.db.user.create(username='2',
280 password=password.Password('foo')) 271 password=password.Password('foo'))
281 self.assertEqual(client.parsePropsFromForm(self.db, self.db.user, 272 self.assertEqual(self.parseForm({'password': '',
282 makeForm({'password': '', 'password:confirm': ''}), nodeid), {}) 273 'password:confirm': ''}, 'user', nodeid),
274 {'user'+nodeid: {}})
283 275
284 # 276 #
285 # Boolean 277 # Boolean
286 # 278 #
287 def testEmptyBoolean(self): 279 def testEmptyBoolean(self):
288 self.assertEqual(client.parsePropsFromForm(self.db, self.db.test, 280 self.assertEqual(self.parseForm({'boolean': ''}), {'test': {}})
289 makeForm({'boolean': ''})), {}) 281 self.assertEqual(self.parseForm({'boolean': ' '}), {'test': {}})
290 self.assertEqual(client.parsePropsFromForm(self.db, self.db.test, 282 self.assertRaises(ValueError, self.parseForm, {'boolean': ['', '']})
291 makeForm({'boolean': ' '})), {})
292 self.assertRaises(ValueError, client.parsePropsFromForm, self.db,
293 self.db.test, makeForm({'boolean': ['', '']}))
294 283
295 def testSetBoolean(self): 284 def testSetBoolean(self):
296 self.assertEqual(client.parsePropsFromForm(self.db, self.db.test, 285 self.assertEqual(self.parseForm({'boolean': 'yes'}),
297 makeForm({'boolean': 'yes'})), {'boolean': 1}) 286 {'test': {'boolean': 1}})
298 self.assertEqual(client.parsePropsFromForm(self.db, self.db.test, 287 self.assertEqual(self.parseForm({'boolean': 'a\r\nb\r\n'}),
299 makeForm({'boolean': 'a\r\nb\r\n'})), {'boolean': 0}) 288 {'test': {'boolean': 0}})
300 nodeid = self.db.test.create(boolean=1) 289 nodeid = self.db.test.create(boolean=1)
301 self.assertEqual(client.parsePropsFromForm(self.db, self.db.test, 290 self.assertEqual(self.parseForm({'boolean': 'yes'}, 'test', nodeid),
302 makeForm({'boolean': 'yes'}), nodeid), {}) 291 {'test'+nodeid: {}})
303 nodeid = self.db.test.create(boolean=0) 292 nodeid = self.db.test.create(boolean=0)
304 self.assertEqual(client.parsePropsFromForm(self.db, self.db.test, 293 self.assertEqual(self.parseForm({'boolean': 'no'}, 'test', nodeid),
305 makeForm({'boolean': 'no'}), nodeid), {}) 294 {'test'+nodeid: {}})
306 295
307 def testEmptyBooleanSet(self): 296 def testEmptyBooleanSet(self):
308 nodeid = self.db.test.create(boolean=0) 297 nodeid = self.db.test.create(boolean=0)
309 self.assertEqual(client.parsePropsFromForm(self.db, self.db.test, 298 self.assertEqual(self.parseForm({'boolean': ''}, 'test', nodeid),
310 makeForm({'boolean': ''}), nodeid), {'boolean': None}) 299 {'test'+nodeid: {'boolean': None}})
311 nodeid = self.db.test.create(boolean=1) 300 nodeid = self.db.test.create(boolean=1)
312 self.assertEqual(client.parsePropsFromForm(self.db, self.db.test, 301 self.assertEqual(self.parseForm({'boolean': ' '}, 'test', nodeid),
313 makeForm({'boolean': ' '}), nodeid), {'boolean': None}) 302 {'test'+nodeid: {'boolean': None}})
314 303
315 # 304 #
316 # Date 305 # Date
317 # 306 #
318 def testEmptyDate(self): 307 def testEmptyDate(self):
319 self.assertEqual(client.parsePropsFromForm(self.db, self.db.test, 308 self.assertEqual(self.parseForm({'date': ''}), {'test': {}})
320 makeForm({'date': ''})), {}) 309 self.assertEqual(self.parseForm({'date': ' '}), {'test': {}})
321 self.assertEqual(client.parsePropsFromForm(self.db, self.db.test, 310 self.assertRaises(ValueError, self.parseForm, {'date': ['', '']})
322 makeForm({'date': ' '})), {})
323 self.assertRaises(ValueError, client.parsePropsFromForm, self.db,
324 self.db.test, makeForm({'date': ['', '']}))
325 311
326 def testSetDate(self): 312 def testSetDate(self):
327 self.assertEqual(client.parsePropsFromForm(self.db, self.db.test, 313 self.assertEqual(self.parseForm({'date': '2003-01-01'}),
328 makeForm({'date': '2003-01-01'})), 314 {'test': {'date': date.Date('2003-01-01')}})
329 {'date': date.Date('2003-01-01')})
330 nodeid = self.db.test.create(date=date.Date('2003-01-01')) 315 nodeid = self.db.test.create(date=date.Date('2003-01-01'))
331 self.assertEqual(client.parsePropsFromForm(self.db, self.db.test, 316 self.assertEqual(self.parseForm({'date': '2003-01-01'}, 'test',
332 makeForm({'date': '2003-01-01'}), nodeid), {}) 317 nodeid), {'test'+nodeid: {}})
333 318
334 def testEmptyDateSet(self): 319 def testEmptyDateSet(self):
335 nodeid = self.db.test.create(date=date.Date('.')) 320 nodeid = self.db.test.create(date=date.Date('.'))
336 self.assertEqual(client.parsePropsFromForm(self.db, self.db.test, 321 self.assertEqual(self.parseForm({'date': ''}, 'test', nodeid),
337 makeForm({'date': ''}), nodeid), {'date': None}) 322 {'test'+nodeid: {'date': None}})
338 nodeid = self.db.test.create(date=date.Date('1970-01-01.00:00:00')) 323 nodeid = self.db.test.create(date=date.Date('1970-01-01.00:00:00'))
339 self.assertEqual(client.parsePropsFromForm(self.db, self.db.test, 324 self.assertEqual(self.parseForm({'date': ' '}, 'test', nodeid),
340 makeForm({'date': ' '}), nodeid), {'date': None}) 325 {'test'+nodeid: {'date': None}})
326
327 #
328 # Test multiple items in form
329 #
330 def testMultiple(self):
331 self.assertEqual(self.parseForm({'string': 'a', 'issue@title': 'b'}),
332 {'test': {'string': 'a'}, 'issue': {'title': 'b'}})
333 nodeid = self.db.test.create()
334 self.assertEqual(self.parseForm({'string': 'a', 'issue@title': 'b'},
335 'test', nodeid),
336 {'test1': {'string': 'a'}, 'issue': {'title': 'b'}})
341 337
342 def suite(): 338 def suite():
343 l = [unittest.makeSuite(FormTestCase), 339 l = [unittest.makeSuite(FormTestCase),
344 ] 340 ]
345 return unittest.TestSuite(l) 341 return unittest.TestSuite(l)

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