Mercurial > p > roundup > code
annotate test/test_actions.py @ 5565:b3d5085dd04e REST-rebased
added custom parsing properties from arguments
committer: Ralf Schlatterbeck <rsc@runtux.com>
| author | Chau Nguyen <dangchau1991@yahoo.com> |
|---|---|
| date | Wed, 30 Jan 2019 10:26:34 +0100 |
| parents | 2ce41b8dffaf |
| children | f8893e1cde0d |
| rev | line source |
|---|---|
|
5376
64b05e24dbd8
Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5248
diff
changeset
|
1 from __future__ import print_function |
|
2515
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
2 import unittest |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
3 from cgi import FieldStorage, MiniFieldStorage |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
4 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
5 from roundup import hyperdb |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
6 from roundup.date import Date, Interval |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
7 from roundup.cgi.actions import * |
|
4880
ca692423e401
Different approach to fix XSS in issue2550817
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4742
diff
changeset
|
8 from roundup.cgi.client import add_message |
|
5097
156cbc1d182c
Validate values for Integer and Numeric type filter parameters rather than
John Rouillard <rouilj@ieee.org>
parents:
5037
diff
changeset
|
9 from roundup.cgi.exceptions import Redirect, Unauthorised, SeriousError, FormError |
|
2515
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
10 |
|
5505
2ce41b8dffaf
compared sorted lists as order can be random
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5503
diff
changeset
|
11 from roundup.anypy.cmp_ import NoneAndDictComparable |
|
2ce41b8dffaf
compared sorted lists as order can be random
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5503
diff
changeset
|
12 |
|
5388
d26921b851c3
Python 3 preparation: make relative imports explicit.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5378
diff
changeset
|
13 from .mocknull import MockNull |
|
2515
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
14 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
15 def true(*args, **kwargs): |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
16 return 1 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
17 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
18 class ActionTestCase(unittest.TestCase): |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
19 def setUp(self): |
|
5034
4ad465b09cbe
Update test/test_actions.py to work with py.test
John Kristensen <john@jerrykan.com>
parents:
4992
diff
changeset
|
20 self.form = FieldStorage(environ={'QUERY_STRING': ''}) |
|
2515
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
21 self.client = MockNull() |
|
4880
ca692423e401
Different approach to fix XSS in issue2550817
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4742
diff
changeset
|
22 self.client._ok_message = [] |
|
ca692423e401
Different approach to fix XSS in issue2550817
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4742
diff
changeset
|
23 self.client._error_message = [] |
|
ca692423e401
Different approach to fix XSS in issue2550817
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4742
diff
changeset
|
24 self.client.add_error_message = lambda x : add_message( |
|
ca692423e401
Different approach to fix XSS in issue2550817
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4742
diff
changeset
|
25 self.client._error_message, x) |
|
ca692423e401
Different approach to fix XSS in issue2550817
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4742
diff
changeset
|
26 self.client.add_ok_message = lambda x : add_message( |
|
ca692423e401
Different approach to fix XSS in issue2550817
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4742
diff
changeset
|
27 self.client._ok_message, x) |
|
2515
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
28 self.client.form = self.form |
|
5164
114d9628fd77
Fixed a couple of failing tests for *LoginRedirect in test_actions.py after url validation. Also raise ValueError from examine_url if base url is None.
John Rouillard <rouilj@ieee.org>
parents:
5121
diff
changeset
|
29 self.client.base = "http://whoami.com/path/" |
|
2515
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
30 class TemplatingUtils: |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
31 pass |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
32 self.client.instance.interfaces.TemplatingUtils = TemplatingUtils |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
33 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
34 class ShowActionTestCase(ActionTestCase): |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
35 def assertRaisesMessage(self, exception, callable, message, *args, |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
36 **kwargs): |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
37 """An extension of assertRaises, which also checks the exception |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
38 message. We need this because we rely on exception messages when |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
39 redirecting. |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
40 """ |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
41 try: |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
42 callable(*args, **kwargs) |
|
5248
198b6e810c67
Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents:
5164
diff
changeset
|
43 except exception as msg: |
|
2515
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
44 self.assertEqual(str(msg), message) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
45 else: |
|
2930
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
46 if hasattr(exception, '__name__'): |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
47 excName = exception.__name__ |
|
2515
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
48 else: |
|
2930
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
49 excName = str(exception) |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
50 raise self.failureException(excName) |
|
2515
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
51 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
52 def testShowAction(self): |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
53 self.client.base = 'BASE/' |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
54 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
55 action = ShowAction(self.client) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
56 self.assertRaises(ValueError, action.handle) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
57 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
58 self.form.value.append(MiniFieldStorage('@type', 'issue')) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
59 self.assertRaises(SeriousError, action.handle) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
60 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
61 self.form.value.append(MiniFieldStorage('@number', '1')) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
62 self.assertRaisesMessage(Redirect, action.handle, 'BASE/issue1') |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
63 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
64 def testShowActionNoType(self): |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
65 action = ShowAction(self.client) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
66 self.assertRaises(ValueError, action.handle) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
67 self.form.value.append(MiniFieldStorage('@number', '1')) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
68 self.assertRaisesMessage(ValueError, action.handle, |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
69 'No type specified') |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
70 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
71 class RetireActionTestCase(ActionTestCase): |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
72 def testRetireAction(self): |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
73 self.client.db.security.hasPermission = true |
|
4880
ca692423e401
Different approach to fix XSS in issue2550817
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4742
diff
changeset
|
74 self.client._ok_message = [] |
|
2515
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
75 RetireAction(self.client).handle() |
|
4880
ca692423e401
Different approach to fix XSS in issue2550817
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4742
diff
changeset
|
76 self.assert_(len(self.client._ok_message) == 1) |
|
2515
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
77 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
78 def testNoPermission(self): |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
79 self.assertRaises(Unauthorised, RetireAction(self.client).execute) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
80 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
81 def testDontRetireAdminOrAnonymous(self): |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
82 self.client.db.security.hasPermission=true |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
83 # look up the user class |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
84 self.client.classname = 'user' |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
85 # but always look up admin, regardless of nodeid |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
86 self.client.db.user.get = lambda a,b: 'admin' |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
87 self.assertRaises(ValueError, RetireAction(self.client).handle) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
88 # .. or anonymous |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
89 self.client.db.user.get = lambda a,b: 'anonymous' |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
90 self.assertRaises(ValueError, RetireAction(self.client).handle) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
91 |
|
5119
748ba87e1aca
Added a new cgi action restore. The opposite of (and a clone of) the existing retire action.
John Rouillard <rouilj@ieee.org>
parents:
5097
diff
changeset
|
92 class RestoreActionTestCase(ActionTestCase): |
|
748ba87e1aca
Added a new cgi action restore. The opposite of (and a clone of) the existing retire action.
John Rouillard <rouilj@ieee.org>
parents:
5097
diff
changeset
|
93 # This is a copy of the RetireActionTestCase. But what do these |
|
748ba87e1aca
Added a new cgi action restore. The opposite of (and a clone of) the existing retire action.
John Rouillard <rouilj@ieee.org>
parents:
5097
diff
changeset
|
94 # actually test? I see no actual db or retire call or |
|
748ba87e1aca
Added a new cgi action restore. The opposite of (and a clone of) the existing retire action.
John Rouillard <rouilj@ieee.org>
parents:
5097
diff
changeset
|
95 # class id. Testing db level restore is covered in the |
|
748ba87e1aca
Added a new cgi action restore. The opposite of (and a clone of) the existing retire action.
John Rouillard <rouilj@ieee.org>
parents:
5097
diff
changeset
|
96 # db_test_base as part of retire. |
|
748ba87e1aca
Added a new cgi action restore. The opposite of (and a clone of) the existing retire action.
John Rouillard <rouilj@ieee.org>
parents:
5097
diff
changeset
|
97 def testRestoreAction(self): |
|
748ba87e1aca
Added a new cgi action restore. The opposite of (and a clone of) the existing retire action.
John Rouillard <rouilj@ieee.org>
parents:
5097
diff
changeset
|
98 self.client.db.security.hasPermission = true |
|
748ba87e1aca
Added a new cgi action restore. The opposite of (and a clone of) the existing retire action.
John Rouillard <rouilj@ieee.org>
parents:
5097
diff
changeset
|
99 self.client._ok_message = [] |
|
748ba87e1aca
Added a new cgi action restore. The opposite of (and a clone of) the existing retire action.
John Rouillard <rouilj@ieee.org>
parents:
5097
diff
changeset
|
100 RestoreAction(self.client).handle() |
|
748ba87e1aca
Added a new cgi action restore. The opposite of (and a clone of) the existing retire action.
John Rouillard <rouilj@ieee.org>
parents:
5097
diff
changeset
|
101 self.assert_(len(self.client._ok_message) == 1) |
|
748ba87e1aca
Added a new cgi action restore. The opposite of (and a clone of) the existing retire action.
John Rouillard <rouilj@ieee.org>
parents:
5097
diff
changeset
|
102 |
|
748ba87e1aca
Added a new cgi action restore. The opposite of (and a clone of) the existing retire action.
John Rouillard <rouilj@ieee.org>
parents:
5097
diff
changeset
|
103 def testNoPermission(self): |
|
748ba87e1aca
Added a new cgi action restore. The opposite of (and a clone of) the existing retire action.
John Rouillard <rouilj@ieee.org>
parents:
5097
diff
changeset
|
104 self.assertRaises(Unauthorised, RestoreAction(self.client).execute) |
|
748ba87e1aca
Added a new cgi action restore. The opposite of (and a clone of) the existing retire action.
John Rouillard <rouilj@ieee.org>
parents:
5097
diff
changeset
|
105 |
|
2515
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
106 class SearchActionTestCase(ActionTestCase): |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
107 def setUp(self): |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
108 ActionTestCase.setUp(self) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
109 self.action = SearchAction(self.client) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
110 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
111 class StandardSearchActionTestCase(SearchActionTestCase): |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
112 def testNoPermission(self): |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
113 self.assertRaises(Unauthorised, self.action.execute) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
114 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
115 def testQueryName(self): |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
116 self.assertEqual(self.action.getQueryName(), '') |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
117 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
118 self.form.value.append(MiniFieldStorage('@queryname', 'foo')) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
119 self.assertEqual(self.action.getQueryName(), 'foo') |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
120 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
121 class FakeFilterVarsTestCase(SearchActionTestCase): |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
122 def setUp(self): |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
123 SearchActionTestCase.setUp(self) |
|
3635
53987aa153d2
Transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3188
diff
changeset
|
124 self.client.db.classes.get_transitive_prop = lambda x: \ |
|
53987aa153d2
Transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3188
diff
changeset
|
125 hyperdb.Multilink('foo') |
|
2515
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
126 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
127 def assertFilterEquals(self, expected): |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
128 self.action.fakeFilterVars() |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
129 self.assertEqual(self.form.getvalue('@filter'), expected) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
130 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
131 def testEmptyMultilink(self): |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
132 self.form.value.append(MiniFieldStorage('foo', '')) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
133 self.form.value.append(MiniFieldStorage('foo', '')) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
134 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
135 self.assertFilterEquals(None) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
136 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
137 def testNonEmptyMultilink(self): |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
138 self.form.value.append(MiniFieldStorage('foo', '')) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
139 self.form.value.append(MiniFieldStorage('foo', '1')) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
140 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
141 self.assertFilterEquals('foo') |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
142 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
143 def testEmptyKey(self): |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
144 self.form.value.append(MiniFieldStorage('foo', '')) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
145 self.assertFilterEquals(None) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
146 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
147 def testStandardKey(self): |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
148 self.form.value.append(MiniFieldStorage('foo', '1')) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
149 self.assertFilterEquals('foo') |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
150 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
151 def testStringKey(self): |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
152 self.client.db.classes.getprops = lambda: {'foo': hyperdb.String()} |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
153 self.form.value.append(MiniFieldStorage('foo', 'hello')) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
154 self.assertFilterEquals('foo') |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
155 |
|
5097
156cbc1d182c
Validate values for Integer and Numeric type filter parameters rather than
John Rouillard <rouilj@ieee.org>
parents:
5037
diff
changeset
|
156 def testNumKey(self): # testing patch: http://hg.python.org/tracker/roundup/rev/98508a47c126 |
|
156cbc1d182c
Validate values for Integer and Numeric type filter parameters rather than
John Rouillard <rouilj@ieee.org>
parents:
5037
diff
changeset
|
157 for val in [ "-1000a", "test", "o0.9999", "o0", "1.00/10" ]: |
|
5376
64b05e24dbd8
Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5248
diff
changeset
|
158 print("testing ", val) |
|
5097
156cbc1d182c
Validate values for Integer and Numeric type filter parameters rather than
John Rouillard <rouilj@ieee.org>
parents:
5037
diff
changeset
|
159 self.client.db.classes.get_transitive_prop = lambda x: hyperdb.Number() |
|
156cbc1d182c
Validate values for Integer and Numeric type filter parameters rather than
John Rouillard <rouilj@ieee.org>
parents:
5037
diff
changeset
|
160 self.form.value.append(MiniFieldStorage('foo', val)) # invalid numbers |
|
156cbc1d182c
Validate values for Integer and Numeric type filter parameters rather than
John Rouillard <rouilj@ieee.org>
parents:
5037
diff
changeset
|
161 self.assertRaises(FormError, self.action.fakeFilterVars) |
|
156cbc1d182c
Validate values for Integer and Numeric type filter parameters rather than
John Rouillard <rouilj@ieee.org>
parents:
5037
diff
changeset
|
162 del self.form.value[:] |
|
156cbc1d182c
Validate values for Integer and Numeric type filter parameters rather than
John Rouillard <rouilj@ieee.org>
parents:
5037
diff
changeset
|
163 |
|
156cbc1d182c
Validate values for Integer and Numeric type filter parameters rather than
John Rouillard <rouilj@ieee.org>
parents:
5037
diff
changeset
|
164 for val in [ "-1000.7738", "-556", "-0.9999", "-.456", "-5E-5", "0.00", "0", |
|
156cbc1d182c
Validate values for Integer and Numeric type filter parameters rather than
John Rouillard <rouilj@ieee.org>
parents:
5037
diff
changeset
|
165 "1.00", "0556", "7.56E2", "1000.7738"]: |
|
156cbc1d182c
Validate values for Integer and Numeric type filter parameters rather than
John Rouillard <rouilj@ieee.org>
parents:
5037
diff
changeset
|
166 self.form.value.append(MiniFieldStorage('foo', val)) |
|
156cbc1d182c
Validate values for Integer and Numeric type filter parameters rather than
John Rouillard <rouilj@ieee.org>
parents:
5037
diff
changeset
|
167 self.action.fakeFilterVars() # this should run and return. No errors, nothing to check. |
|
156cbc1d182c
Validate values for Integer and Numeric type filter parameters rather than
John Rouillard <rouilj@ieee.org>
parents:
5037
diff
changeset
|
168 del self.form.value[:] |
|
156cbc1d182c
Validate values for Integer and Numeric type filter parameters rather than
John Rouillard <rouilj@ieee.org>
parents:
5037
diff
changeset
|
169 |
|
156cbc1d182c
Validate values for Integer and Numeric type filter parameters rather than
John Rouillard <rouilj@ieee.org>
parents:
5037
diff
changeset
|
170 def testIntKey(self): # testing patch: http://hg.python.org/tracker/roundup/rev/98508a47c126 |
|
156cbc1d182c
Validate values for Integer and Numeric type filter parameters rather than
John Rouillard <rouilj@ieee.org>
parents:
5037
diff
changeset
|
171 for val in [ "-1000a", "test", "-5E-5", "0.9999", "0.0", "1.000", "0456", "1E4" ]: |
|
5376
64b05e24dbd8
Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5248
diff
changeset
|
172 print("testing ", val) |
|
5097
156cbc1d182c
Validate values for Integer and Numeric type filter parameters rather than
John Rouillard <rouilj@ieee.org>
parents:
5037
diff
changeset
|
173 self.client.db.classes.get_transitive_prop = lambda x: hyperdb.Integer() |
|
156cbc1d182c
Validate values for Integer and Numeric type filter parameters rather than
John Rouillard <rouilj@ieee.org>
parents:
5037
diff
changeset
|
174 self.form.value.append(MiniFieldStorage('foo', val)) |
|
156cbc1d182c
Validate values for Integer and Numeric type filter parameters rather than
John Rouillard <rouilj@ieee.org>
parents:
5037
diff
changeset
|
175 self.assertRaises(FormError, self.action.fakeFilterVars) |
|
156cbc1d182c
Validate values for Integer and Numeric type filter parameters rather than
John Rouillard <rouilj@ieee.org>
parents:
5037
diff
changeset
|
176 del self.form.value[:] |
|
156cbc1d182c
Validate values for Integer and Numeric type filter parameters rather than
John Rouillard <rouilj@ieee.org>
parents:
5037
diff
changeset
|
177 |
|
156cbc1d182c
Validate values for Integer and Numeric type filter parameters rather than
John Rouillard <rouilj@ieee.org>
parents:
5037
diff
changeset
|
178 for val in [ "-1000", "-512", "0", "1", "100", "248" ]: # no scientific notation apparently |
|
156cbc1d182c
Validate values for Integer and Numeric type filter parameters rather than
John Rouillard <rouilj@ieee.org>
parents:
5037
diff
changeset
|
179 self.client.db.classes.get_transitive_prop = lambda x: hyperdb.Integer() |
|
156cbc1d182c
Validate values for Integer and Numeric type filter parameters rather than
John Rouillard <rouilj@ieee.org>
parents:
5037
diff
changeset
|
180 self.form.value.append(MiniFieldStorage('foo', val)) |
|
156cbc1d182c
Validate values for Integer and Numeric type filter parameters rather than
John Rouillard <rouilj@ieee.org>
parents:
5037
diff
changeset
|
181 self.action.fakeFilterVars() # this should run and return. No errors, nothing to check. |
|
156cbc1d182c
Validate values for Integer and Numeric type filter parameters rather than
John Rouillard <rouilj@ieee.org>
parents:
5037
diff
changeset
|
182 del self.form.value[:] |
|
156cbc1d182c
Validate values for Integer and Numeric type filter parameters rather than
John Rouillard <rouilj@ieee.org>
parents:
5037
diff
changeset
|
183 |
|
2515
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
184 def testTokenizedStringKey(self): |
|
3635
53987aa153d2
Transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3188
diff
changeset
|
185 self.client.db.classes.get_transitive_prop = lambda x: hyperdb.String() |
|
2515
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
186 self.form.value.append(MiniFieldStorage('foo', 'hello world')) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
187 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
188 self.assertFilterEquals('foo') |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
189 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
190 # The single value gets replaced with the tokenized list. |
|
2930
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
191 self.assertEqual([x.value for x in self.form['foo']], |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
192 ['hello', 'world']) |
|
2515
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
193 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
194 class CollisionDetectionTestCase(ActionTestCase): |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
195 def setUp(self): |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
196 ActionTestCase.setUp(self) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
197 self.action = EditItemAction(self.client) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
198 self.now = Date('.') |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
199 # round off for testing |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
200 self.now.second = int(self.now.second) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
201 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
202 def testLastUserActivity(self): |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
203 self.assertEqual(self.action.lastUserActivity(), None) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
204 |
|
2930
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
205 self.client.form.value.append( |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
206 MiniFieldStorage('@lastactivity', str(self.now))) |
|
2515
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
207 self.assertEqual(self.action.lastUserActivity(), self.now) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
208 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
209 def testLastNodeActivity(self): |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
210 self.action.classname = 'issue' |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
211 self.action.nodeid = '1' |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
212 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
213 def get(nodeid, propname): |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
214 self.assertEqual(nodeid, '1') |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
215 self.assertEqual(propname, 'activity') |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
216 return self.now |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
217 self.client.db.issue.get = get |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
218 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
219 self.assertEqual(self.action.lastNodeActivity(), self.now) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
220 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
221 def testCollision(self): |
|
3188
7faae85e1e33
merge from branch
Richard Jones <richard@users.sourceforge.net>
parents:
3018
diff
changeset
|
222 # fake up an actual change |
|
7faae85e1e33
merge from branch
Richard Jones <richard@users.sourceforge.net>
parents:
3018
diff
changeset
|
223 self.action.classname = 'test' |
|
7faae85e1e33
merge from branch
Richard Jones <richard@users.sourceforge.net>
parents:
3018
diff
changeset
|
224 self.action.nodeid = '1' |
|
7faae85e1e33
merge from branch
Richard Jones <richard@users.sourceforge.net>
parents:
3018
diff
changeset
|
225 self.client.parsePropsFromForm = lambda: ({('test','1'):{1:1}}, []) |
|
7faae85e1e33
merge from branch
Richard Jones <richard@users.sourceforge.net>
parents:
3018
diff
changeset
|
226 self.failUnless(self.action.detectCollision(self.now, |
|
7faae85e1e33
merge from branch
Richard Jones <richard@users.sourceforge.net>
parents:
3018
diff
changeset
|
227 self.now + Interval("1d"))) |
|
7faae85e1e33
merge from branch
Richard Jones <richard@users.sourceforge.net>
parents:
3018
diff
changeset
|
228 self.failIf(self.action.detectCollision(self.now, |
|
7faae85e1e33
merge from branch
Richard Jones <richard@users.sourceforge.net>
parents:
3018
diff
changeset
|
229 self.now - Interval("1d"))) |
|
2515
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
230 self.failIf(self.action.detectCollision(None, self.now)) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
231 |
|
2930
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
232 class LoginTestCase(ActionTestCase): |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
233 def setUp(self): |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
234 ActionTestCase.setUp(self) |
|
4880
ca692423e401
Different approach to fix XSS in issue2550817
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4742
diff
changeset
|
235 self.client._error_message = [] |
|
2930
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
236 |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
237 # set the db password to 'right' |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
238 self.client.db.user.get = lambda a,b: 'right' |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
239 |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
240 # unless explicitly overridden, we should never get here |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
241 self.client.opendb = lambda a: self.fail( |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
242 "Logged in, but we shouldn't be.") |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
243 |
|
5121
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
244 def assertRaisesMessage(self, exception, callable, message, *args, |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
245 **kwargs): |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
246 """An extension of assertRaises, which also checks the exception |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
247 message. We need this because we rely on exception messages when |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
248 redirecting. |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
249 """ |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
250 try: |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
251 callable(*args, **kwargs) |
|
5248
198b6e810c67
Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents:
5164
diff
changeset
|
252 except exception as msg: |
|
5121
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
253 self.assertEqual(str(msg), message) |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
254 else: |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
255 if hasattr(exception, '__name__'): |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
256 excName = exception.__name__ |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
257 else: |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
258 excName = str(exception) |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
259 raise self.failureException(excName) |
|
5121
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
260 |
|
2930
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
261 def assertLoginLeavesMessages(self, messages, username=None, password=None): |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
262 if username is not None: |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
263 self.form.value.append(MiniFieldStorage('__login_name', username)) |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
264 if password is not None: |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
265 self.form.value.append( |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
266 MiniFieldStorage('__login_password', password)) |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
267 |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
268 LoginAction(self.client).handle() |
|
4880
ca692423e401
Different approach to fix XSS in issue2550817
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4742
diff
changeset
|
269 self.assertEqual(self.client._error_message, messages) |
|
2930
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
270 |
|
5121
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
271 def assertLoginRaisesRedirect(self, message, username=None, password=None, came_from=None): |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
272 if username is not None: |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
273 self.form.value.append(MiniFieldStorage('__login_name', username)) |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
274 if password is not None: |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
275 self.form.value.append( |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
276 MiniFieldStorage('__login_password', password)) |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
277 if came_from is not None: |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
278 self.form.value.append( |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
279 MiniFieldStorage('__came_from', came_from)) |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
280 |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
281 self.assertRaisesMessage(Redirect, LoginAction(self.client).handle, message) |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
282 |
|
2930
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
283 def testNoUsername(self): |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
284 self.assertLoginLeavesMessages(['Username required']) |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
285 |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
286 def testInvalidUsername(self): |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
287 def raiseKeyError(a): |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
288 raise KeyError |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
289 self.client.db.user.lookup = raiseKeyError |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
290 self.assertLoginLeavesMessages(['Invalid login'], 'foo') |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
291 |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
292 def testInvalidPassword(self): |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
293 self.assertLoginLeavesMessages(['Invalid login'], 'foo', 'wrong') |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
294 |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
295 def testNoWebAccess(self): |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
296 self.assertLoginLeavesMessages(['You do not have permission to login'], |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
297 'foo', 'right') |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
298 |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
299 def testCorrectLogin(self): |
|
3018
e665582ec099
Fix failing test: mock lambda now also takes keyword arguments.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
2930
diff
changeset
|
300 self.client.db.security.hasPermission = lambda *args, **kwargs: True |
|
2930
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
301 |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
302 def opendb(username): |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
303 self.assertEqual(username, 'foo') |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
304 self.client.opendb = opendb |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
305 |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
306 self.assertLoginLeavesMessages([], 'foo', 'right') |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
307 |
|
5121
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
308 def testCorrectLoginRedirect(self): |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
309 self.client.db.security.hasPermission = lambda *args, **kwargs: True |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
310 def opendb(username): |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
311 self.assertEqual(username, 'foo') |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
312 self.client.opendb = opendb |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
313 |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
314 # basic test with query |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
315 self.assertLoginRaisesRedirect("http://whoami.com/path/issue?%40action=search", |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
316 'foo', 'right', "http://whoami.com/path/issue?@action=search") |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
317 |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
318 # test that old messages are removed |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
319 self.form.value[:] = [] # clear out last test's setup values |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
320 self.assertLoginRaisesRedirect("http://whoami.com/path/issue?%40action=search", |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
321 'foo', 'right', "http://whoami.com/path/issue?@action=search&@ok_messagehurrah+we+win&@error_message=blam") |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
322 |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
323 # test when there is no query |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
324 self.form.value[:] = [] # clear out last test's setup values |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
325 self.assertLoginRaisesRedirect("http://whoami.com/path/issue255", |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
326 'foo', 'right', "http://whoami.com/path/issue255") |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
327 |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
328 # test if we are logged out; should kill the @action=logout |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
329 self.form.value[:] = [] # clear out last test's setup values |
|
5503
4f6e1ce89557
always encode query parameters in sorted order
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5388
diff
changeset
|
330 self.assertLoginRaisesRedirect("http://whoami.com/path/issue39?%40pagesize=50&%40startwith=0", |
|
5164
114d9628fd77
Fixed a couple of failing tests for *LoginRedirect in test_actions.py after url validation. Also raise ValueError from examine_url if base url is None.
John Rouillard <rouilj@ieee.org>
parents:
5121
diff
changeset
|
331 'foo', 'right', "http://whoami.com/path/issue39?@action=logout&@pagesize=50&@startwith=0") |
|
5121
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
332 |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
333 def testInvalidLoginRedirect(self): |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
334 self.client.db.security.hasPermission = lambda *args, **kwargs: True |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
335 |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
336 def opendb(username): |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
337 self.assertEqual(username, 'foo') |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
338 self.client.opendb = opendb |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
339 |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
340 # basic test with query |
|
5503
4f6e1ce89557
always encode query parameters in sorted order
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5388
diff
changeset
|
341 self.assertLoginRaisesRedirect("http://whoami.com/path/issue?%40action=search&%40error_message=Invalid+login", |
|
5121
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
342 'foo', 'wrong', "http://whoami.com/path/issue?@action=search") |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
343 |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
344 # test that old messages are removed |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
345 self.form.value[:] = [] # clear out last test's setup values |
|
5503
4f6e1ce89557
always encode query parameters in sorted order
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5388
diff
changeset
|
346 self.assertLoginRaisesRedirect("http://whoami.com/path/issue?%40action=search&%40error_message=Invalid+login", |
|
5121
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
347 'foo', 'wrong', "http://whoami.com/path/issue?@action=search&@ok_messagehurrah+we+win&@error_message=blam") |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
348 |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
349 # test when there is no __came_from specified |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
350 self.form.value[:] = [] # clear out last test's setup values |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
351 # I am not sure why this produces three copies of the same error. |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
352 # only one copy of the error is displayed to the user in the web interface. |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
353 self.assertLoginLeavesMessages(['Invalid login', 'Invalid login', 'Invalid login'], 'foo', 'wrong') |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
354 |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
355 # test when there is no query |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
356 self.form.value[:] = [] # clear out last test's setup values |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
357 self.assertLoginRaisesRedirect("http://whoami.com/path/issue255?%40error_message=Invalid+login", |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
358 'foo', 'wrong', "http://whoami.com/path/issue255") |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
359 |
|
3852
0dd05c9e5fff
New test for linking of non-existing and existing properties via a form.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3635
diff
changeset
|
360 class EditItemActionTestCase(ActionTestCase): |
|
0dd05c9e5fff
New test for linking of non-existing and existing properties via a form.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3635
diff
changeset
|
361 def setUp(self): |
|
0dd05c9e5fff
New test for linking of non-existing and existing properties via a form.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3635
diff
changeset
|
362 ActionTestCase.setUp(self) |
|
0dd05c9e5fff
New test for linking of non-existing and existing properties via a form.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3635
diff
changeset
|
363 self.result = [] |
|
4992
b562df8a5056
Fix form-parsing for multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4880
diff
changeset
|
364 self.new_id = 16 |
|
3852
0dd05c9e5fff
New test for linking of non-existing and existing properties via a form.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3635
diff
changeset
|
365 class AppendResult: |
|
0dd05c9e5fff
New test for linking of non-existing and existing properties via a form.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3635
diff
changeset
|
366 def __init__(inner_self, name): |
|
0dd05c9e5fff
New test for linking of non-existing and existing properties via a form.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3635
diff
changeset
|
367 inner_self.name = name |
|
0dd05c9e5fff
New test for linking of non-existing and existing properties via a form.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3635
diff
changeset
|
368 def __call__(inner_self, *args, **kw): |
|
0dd05c9e5fff
New test for linking of non-existing and existing properties via a form.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3635
diff
changeset
|
369 self.result.append((inner_self.name, args, kw)) |
|
0dd05c9e5fff
New test for linking of non-existing and existing properties via a form.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3635
diff
changeset
|
370 if inner_self.name == 'set': |
|
0dd05c9e5fff
New test for linking of non-existing and existing properties via a form.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3635
diff
changeset
|
371 return kw |
|
4992
b562df8a5056
Fix form-parsing for multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4880
diff
changeset
|
372 self.new_id+=1 |
|
b562df8a5056
Fix form-parsing for multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4880
diff
changeset
|
373 return str(self.new_id) |
|
3852
0dd05c9e5fff
New test for linking of non-existing and existing properties via a form.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3635
diff
changeset
|
374 |
|
0dd05c9e5fff
New test for linking of non-existing and existing properties via a form.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3635
diff
changeset
|
375 self.client.db.security.hasPermission = true |
|
0dd05c9e5fff
New test for linking of non-existing and existing properties via a form.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3635
diff
changeset
|
376 self.client.classname = 'issue' |
|
0dd05c9e5fff
New test for linking of non-existing and existing properties via a form.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3635
diff
changeset
|
377 self.client.base = 'http://tracker/' |
|
0dd05c9e5fff
New test for linking of non-existing and existing properties via a form.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3635
diff
changeset
|
378 self.client.nodeid = '4711' |
|
0dd05c9e5fff
New test for linking of non-existing and existing properties via a form.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3635
diff
changeset
|
379 self.client.template = 'item' |
|
0dd05c9e5fff
New test for linking of non-existing and existing properties via a form.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3635
diff
changeset
|
380 self.client.db.classes.create = AppendResult('create') |
|
0dd05c9e5fff
New test for linking of non-existing and existing properties via a form.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3635
diff
changeset
|
381 self.client.db.classes.set = AppendResult('set') |
|
0dd05c9e5fff
New test for linking of non-existing and existing properties via a form.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3635
diff
changeset
|
382 self.client.db.classes.getprops = lambda: \ |
|
3855
de4c2e538e06
Bug-Fix: File attachments from the web-interface didn't work.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3852
diff
changeset
|
383 ({'messages':hyperdb.Multilink('msg') |
|
de4c2e538e06
Bug-Fix: File attachments from the web-interface didn't work.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3852
diff
changeset
|
384 ,'content':hyperdb.String() |
|
de4c2e538e06
Bug-Fix: File attachments from the web-interface didn't work.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3852
diff
changeset
|
385 ,'files':hyperdb.Multilink('file') |
|
4304
df7a4400c2ce
Fix linking of an existing item to a newly created item...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3855
diff
changeset
|
386 ,'msg':hyperdb.Link('msg') |
|
3855
de4c2e538e06
Bug-Fix: File attachments from the web-interface didn't work.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3852
diff
changeset
|
387 }) |
|
3852
0dd05c9e5fff
New test for linking of non-existing and existing properties via a form.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3635
diff
changeset
|
388 self.action = EditItemAction(self.client) |
|
0dd05c9e5fff
New test for linking of non-existing and existing properties via a form.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3635
diff
changeset
|
389 |
|
0dd05c9e5fff
New test for linking of non-existing and existing properties via a form.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3635
diff
changeset
|
390 def testMessageAttach(self): |
|
0dd05c9e5fff
New test for linking of non-existing and existing properties via a form.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3635
diff
changeset
|
391 expect = \ |
|
0dd05c9e5fff
New test for linking of non-existing and existing properties via a form.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3635
diff
changeset
|
392 [ ('create',(),{'content':'t'}) |
|
0dd05c9e5fff
New test for linking of non-existing and existing properties via a form.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3635
diff
changeset
|
393 , ('set',('4711',), {'messages':['23','42','17']}) |
|
0dd05c9e5fff
New test for linking of non-existing and existing properties via a form.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3635
diff
changeset
|
394 ] |
|
0dd05c9e5fff
New test for linking of non-existing and existing properties via a form.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3635
diff
changeset
|
395 self.client.db.classes.get = lambda a, b:['23','42'] |
|
0dd05c9e5fff
New test for linking of non-existing and existing properties via a form.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3635
diff
changeset
|
396 self.client.parsePropsFromForm = lambda: \ |
|
0dd05c9e5fff
New test for linking of non-existing and existing properties via a form.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3635
diff
changeset
|
397 ( {('msg','-1'):{'content':'t'},('issue','4711'):{}} |
|
0dd05c9e5fff
New test for linking of non-existing and existing properties via a form.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3635
diff
changeset
|
398 , [('issue','4711','messages',[('msg','-1')])] |
|
0dd05c9e5fff
New test for linking of non-existing and existing properties via a form.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3635
diff
changeset
|
399 ) |
|
0dd05c9e5fff
New test for linking of non-existing and existing properties via a form.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3635
diff
changeset
|
400 try : |
|
0dd05c9e5fff
New test for linking of non-existing and existing properties via a form.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3635
diff
changeset
|
401 self.action.handle() |
|
5248
198b6e810c67
Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents:
5164
diff
changeset
|
402 except Redirect as msg: |
|
3852
0dd05c9e5fff
New test for linking of non-existing and existing properties via a form.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3635
diff
changeset
|
403 pass |
|
0dd05c9e5fff
New test for linking of non-existing and existing properties via a form.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3635
diff
changeset
|
404 self.assertEqual(expect, self.result) |
|
0dd05c9e5fff
New test for linking of non-existing and existing properties via a form.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3635
diff
changeset
|
405 |
|
4992
b562df8a5056
Fix form-parsing for multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4880
diff
changeset
|
406 def testMessageMultiAttach(self): |
|
b562df8a5056
Fix form-parsing for multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4880
diff
changeset
|
407 expect = \ |
|
b562df8a5056
Fix form-parsing for multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4880
diff
changeset
|
408 [ ('create',(),{'content':'t2'}) |
|
b562df8a5056
Fix form-parsing for multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4880
diff
changeset
|
409 , ('create',(),{'content':'t'}) |
|
b562df8a5056
Fix form-parsing for multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4880
diff
changeset
|
410 , ('set',('4711',), {'messages':['23','42','17','18']}) |
|
b562df8a5056
Fix form-parsing for multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4880
diff
changeset
|
411 ] |
|
b562df8a5056
Fix form-parsing for multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4880
diff
changeset
|
412 self.client.db.classes.get = lambda a, b:['23','42'] |
|
b562df8a5056
Fix form-parsing for multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4880
diff
changeset
|
413 self.client.parsePropsFromForm = lambda: \ |
|
b562df8a5056
Fix form-parsing for multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4880
diff
changeset
|
414 ( {('msg','-1'):{'content':'t'},('msg','-2'):{'content':'t2'} |
|
b562df8a5056
Fix form-parsing for multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4880
diff
changeset
|
415 , ('issue','4711'):{}} |
|
b562df8a5056
Fix form-parsing for multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4880
diff
changeset
|
416 , [('issue','4711','messages',[('msg','-1'),('msg','-2')])] |
|
b562df8a5056
Fix form-parsing for multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4880
diff
changeset
|
417 ) |
|
b562df8a5056
Fix form-parsing for multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4880
diff
changeset
|
418 try : |
|
b562df8a5056
Fix form-parsing for multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4880
diff
changeset
|
419 self.action.handle() |
|
5248
198b6e810c67
Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents:
5164
diff
changeset
|
420 except Redirect as msg: |
|
4992
b562df8a5056
Fix form-parsing for multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4880
diff
changeset
|
421 pass |
|
5505
2ce41b8dffaf
compared sorted lists as order can be random
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5503
diff
changeset
|
422 self.assertEqual(sorted(expect, key=NoneAndDictComparable), |
|
2ce41b8dffaf
compared sorted lists as order can be random
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5503
diff
changeset
|
423 sorted(self.result, key=NoneAndDictComparable)) |
|
4992
b562df8a5056
Fix form-parsing for multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4880
diff
changeset
|
424 |
|
3855
de4c2e538e06
Bug-Fix: File attachments from the web-interface didn't work.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3852
diff
changeset
|
425 def testFileAttach(self): |
|
de4c2e538e06
Bug-Fix: File attachments from the web-interface didn't work.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3852
diff
changeset
|
426 expect = \ |
|
de4c2e538e06
Bug-Fix: File attachments from the web-interface didn't work.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3852
diff
changeset
|
427 [('create',(),{'content':'t','type':'text/plain','name':'t.txt'}) |
|
de4c2e538e06
Bug-Fix: File attachments from the web-interface didn't work.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3852
diff
changeset
|
428 ,('set',('4711',),{'files':['23','42','17']}) |
|
de4c2e538e06
Bug-Fix: File attachments from the web-interface didn't work.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3852
diff
changeset
|
429 ] |
|
de4c2e538e06
Bug-Fix: File attachments from the web-interface didn't work.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3852
diff
changeset
|
430 self.client.db.classes.get = lambda a, b:['23','42'] |
|
de4c2e538e06
Bug-Fix: File attachments from the web-interface didn't work.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3852
diff
changeset
|
431 self.client.parsePropsFromForm = lambda: \ |
|
de4c2e538e06
Bug-Fix: File attachments from the web-interface didn't work.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3852
diff
changeset
|
432 ( {('file','-1'):{'content':'t','type':'text/plain','name':'t.txt'} |
|
de4c2e538e06
Bug-Fix: File attachments from the web-interface didn't work.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3852
diff
changeset
|
433 ,('issue','4711'):{} |
|
de4c2e538e06
Bug-Fix: File attachments from the web-interface didn't work.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3852
diff
changeset
|
434 } |
|
de4c2e538e06
Bug-Fix: File attachments from the web-interface didn't work.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3852
diff
changeset
|
435 , [('issue','4711','messages',[('msg','-1')]) |
|
de4c2e538e06
Bug-Fix: File attachments from the web-interface didn't work.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3852
diff
changeset
|
436 ,('issue','4711','files',[('file','-1')]) |
|
de4c2e538e06
Bug-Fix: File attachments from the web-interface didn't work.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3852
diff
changeset
|
437 ,('msg','-1','files',[('file','-1')]) |
|
de4c2e538e06
Bug-Fix: File attachments from the web-interface didn't work.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3852
diff
changeset
|
438 ] |
|
de4c2e538e06
Bug-Fix: File attachments from the web-interface didn't work.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3852
diff
changeset
|
439 ) |
|
de4c2e538e06
Bug-Fix: File attachments from the web-interface didn't work.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3852
diff
changeset
|
440 try : |
|
de4c2e538e06
Bug-Fix: File attachments from the web-interface didn't work.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3852
diff
changeset
|
441 self.action.handle() |
|
5248
198b6e810c67
Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents:
5164
diff
changeset
|
442 except Redirect as msg: |
|
3855
de4c2e538e06
Bug-Fix: File attachments from the web-interface didn't work.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3852
diff
changeset
|
443 pass |
|
de4c2e538e06
Bug-Fix: File attachments from the web-interface didn't work.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3852
diff
changeset
|
444 self.assertEqual(expect, self.result) |
|
de4c2e538e06
Bug-Fix: File attachments from the web-interface didn't work.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3852
diff
changeset
|
445 |
|
3852
0dd05c9e5fff
New test for linking of non-existing and existing properties via a form.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3635
diff
changeset
|
446 def testLinkExisting(self): |
|
0dd05c9e5fff
New test for linking of non-existing and existing properties via a form.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3635
diff
changeset
|
447 expect = [('set',('4711',),{'messages':['23','42','1']})] |
|
0dd05c9e5fff
New test for linking of non-existing and existing properties via a form.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3635
diff
changeset
|
448 self.client.db.classes.get = lambda a, b:['23','42'] |
|
0dd05c9e5fff
New test for linking of non-existing and existing properties via a form.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3635
diff
changeset
|
449 self.client.parsePropsFromForm = lambda: \ |
|
0dd05c9e5fff
New test for linking of non-existing and existing properties via a form.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3635
diff
changeset
|
450 ( {('issue','4711'):{},('msg','1'):{}} |
|
0dd05c9e5fff
New test for linking of non-existing and existing properties via a form.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3635
diff
changeset
|
451 , [('issue','4711','messages',[('msg','1')])] |
|
0dd05c9e5fff
New test for linking of non-existing and existing properties via a form.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3635
diff
changeset
|
452 ) |
|
0dd05c9e5fff
New test for linking of non-existing and existing properties via a form.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3635
diff
changeset
|
453 try : |
|
0dd05c9e5fff
New test for linking of non-existing and existing properties via a form.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3635
diff
changeset
|
454 self.action.handle() |
|
5248
198b6e810c67
Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents:
5164
diff
changeset
|
455 except Redirect as msg: |
|
3852
0dd05c9e5fff
New test for linking of non-existing and existing properties via a form.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3635
diff
changeset
|
456 pass |
|
0dd05c9e5fff
New test for linking of non-existing and existing properties via a form.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3635
diff
changeset
|
457 self.assertEqual(expect, self.result) |
|
0dd05c9e5fff
New test for linking of non-existing and existing properties via a form.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3635
diff
changeset
|
458 |
|
4304
df7a4400c2ce
Fix linking of an existing item to a newly created item...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3855
diff
changeset
|
459 def testLinkNewToExisting(self): |
|
df7a4400c2ce
Fix linking of an existing item to a newly created item...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3855
diff
changeset
|
460 expect = [('create',(),{'msg':'1','title':'TEST'})] |
|
df7a4400c2ce
Fix linking of an existing item to a newly created item...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3855
diff
changeset
|
461 self.client.db.classes.get = lambda a, b:['23','42'] |
|
df7a4400c2ce
Fix linking of an existing item to a newly created item...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3855
diff
changeset
|
462 self.client.parsePropsFromForm = lambda: \ |
|
df7a4400c2ce
Fix linking of an existing item to a newly created item...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3855
diff
changeset
|
463 ( {('issue','-1'):{'title':'TEST'},('msg','1'):{}} |
|
df7a4400c2ce
Fix linking of an existing item to a newly created item...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3855
diff
changeset
|
464 , [('issue','-1','msg',[('msg','1')])] |
|
df7a4400c2ce
Fix linking of an existing item to a newly created item...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3855
diff
changeset
|
465 ) |
|
df7a4400c2ce
Fix linking of an existing item to a newly created item...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3855
diff
changeset
|
466 try : |
|
df7a4400c2ce
Fix linking of an existing item to a newly created item...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3855
diff
changeset
|
467 self.action.handle() |
|
5248
198b6e810c67
Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents:
5164
diff
changeset
|
468 except Redirect as msg: |
|
4304
df7a4400c2ce
Fix linking of an existing item to a newly created item...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3855
diff
changeset
|
469 pass |
|
df7a4400c2ce
Fix linking of an existing item to a newly created item...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3855
diff
changeset
|
470 self.assertEqual(expect, self.result) |
|
df7a4400c2ce
Fix linking of an existing item to a newly created item...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3855
diff
changeset
|
471 |
|
2930
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
472 # vim: set et sts=4 sw=4 : |
