Skip to content

Commit f479c92

Browse files
author
Ralf Schlatterbeck
committed
New test for linking of non-existing and existing properties via a form.
The idea of the test is to track all create and set operations and afterwards compare that they occurred as expected. Sorry for the peculiar syntax for the expected updates to the database -- this should be one line for each update... An a bug-fix: I've reverted a change from April in roundup/cgi/actions.py that broke linking of messages to issues. The tests above now catch that. I couldn't figure out what the change was meant for, sorry if I broke something here.
1 parent f644380 commit f479c92

File tree

2 files changed

+58
-5
lines changed

2 files changed

+58
-5
lines changed

roundup/cgi/actions.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
#$Id: actions.py,v 1.67 2007-05-07 14:03:30 schlatterbeck Exp $
1+
#$Id: actions.py,v 1.68 2007-05-08 20:54:56 schlatterbeck Exp $
22

33
import re, cgi, StringIO, urllib, Cookie, time, random, csv, codecs
4+
import sys
45

56
from roundup import hyperdb, token, date, password
67
from roundup.i18n import _
@@ -371,12 +372,10 @@ def _editnodes(self, all_props, all_links):
371372
# link item to link to doesn't (and won't) exist
372373
continue
373374

374-
for vcn, vid in vlist:
375-
if vid == '-1': vid = None
376-
if not (vid or all_props.has_key((vcn, vid))):
375+
for value in vlist:
376+
if not all_props.has_key(value):
377377
# link item to link to doesn't (and won't) exist
378378
continue
379-
value = (vcn, vid)
380379
deps.setdefault((cn, nodeid), []).append(value)
381380
links.setdefault(value, []).append((cn, nodeid, propname))
382381

test/test_actions.py

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,59 @@ def opendb(username):
225225

226226
self.assertLoginLeavesMessages([], 'foo', 'right')
227227

228+
class EditItemActionTestCase(ActionTestCase):
229+
def setUp(self):
230+
ActionTestCase.setUp(self)
231+
self.result = []
232+
class AppendResult:
233+
def __init__(inner_self, name):
234+
inner_self.name = name
235+
def __call__(inner_self, *args, **kw):
236+
self.result.append((inner_self.name, args, kw))
237+
if inner_self.name == 'set':
238+
return kw
239+
return '17'
240+
241+
self.client.db.security.hasPermission = true
242+
self.client.classname = 'issue'
243+
self.client.base = 'http://tracker/'
244+
self.client.nodeid = '4711'
245+
self.client.template = 'item'
246+
self.client.db.classes.create = AppendResult('create')
247+
self.client.db.classes.set = AppendResult('set')
248+
self.client.db.classes.getprops = lambda: \
249+
({'messages':hyperdb.Multilink('msg'), 'content':hyperdb.String()})
250+
self.action = EditItemAction(self.client)
251+
252+
def testMessageAttach(self):
253+
expect = \
254+
[ ('create',(),{'content':'t'})
255+
, ('set',('4711',), {'messages':['23','42','17']})
256+
]
257+
self.client.db.classes.get = lambda a, b:['23','42']
258+
self.client.parsePropsFromForm = lambda: \
259+
( {('msg','-1'):{'content':'t'},('issue','4711'):{}}
260+
, [('issue','4711','messages',[('msg','-1')])]
261+
)
262+
try :
263+
self.action.handle()
264+
except Redirect, msg:
265+
pass
266+
self.assertEqual(expect, self.result)
267+
268+
def testLinkExisting(self):
269+
expect = [('set',('4711',),{'messages':['23','42','1']})]
270+
self.client.db.classes.get = lambda a, b:['23','42']
271+
self.client.parsePropsFromForm = lambda: \
272+
( {('issue','4711'):{},('msg','1'):{}}
273+
, [('issue','4711','messages',[('msg','1')])]
274+
)
275+
try :
276+
self.action.handle()
277+
except Redirect, msg:
278+
pass
279+
self.assertEqual(expect, self.result)
280+
228281
def test_suite():
229282
suite = unittest.TestSuite()
230283
suite.addTest(unittest.makeSuite(RetireActionTestCase))
@@ -233,6 +286,7 @@ def test_suite():
233286
suite.addTest(unittest.makeSuite(ShowActionTestCase))
234287
suite.addTest(unittest.makeSuite(CollisionDetectionTestCase))
235288
suite.addTest(unittest.makeSuite(LoginTestCase))
289+
suite.addTest(unittest.makeSuite(EditItemActionTestCase))
236290
return suite
237291

238292
if __name__ == '__main__':

0 commit comments

Comments
 (0)