Mercurial > p > roundup > code
annotate test/test_actions.py @ 8565:792eb77554fb
doc: fixed a short header marker.
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Thu, 09 Apr 2026 00:16:52 -0400 |
| parents | 9c3ec0a5c7fc |
| children |
| rev | line source |
|---|---|
|
6303
2ded9a8be017
Test :lastactivity special variable for lastUserActivity()
John Rouillard <rouilj@ieee.org>
parents:
6301
diff
changeset
|
1 import unittest, copy |
|
2515
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
2 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
3 from roundup import hyperdb |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
4 from roundup.date import Date, Interval |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
5 from roundup.cgi.actions import * |
|
4880
ca692423e401
Different approach to fix XSS in issue2550817
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4742
diff
changeset
|
6 from roundup.cgi.client import add_message |
|
8409
c9bec888c3c8
refactor! move RateLimitExceeded to roundup.cgi.exceptions - test
John Rouillard <rouilj@ieee.org>
parents:
7582
diff
changeset
|
7 from roundup.cgi.exceptions import RateLimitExceeded, Redirect, Unauthorised, SeriousError, FormError |
|
c9bec888c3c8
refactor! move RateLimitExceeded to roundup.cgi.exceptions - test
John Rouillard <rouilj@ieee.org>
parents:
7582
diff
changeset
|
8 from roundup.exceptions import Reject |
|
2515
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
9 |
|
7582
978285986b2c
fix: issue2551193 - Fix roundup for removal of cgi and cgitb ...
John Rouillard <rouilj@ieee.org>
parents:
7556
diff
changeset
|
10 from roundup.anypy.cgi_ import FieldStorage, MiniFieldStorage |
|
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 |
|
5717
cad18de2b988
issue2550949: Rate limit password guesses/login attempts.
John Rouillard <rouilj@ieee.org>
parents:
5649
diff
changeset
|
12 from time import sleep |
|
cad18de2b988
issue2550949: Rate limit password guesses/login attempts.
John Rouillard <rouilj@ieee.org>
parents:
5649
diff
changeset
|
13 from datetime import datetime |
|
5505
2ce41b8dffaf
compared sorted lists as order can be random
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5503
diff
changeset
|
14 |
|
6366
f2c31f5ec50b
Move mocknull from test to roundup/test
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6310
diff
changeset
|
15 from roundup.test.mocknull import MockNull |
|
2515
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
16 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
17 def true(*args, **kwargs): |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
18 return 1 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
19 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
20 class ActionTestCase(unittest.TestCase): |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
21 def setUp(self): |
|
5034
4ad465b09cbe
Update test/test_actions.py to work with py.test
John Kristensen <john@jerrykan.com>
parents:
4992
diff
changeset
|
22 self.form = FieldStorage(environ={'QUERY_STRING': ''}) |
|
2515
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
23 self.client = MockNull() |
|
5717
cad18de2b988
issue2550949: Rate limit password guesses/login attempts.
John Rouillard <rouilj@ieee.org>
parents:
5649
diff
changeset
|
24 self.client.db.Otk = MockNull() |
|
cad18de2b988
issue2550949: Rate limit password guesses/login attempts.
John Rouillard <rouilj@ieee.org>
parents:
5649
diff
changeset
|
25 self.client.db.Otk.data = {} |
|
cad18de2b988
issue2550949: Rate limit password guesses/login attempts.
John Rouillard <rouilj@ieee.org>
parents:
5649
diff
changeset
|
26 self.client.db.Otk.getall = self.data_get |
|
cad18de2b988
issue2550949: Rate limit password guesses/login attempts.
John Rouillard <rouilj@ieee.org>
parents:
5649
diff
changeset
|
27 self.client.db.Otk.set = self.data_set |
|
5718
842252c3ee22
Change access to config from dict to property. This makes doing the
John Rouillard <rouilj@ieee.org>
parents:
5717
diff
changeset
|
28 self.client.db.config.WEB_LOGIN_ATTEMPTS_MIN = 20 |
|
6684
9ca5cbffa0c4
Switch off using blank passwords for login
John Rouillard <rouilj@ieee.org>
parents:
6602
diff
changeset
|
29 self.client.db.config.WEB_LOGIN_EMPTY_PASSWORDS = 0 |
|
4880
ca692423e401
Different approach to fix XSS in issue2550817
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4742
diff
changeset
|
30 self.client._ok_message = [] |
|
ca692423e401
Different approach to fix XSS in issue2550817
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4742
diff
changeset
|
31 self.client._error_message = [] |
|
6301
45ba6b71f1cf
actions.py translation. Using mapping rather than tuple for args.
John Rouillard <rouilj@ieee.org>
parents:
6196
diff
changeset
|
32 self.client.add_error_message = lambda x, escape=True: add_message( |
|
45ba6b71f1cf
actions.py translation. Using mapping rather than tuple for args.
John Rouillard <rouilj@ieee.org>
parents:
6196
diff
changeset
|
33 self.client._error_message, x, escape=escape) |
|
4880
ca692423e401
Different approach to fix XSS in issue2550817
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4742
diff
changeset
|
34 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
|
35 self.client._ok_message, x) |
|
2515
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
36 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
|
37 self.client.base = "http://whoami.com/path/" |
|
2515
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
38 class TemplatingUtils: |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
39 pass |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
40 self.client.instance.interfaces.TemplatingUtils = TemplatingUtils |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
41 |
|
5717
cad18de2b988
issue2550949: Rate limit password guesses/login attempts.
John Rouillard <rouilj@ieee.org>
parents:
5649
diff
changeset
|
42 def data_get(self, key): |
|
cad18de2b988
issue2550949: Rate limit password guesses/login attempts.
John Rouillard <rouilj@ieee.org>
parents:
5649
diff
changeset
|
43 return self.client.db.Otk.data[key] |
|
cad18de2b988
issue2550949: Rate limit password guesses/login attempts.
John Rouillard <rouilj@ieee.org>
parents:
5649
diff
changeset
|
44 |
|
cad18de2b988
issue2550949: Rate limit password guesses/login attempts.
John Rouillard <rouilj@ieee.org>
parents:
5649
diff
changeset
|
45 def data_set(self, key, **value): |
|
cad18de2b988
issue2550949: Rate limit password guesses/login attempts.
John Rouillard <rouilj@ieee.org>
parents:
5649
diff
changeset
|
46 self.client.db.Otk.data[key] = value |
|
cad18de2b988
issue2550949: Rate limit password guesses/login attempts.
John Rouillard <rouilj@ieee.org>
parents:
5649
diff
changeset
|
47 |
|
2515
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
48 class ShowActionTestCase(ActionTestCase): |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
49 def assertRaisesMessage(self, exception, callable, message, *args, |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
50 **kwargs): |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
51 """An extension of assertRaises, which also checks the exception |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
52 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
|
53 redirecting. |
|
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 try: |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
56 callable(*args, **kwargs) |
|
5248
198b6e810c67
Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents:
5164
diff
changeset
|
57 except exception as msg: |
|
2515
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
58 self.assertEqual(str(msg), message) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
59 else: |
|
2930
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
60 if hasattr(exception, '__name__'): |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
61 excName = exception.__name__ |
|
2515
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
62 else: |
|
2930
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
63 excName = str(exception) |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
64 raise self.failureException(excName) |
|
2515
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
65 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
66 def testShowAction(self): |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
67 self.client.base = 'BASE/' |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
68 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
69 action = ShowAction(self.client) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
70 self.assertRaises(ValueError, action.handle) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
71 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
72 self.form.value.append(MiniFieldStorage('@type', 'issue')) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
73 self.assertRaises(SeriousError, action.handle) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
74 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
75 self.form.value.append(MiniFieldStorage('@number', '1')) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
76 self.assertRaisesMessage(Redirect, action.handle, 'BASE/issue1') |
|
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 testShowActionNoType(self): |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
79 action = ShowAction(self.client) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
80 self.assertRaises(ValueError, action.handle) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
81 self.form.value.append(MiniFieldStorage('@number', '1')) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
82 self.assertRaisesMessage(ValueError, action.handle, |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
83 'No type specified') |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
84 |
|
6602
8269e89530e5
Test bad number path for ShowAction action.
John Rouillard <rouilj@ieee.org>
parents:
6468
diff
changeset
|
85 def testShowActionBadNumber(self): |
|
8269e89530e5
Test bad number path for ShowAction action.
John Rouillard <rouilj@ieee.org>
parents:
6468
diff
changeset
|
86 action = ShowAction(self.client) |
|
8269e89530e5
Test bad number path for ShowAction action.
John Rouillard <rouilj@ieee.org>
parents:
6468
diff
changeset
|
87 self.assertRaises(ValueError, action.handle) |
|
8269e89530e5
Test bad number path for ShowAction action.
John Rouillard <rouilj@ieee.org>
parents:
6468
diff
changeset
|
88 self.form.value.append(MiniFieldStorage('@number', 'A')) |
|
8269e89530e5
Test bad number path for ShowAction action.
John Rouillard <rouilj@ieee.org>
parents:
6468
diff
changeset
|
89 self.form.value.append(MiniFieldStorage('@type', 'issue')) |
|
8269e89530e5
Test bad number path for ShowAction action.
John Rouillard <rouilj@ieee.org>
parents:
6468
diff
changeset
|
90 with self.assertRaises(SeriousError) as ctx: |
|
8269e89530e5
Test bad number path for ShowAction action.
John Rouillard <rouilj@ieee.org>
parents:
6468
diff
changeset
|
91 action.handle() |
|
8269e89530e5
Test bad number path for ShowAction action.
John Rouillard <rouilj@ieee.org>
parents:
6468
diff
changeset
|
92 self.assertEqual('"A" is not an ID (issue ID required)', |
|
8269e89530e5
Test bad number path for ShowAction action.
John Rouillard <rouilj@ieee.org>
parents:
6468
diff
changeset
|
93 ctx.exception.args[0]) |
|
8269e89530e5
Test bad number path for ShowAction action.
John Rouillard <rouilj@ieee.org>
parents:
6468
diff
changeset
|
94 |
|
2515
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
95 class RetireActionTestCase(ActionTestCase): |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
96 def testRetireAction(self): |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
97 self.client.db.security.hasPermission = true |
|
4880
ca692423e401
Different approach to fix XSS in issue2550817
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4742
diff
changeset
|
98 self.client._ok_message = [] |
|
2515
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
99 RetireAction(self.client).handle() |
|
5649
f8893e1cde0d
assert_ is depricated. Replacing with assertTrue to reduce logs in travisci.
John Rouillard <rouilj@ieee.org>
parents:
5505
diff
changeset
|
100 self.assertTrue(len(self.client._ok_message) == 1) |
|
6196
56854f96d805
Cover a couple of more paths in Retire and Restore.
John Rouillard <rouilj@ieee.org>
parents:
5789
diff
changeset
|
101 self.assertTrue(not self.client.nodeid == None) |
|
56854f96d805
Cover a couple of more paths in Retire and Restore.
John Rouillard <rouilj@ieee.org>
parents:
5789
diff
changeset
|
102 |
|
56854f96d805
Cover a couple of more paths in Retire and Restore.
John Rouillard <rouilj@ieee.org>
parents:
5789
diff
changeset
|
103 self.client.template = 'index' |
|
56854f96d805
Cover a couple of more paths in Retire and Restore.
John Rouillard <rouilj@ieee.org>
parents:
5789
diff
changeset
|
104 self.client._ok_message = [] |
|
56854f96d805
Cover a couple of more paths in Retire and Restore.
John Rouillard <rouilj@ieee.org>
parents:
5789
diff
changeset
|
105 RetireAction(self.client).handle() |
|
56854f96d805
Cover a couple of more paths in Retire and Restore.
John Rouillard <rouilj@ieee.org>
parents:
5789
diff
changeset
|
106 self.assertTrue(len(self.client._ok_message) == 1) |
|
56854f96d805
Cover a couple of more paths in Retire and Restore.
John Rouillard <rouilj@ieee.org>
parents:
5789
diff
changeset
|
107 self.assertTrue(self.client.nodeid == None) |
|
56854f96d805
Cover a couple of more paths in Retire and Restore.
John Rouillard <rouilj@ieee.org>
parents:
5789
diff
changeset
|
108 |
|
56854f96d805
Cover a couple of more paths in Retire and Restore.
John Rouillard <rouilj@ieee.org>
parents:
5789
diff
changeset
|
109 self.client.env={} |
|
56854f96d805
Cover a couple of more paths in Retire and Restore.
John Rouillard <rouilj@ieee.org>
parents:
5789
diff
changeset
|
110 self.client.env['REQUEST_METHOD'] = 'GET' |
|
56854f96d805
Cover a couple of more paths in Retire and Restore.
John Rouillard <rouilj@ieee.org>
parents:
5789
diff
changeset
|
111 self.client._ok_message = [] |
|
56854f96d805
Cover a couple of more paths in Retire and Restore.
John Rouillard <rouilj@ieee.org>
parents:
5789
diff
changeset
|
112 self.assertRaises(Reject, RetireAction(self.client).execute) |
|
56854f96d805
Cover a couple of more paths in Retire and Restore.
John Rouillard <rouilj@ieee.org>
parents:
5789
diff
changeset
|
113 |
|
2515
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 testNoPermission(self): |
|
6196
56854f96d805
Cover a couple of more paths in Retire and Restore.
John Rouillard <rouilj@ieee.org>
parents:
5789
diff
changeset
|
116 self.client.classname='user' |
|
2515
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
117 self.assertRaises(Unauthorised, RetireAction(self.client).execute) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
118 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
119 def testDontRetireAdminOrAnonymous(self): |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
120 self.client.db.security.hasPermission=true |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
121 # look up the user class |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
122 self.client.classname = 'user' |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
123 # but always look up admin, regardless of nodeid |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
124 self.client.db.user.get = lambda a,b: 'admin' |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
125 self.assertRaises(ValueError, RetireAction(self.client).handle) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
126 # .. or anonymous |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
127 self.client.db.user.get = lambda a,b: 'anonymous' |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
128 self.assertRaises(ValueError, RetireAction(self.client).handle) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
129 |
|
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
|
130 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
|
131 # 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
|
132 # 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
|
133 # 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
|
134 # 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
|
135 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
|
136 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
|
137 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
|
138 RestoreAction(self.client).handle() |
|
5649
f8893e1cde0d
assert_ is depricated. Replacing with assertTrue to reduce logs in travisci.
John Rouillard <rouilj@ieee.org>
parents:
5505
diff
changeset
|
139 self.assertTrue(len(self.client._ok_message) == 1) |
|
6196
56854f96d805
Cover a couple of more paths in Retire and Restore.
John Rouillard <rouilj@ieee.org>
parents:
5789
diff
changeset
|
140 self.assertTrue(not self.client.nodeid == None) |
|
56854f96d805
Cover a couple of more paths in Retire and Restore.
John Rouillard <rouilj@ieee.org>
parents:
5789
diff
changeset
|
141 |
|
56854f96d805
Cover a couple of more paths in Retire and Restore.
John Rouillard <rouilj@ieee.org>
parents:
5789
diff
changeset
|
142 self.client.template = 'index' |
|
56854f96d805
Cover a couple of more paths in Retire and Restore.
John Rouillard <rouilj@ieee.org>
parents:
5789
diff
changeset
|
143 self.client._ok_message = [] |
|
56854f96d805
Cover a couple of more paths in Retire and Restore.
John Rouillard <rouilj@ieee.org>
parents:
5789
diff
changeset
|
144 RestoreAction(self.client).handle() |
|
56854f96d805
Cover a couple of more paths in Retire and Restore.
John Rouillard <rouilj@ieee.org>
parents:
5789
diff
changeset
|
145 self.assertTrue(len(self.client._ok_message) == 1) |
|
56854f96d805
Cover a couple of more paths in Retire and Restore.
John Rouillard <rouilj@ieee.org>
parents:
5789
diff
changeset
|
146 self.assertTrue(self.client.nodeid == None) |
|
56854f96d805
Cover a couple of more paths in Retire and Restore.
John Rouillard <rouilj@ieee.org>
parents:
5789
diff
changeset
|
147 |
|
56854f96d805
Cover a couple of more paths in Retire and Restore.
John Rouillard <rouilj@ieee.org>
parents:
5789
diff
changeset
|
148 self.client.env={} |
|
56854f96d805
Cover a couple of more paths in Retire and Restore.
John Rouillard <rouilj@ieee.org>
parents:
5789
diff
changeset
|
149 self.client.env['REQUEST_METHOD'] = 'GET' |
|
56854f96d805
Cover a couple of more paths in Retire and Restore.
John Rouillard <rouilj@ieee.org>
parents:
5789
diff
changeset
|
150 self.client._ok_message = [] |
|
56854f96d805
Cover a couple of more paths in Retire and Restore.
John Rouillard <rouilj@ieee.org>
parents:
5789
diff
changeset
|
151 self.assertRaises(Reject, RestoreAction(self.client).execute) |
|
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
|
152 |
|
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
|
153 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
|
154 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
|
155 |
|
2515
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
156 class SearchActionTestCase(ActionTestCase): |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
157 def setUp(self): |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
158 ActionTestCase.setUp(self) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
159 self.action = SearchAction(self.client) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
160 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
161 class StandardSearchActionTestCase(SearchActionTestCase): |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
162 def testNoPermission(self): |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
163 self.assertRaises(Unauthorised, self.action.execute) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
164 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
165 def testQueryName(self): |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
166 self.assertEqual(self.action.getQueryName(), '') |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
167 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
168 self.form.value.append(MiniFieldStorage('@queryname', 'foo')) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
169 self.assertEqual(self.action.getQueryName(), 'foo') |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
170 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
171 class FakeFilterVarsTestCase(SearchActionTestCase): |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
172 def setUp(self): |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
173 SearchActionTestCase.setUp(self) |
|
3635
53987aa153d2
Transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3188
diff
changeset
|
174 self.client.db.classes.get_transitive_prop = lambda x: \ |
|
53987aa153d2
Transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3188
diff
changeset
|
175 hyperdb.Multilink('foo') |
|
2515
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
176 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
177 def assertFilterEquals(self, expected): |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
178 self.action.fakeFilterVars() |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
179 self.assertEqual(self.form.getvalue('@filter'), expected) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
180 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
181 def testEmptyMultilink(self): |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
182 self.form.value.append(MiniFieldStorage('foo', '')) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
183 self.form.value.append(MiniFieldStorage('foo', '')) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
184 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
185 self.assertFilterEquals(None) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
186 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
187 def testNonEmptyMultilink(self): |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
188 self.form.value.append(MiniFieldStorage('foo', '')) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
189 self.form.value.append(MiniFieldStorage('foo', '1')) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
190 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
191 self.assertFilterEquals('foo') |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
192 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
193 def testEmptyKey(self): |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
194 self.form.value.append(MiniFieldStorage('foo', '')) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
195 self.assertFilterEquals(None) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
196 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
197 def testStandardKey(self): |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
198 self.form.value.append(MiniFieldStorage('foo', '1')) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
199 self.assertFilterEquals('foo') |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
200 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
201 def testStringKey(self): |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
202 self.client.db.classes.getprops = lambda: {'foo': hyperdb.String()} |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
203 self.form.value.append(MiniFieldStorage('foo', 'hello')) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
204 self.assertFilterEquals('foo') |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
205 |
|
5097
156cbc1d182c
Validate values for Integer and Numeric type filter parameters rather than
John Rouillard <rouilj@ieee.org>
parents:
5037
diff
changeset
|
206 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
|
207 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
|
208 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
|
209 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
|
210 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
|
211 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
|
212 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
|
213 |
|
156cbc1d182c
Validate values for Integer and Numeric type filter parameters rather than
John Rouillard <rouilj@ieee.org>
parents:
5037
diff
changeset
|
214 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
|
215 "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
|
216 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
|
217 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
|
218 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
|
219 |
|
156cbc1d182c
Validate values for Integer and Numeric type filter parameters rather than
John Rouillard <rouilj@ieee.org>
parents:
5037
diff
changeset
|
220 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
|
221 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
|
222 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
|
223 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
|
224 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
|
225 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
|
226 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
|
227 |
|
156cbc1d182c
Validate values for Integer and Numeric type filter parameters rather than
John Rouillard <rouilj@ieee.org>
parents:
5037
diff
changeset
|
228 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
|
229 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
|
230 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
|
231 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
|
232 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
|
233 |
|
2515
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
234 def testTokenizedStringKey(self): |
|
3635
53987aa153d2
Transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3188
diff
changeset
|
235 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
|
236 self.form.value.append(MiniFieldStorage('foo', 'hello world')) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
237 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
238 self.assertFilterEquals('foo') |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
239 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
240 # 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
|
241 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
|
242 ['hello', 'world']) |
|
2515
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
243 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
244 class CollisionDetectionTestCase(ActionTestCase): |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
245 def setUp(self): |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
246 ActionTestCase.setUp(self) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
247 self.action = EditItemAction(self.client) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
248 self.now = Date('.') |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
249 # round off for testing |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
250 self.now.second = int(self.now.second) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
251 |
|
6310
68d83479747b
Fix testing of :lastactivity
John Rouillard <rouilj@ieee.org>
parents:
6303
diff
changeset
|
252 def testLastUserActivityAt(self): |
|
2515
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
253 self.assertEqual(self.action.lastUserActivity(), None) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
254 |
|
6303
2ded9a8be017
Test :lastactivity special variable for lastUserActivity()
John Rouillard <rouilj@ieee.org>
parents:
6301
diff
changeset
|
255 # test @ special variable form |
|
2930
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
256 self.client.form.value.append( |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
257 MiniFieldStorage('@lastactivity', str(self.now))) |
|
2515
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
258 self.assertEqual(self.action.lastUserActivity(), self.now) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
259 |
|
6310
68d83479747b
Fix testing of :lastactivity
John Rouillard <rouilj@ieee.org>
parents:
6303
diff
changeset
|
260 def testLastUserActivityColon(self): |
|
68d83479747b
Fix testing of :lastactivity
John Rouillard <rouilj@ieee.org>
parents:
6303
diff
changeset
|
261 self.assertEqual(self.action.lastUserActivity(), None) |
|
68d83479747b
Fix testing of :lastactivity
John Rouillard <rouilj@ieee.org>
parents:
6303
diff
changeset
|
262 |
|
6303
2ded9a8be017
Test :lastactivity special variable for lastUserActivity()
John Rouillard <rouilj@ieee.org>
parents:
6301
diff
changeset
|
263 # test : special variable form |
|
2ded9a8be017
Test :lastactivity special variable for lastUserActivity()
John Rouillard <rouilj@ieee.org>
parents:
6301
diff
changeset
|
264 self.client.form.value.append( |
|
2ded9a8be017
Test :lastactivity special variable for lastUserActivity()
John Rouillard <rouilj@ieee.org>
parents:
6301
diff
changeset
|
265 MiniFieldStorage(':lastactivity', str(self.now))) |
|
2ded9a8be017
Test :lastactivity special variable for lastUserActivity()
John Rouillard <rouilj@ieee.org>
parents:
6301
diff
changeset
|
266 self.assertEqual(self.action.lastUserActivity(), self.now) |
|
2ded9a8be017
Test :lastactivity special variable for lastUserActivity()
John Rouillard <rouilj@ieee.org>
parents:
6301
diff
changeset
|
267 |
|
2515
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
268 def testLastNodeActivity(self): |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
269 self.action.classname = 'issue' |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
270 self.action.nodeid = '1' |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
271 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
272 def get(nodeid, propname): |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
273 self.assertEqual(nodeid, '1') |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
274 self.assertEqual(propname, 'activity') |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
275 return self.now |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
276 self.client.db.issue.get = get |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
277 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
278 self.assertEqual(self.action.lastNodeActivity(), self.now) |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
279 |
|
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
280 def testCollision(self): |
|
3188
7faae85e1e33
merge from branch
Richard Jones <richard@users.sourceforge.net>
parents:
3018
diff
changeset
|
281 # fake up an actual change |
|
7faae85e1e33
merge from branch
Richard Jones <richard@users.sourceforge.net>
parents:
3018
diff
changeset
|
282 self.action.classname = 'test' |
|
7faae85e1e33
merge from branch
Richard Jones <richard@users.sourceforge.net>
parents:
3018
diff
changeset
|
283 self.action.nodeid = '1' |
|
6301
45ba6b71f1cf
actions.py translation. Using mapping rather than tuple for args.
John Rouillard <rouilj@ieee.org>
parents:
6196
diff
changeset
|
284 self.client.parsePropsFromForm = lambda: ( |
|
45ba6b71f1cf
actions.py translation. Using mapping rather than tuple for args.
John Rouillard <rouilj@ieee.org>
parents:
6196
diff
changeset
|
285 {('test','1'):{"prop1":"1"}}, []) |
|
45ba6b71f1cf
actions.py translation. Using mapping rather than tuple for args.
John Rouillard <rouilj@ieee.org>
parents:
6196
diff
changeset
|
286 props = self.action.detectCollision(self.now, |
|
45ba6b71f1cf
actions.py translation. Using mapping rather than tuple for args.
John Rouillard <rouilj@ieee.org>
parents:
6196
diff
changeset
|
287 self.now + Interval("1d")) |
|
45ba6b71f1cf
actions.py translation. Using mapping rather than tuple for args.
John Rouillard <rouilj@ieee.org>
parents:
6196
diff
changeset
|
288 self.assertTrue(props) |
|
45ba6b71f1cf
actions.py translation. Using mapping rather than tuple for args.
John Rouillard <rouilj@ieee.org>
parents:
6196
diff
changeset
|
289 self.action.handleCollision(props) |
|
45ba6b71f1cf
actions.py translation. Using mapping rather than tuple for args.
John Rouillard <rouilj@ieee.org>
parents:
6196
diff
changeset
|
290 self.assertEqual(self.client._error_message[0], |
|
45ba6b71f1cf
actions.py translation. Using mapping rather than tuple for args.
John Rouillard <rouilj@ieee.org>
parents:
6196
diff
changeset
|
291 'Edit Error: someone else has edited this test ' |
|
45ba6b71f1cf
actions.py translation. Using mapping rather than tuple for args.
John Rouillard <rouilj@ieee.org>
parents:
6196
diff
changeset
|
292 '(prop1). View <a target="_blank" href="test1">their ' |
|
45ba6b71f1cf
actions.py translation. Using mapping rather than tuple for args.
John Rouillard <rouilj@ieee.org>
parents:
6196
diff
changeset
|
293 'changes</a> in a new window.') |
|
5789
8ef8aa3d485c
assertFalse not assertFail...
John Rouillard <rouilj@ieee.org>
parents:
5787
diff
changeset
|
294 self.assertFalse(self.action.detectCollision(self.now, |
|
3188
7faae85e1e33
merge from branch
Richard Jones <richard@users.sourceforge.net>
parents:
3018
diff
changeset
|
295 self.now - Interval("1d"))) |
|
5789
8ef8aa3d485c
assertFalse not assertFail...
John Rouillard <rouilj@ieee.org>
parents:
5787
diff
changeset
|
296 self.assertFalse(self.action.detectCollision(None, self.now)) |
|
2515
f8dafdd91bf5
remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
297 |
|
2930
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
298 class LoginTestCase(ActionTestCase): |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
299 def setUp(self): |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
300 ActionTestCase.setUp(self) |
|
4880
ca692423e401
Different approach to fix XSS in issue2550817
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4742
diff
changeset
|
301 self.client._error_message = [] |
|
2930
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
302 |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
303 # set the db password to 'right' |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
304 self.client.db.user.get = lambda a,b: 'right' |
|
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 # unless explicitly overridden, we should never get here |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
307 self.client.opendb = lambda a: self.fail( |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
308 "Logged in, but we shouldn't be.") |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
309 |
|
5121
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
310 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
|
311 **kwargs): |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
312 """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
|
313 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
|
314 redirecting. |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
315 """ |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
316 try: |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
317 callable(*args, **kwargs) |
|
5248
198b6e810c67
Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents:
5164
diff
changeset
|
318 except exception as msg: |
|
5121
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
319 self.assertEqual(str(msg), message) |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
320 else: |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
321 if hasattr(exception, '__name__'): |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
322 excName = exception.__name__ |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
323 else: |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
324 excName = str(exception) |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
325 raise self.failureException(excName) |
|
5121
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
326 |
|
2930
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
327 def assertLoginLeavesMessages(self, messages, username=None, password=None): |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
328 if username is not None: |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
329 self.form.value.append(MiniFieldStorage('__login_name', username)) |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
330 if password is not None: |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
331 self.form.value.append( |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
332 MiniFieldStorage('__login_password', password)) |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
333 |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
334 LoginAction(self.client).handle() |
|
4880
ca692423e401
Different approach to fix XSS in issue2550817
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4742
diff
changeset
|
335 self.assertEqual(self.client._error_message, messages) |
|
2930
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
336 |
|
5121
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
337 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
|
338 if username is not None: |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
339 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
|
340 if password is not None: |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
341 self.form.value.append( |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
342 MiniFieldStorage('__login_password', password)) |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
343 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
|
344 self.form.value.append( |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
345 MiniFieldStorage('__came_from', came_from)) |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
346 |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
347 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
|
348 |
|
2930
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
349 def testNoUsername(self): |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
350 self.assertLoginLeavesMessages(['Username required']) |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
351 |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
352 def testInvalidUsername(self): |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
353 def raiseKeyError(a): |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
354 raise KeyError |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
355 self.client.db.user.lookup = raiseKeyError |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
356 self.assertLoginLeavesMessages(['Invalid login'], 'foo') |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
357 |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
358 def testInvalidPassword(self): |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
359 self.assertLoginLeavesMessages(['Invalid login'], 'foo', 'wrong') |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
360 |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
361 def testNoWebAccess(self): |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
362 self.assertLoginLeavesMessages(['You do not have permission to login'], |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
363 'foo', 'right') |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
364 |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
365 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
|
366 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
|
367 |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
368 def opendb(username): |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
369 self.assertEqual(username, 'foo') |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
370 self.client.opendb = opendb |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
371 |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
372 self.assertLoginLeavesMessages([], 'foo', 'right') |
|
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
373 |
|
6684
9ca5cbffa0c4
Switch off using blank passwords for login
John Rouillard <rouilj@ieee.org>
parents:
6602
diff
changeset
|
374 def testBlankPasswordLogin(self): |
|
9ca5cbffa0c4
Switch off using blank passwords for login
John Rouillard <rouilj@ieee.org>
parents:
6602
diff
changeset
|
375 self.client.db.security.hasPermission = lambda *args, **kwargs: True |
|
9ca5cbffa0c4
Switch off using blank passwords for login
John Rouillard <rouilj@ieee.org>
parents:
6602
diff
changeset
|
376 |
|
9ca5cbffa0c4
Switch off using blank passwords for login
John Rouillard <rouilj@ieee.org>
parents:
6602
diff
changeset
|
377 self.client.db.user.get = lambda a,b: None |
|
9ca5cbffa0c4
Switch off using blank passwords for login
John Rouillard <rouilj@ieee.org>
parents:
6602
diff
changeset
|
378 |
|
9ca5cbffa0c4
Switch off using blank passwords for login
John Rouillard <rouilj@ieee.org>
parents:
6602
diff
changeset
|
379 def opendb(username): |
|
9ca5cbffa0c4
Switch off using blank passwords for login
John Rouillard <rouilj@ieee.org>
parents:
6602
diff
changeset
|
380 self.assertEqual(username, 'blank') |
|
9ca5cbffa0c4
Switch off using blank passwords for login
John Rouillard <rouilj@ieee.org>
parents:
6602
diff
changeset
|
381 self.client.opendb = opendb |
|
9ca5cbffa0c4
Switch off using blank passwords for login
John Rouillard <rouilj@ieee.org>
parents:
6602
diff
changeset
|
382 |
|
9ca5cbffa0c4
Switch off using blank passwords for login
John Rouillard <rouilj@ieee.org>
parents:
6602
diff
changeset
|
383 self.assertEqual(self.client.db.config.WEB_LOGIN_EMPTY_PASSWORDS, 0) |
|
9ca5cbffa0c4
Switch off using blank passwords for login
John Rouillard <rouilj@ieee.org>
parents:
6602
diff
changeset
|
384 self.assertLoginLeavesMessages(['Invalid login'], 'blank', '' ) |
|
9ca5cbffa0c4
Switch off using blank passwords for login
John Rouillard <rouilj@ieee.org>
parents:
6602
diff
changeset
|
385 |
|
9ca5cbffa0c4
Switch off using blank passwords for login
John Rouillard <rouilj@ieee.org>
parents:
6602
diff
changeset
|
386 self.client.db.config.WEB_LOGIN_EMPTY_PASSWORDS = 1 |
|
9ca5cbffa0c4
Switch off using blank passwords for login
John Rouillard <rouilj@ieee.org>
parents:
6602
diff
changeset
|
387 self.form.value[:] = [] # reset form |
|
9ca5cbffa0c4
Switch off using blank passwords for login
John Rouillard <rouilj@ieee.org>
parents:
6602
diff
changeset
|
388 self.client._error_message = [] # reset errors |
|
9ca5cbffa0c4
Switch off using blank passwords for login
John Rouillard <rouilj@ieee.org>
parents:
6602
diff
changeset
|
389 self.assertLoginLeavesMessages([], 'blank', '' ) |
|
9ca5cbffa0c4
Switch off using blank passwords for login
John Rouillard <rouilj@ieee.org>
parents:
6602
diff
changeset
|
390 |
|
9ca5cbffa0c4
Switch off using blank passwords for login
John Rouillard <rouilj@ieee.org>
parents:
6602
diff
changeset
|
391 # reset |
|
9ca5cbffa0c4
Switch off using blank passwords for login
John Rouillard <rouilj@ieee.org>
parents:
6602
diff
changeset
|
392 self.client.db.user.get = lambda a,b: 'right' |
|
9ca5cbffa0c4
Switch off using blank passwords for login
John Rouillard <rouilj@ieee.org>
parents:
6602
diff
changeset
|
393 self.client.db.config.WEB_LOGIN_EMPTY_PASSWORDS = 0 |
|
9ca5cbffa0c4
Switch off using blank passwords for login
John Rouillard <rouilj@ieee.org>
parents:
6602
diff
changeset
|
394 |
|
5121
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
395 def testCorrectLoginRedirect(self): |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
396 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
|
397 def opendb(username): |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
398 self.assertEqual(username, 'foo') |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
399 self.client.opendb = opendb |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
400 |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
401 # basic test with query |
|
6468
37b57da3374f
issue2550917 - Add a: "Welcome user, you have logged in" ok_message on login.
aburke
parents:
6366
diff
changeset
|
402 self.assertLoginRaisesRedirect("http://whoami.com/path/issue?%40action=search&%40ok_message=Welcome+foo%21", |
|
5121
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
403 '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
|
404 |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
405 # 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
|
406 self.form.value[:] = [] # clear out last test's setup values |
|
6468
37b57da3374f
issue2550917 - Add a: "Welcome user, you have logged in" ok_message on login.
aburke
parents:
6366
diff
changeset
|
407 self.assertLoginRaisesRedirect("http://whoami.com/path/issue?%40action=search&%40ok_message=Welcome+foo%21", |
|
5121
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
408 '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
|
409 |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
410 # 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
|
411 self.form.value[:] = [] # clear out last test's setup values |
|
6468
37b57da3374f
issue2550917 - Add a: "Welcome user, you have logged in" ok_message on login.
aburke
parents:
6366
diff
changeset
|
412 self.assertLoginRaisesRedirect("http://whoami.com/path/issue255?%40ok_message=Welcome+foo%21", |
|
5121
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
413 '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
|
414 |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
415 # 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
|
416 self.form.value[:] = [] # clear out last test's setup values |
|
6468
37b57da3374f
issue2550917 - Add a: "Welcome user, you have logged in" ok_message on login.
aburke
parents:
6366
diff
changeset
|
417 self.assertLoginRaisesRedirect("http://whoami.com/path/issue39?%40ok_message=Welcome+foo%21&%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
|
418 '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
|
419 |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
420 def testInvalidLoginRedirect(self): |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
421 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
|
422 |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
423 def opendb(username): |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
424 self.assertEqual(username, 'foo') |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
425 self.client.opendb = opendb |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
426 |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
427 # basic test with query |
|
5503
4f6e1ce89557
always encode query parameters in sorted order
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5388
diff
changeset
|
428 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
|
429 '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
|
430 |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
431 # 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
|
432 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
|
433 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
|
434 '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
|
435 |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
436 # 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
|
437 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
|
438 # 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
|
439 # 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
|
440 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
|
441 |
|
894aa07be6cb
issue2550785: Using login from search (or logout) fails. when
John Rouillard <rouilj@ieee.org>
parents:
5119
diff
changeset
|
442 # 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
|
443 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
|
444 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
|
445 '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
|
446 |
|
5717
cad18de2b988
issue2550949: Rate limit password guesses/login attempts.
John Rouillard <rouilj@ieee.org>
parents:
5649
diff
changeset
|
447 def testLoginRateLimit(self): |
|
cad18de2b988
issue2550949: Rate limit password guesses/login attempts.
John Rouillard <rouilj@ieee.org>
parents:
5649
diff
changeset
|
448 ''' Set number of logins in setup to 20 per minute. Three second |
|
cad18de2b988
issue2550949: Rate limit password guesses/login attempts.
John Rouillard <rouilj@ieee.org>
parents:
5649
diff
changeset
|
449 delay between login attempts doesn't trip rate limit. |
|
cad18de2b988
issue2550949: Rate limit password guesses/login attempts.
John Rouillard <rouilj@ieee.org>
parents:
5649
diff
changeset
|
450 Default limit is 3/min, but that means we sleep for 20 |
|
cad18de2b988
issue2550949: Rate limit password guesses/login attempts.
John Rouillard <rouilj@ieee.org>
parents:
5649
diff
changeset
|
451 seconds so I override the default limit to speed this up. |
|
cad18de2b988
issue2550949: Rate limit password guesses/login attempts.
John Rouillard <rouilj@ieee.org>
parents:
5649
diff
changeset
|
452 ''' |
|
cad18de2b988
issue2550949: Rate limit password guesses/login attempts.
John Rouillard <rouilj@ieee.org>
parents:
5649
diff
changeset
|
453 # Do the first login setting an invalid login name |
|
cad18de2b988
issue2550949: Rate limit password guesses/login attempts.
John Rouillard <rouilj@ieee.org>
parents:
5649
diff
changeset
|
454 self.assertLoginLeavesMessages(['Invalid login'], 'nouser') |
|
6684
9ca5cbffa0c4
Switch off using blank passwords for login
John Rouillard <rouilj@ieee.org>
parents:
6602
diff
changeset
|
455 # use up the rest of the 20 login attempts. Login name |
|
9ca5cbffa0c4
Switch off using blank passwords for login
John Rouillard <rouilj@ieee.org>
parents:
6602
diff
changeset
|
456 # persists. |
|
5717
cad18de2b988
issue2550949: Rate limit password guesses/login attempts.
John Rouillard <rouilj@ieee.org>
parents:
5649
diff
changeset
|
457 for i in range(19): |
|
cad18de2b988
issue2550949: Rate limit password guesses/login attempts.
John Rouillard <rouilj@ieee.org>
parents:
5649
diff
changeset
|
458 self.client._error_message = [] |
|
cad18de2b988
issue2550949: Rate limit password guesses/login attempts.
John Rouillard <rouilj@ieee.org>
parents:
5649
diff
changeset
|
459 self.assertLoginLeavesMessages(['Invalid login']) |
|
cad18de2b988
issue2550949: Rate limit password guesses/login attempts.
John Rouillard <rouilj@ieee.org>
parents:
5649
diff
changeset
|
460 |
|
7556
273c8c2b5042
fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents:
6684
diff
changeset
|
461 self.assertRaisesMessage(RateLimitExceeded, |
|
273c8c2b5042
fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents:
6684
diff
changeset
|
462 LoginAction(self.client).handle, |
|
5717
cad18de2b988
issue2550949: Rate limit password guesses/login attempts.
John Rouillard <rouilj@ieee.org>
parents:
5649
diff
changeset
|
463 'Logins occurring too fast. Please wait: 3 seconds.') |
|
cad18de2b988
issue2550949: Rate limit password guesses/login attempts.
John Rouillard <rouilj@ieee.org>
parents:
5649
diff
changeset
|
464 |
|
cad18de2b988
issue2550949: Rate limit password guesses/login attempts.
John Rouillard <rouilj@ieee.org>
parents:
5649
diff
changeset
|
465 sleep(3) # sleep as requested so we can do another login |
|
cad18de2b988
issue2550949: Rate limit password guesses/login attempts.
John Rouillard <rouilj@ieee.org>
parents:
5649
diff
changeset
|
466 self.client._error_message = [] |
|
cad18de2b988
issue2550949: Rate limit password guesses/login attempts.
John Rouillard <rouilj@ieee.org>
parents:
5649
diff
changeset
|
467 self.assertLoginLeavesMessages(['Invalid login']) # this is expected |
|
cad18de2b988
issue2550949: Rate limit password guesses/login attempts.
John Rouillard <rouilj@ieee.org>
parents:
5649
diff
changeset
|
468 |
|
cad18de2b988
issue2550949: Rate limit password guesses/login attempts.
John Rouillard <rouilj@ieee.org>
parents:
5649
diff
changeset
|
469 # and make sure we need to wait another three seconds |
|
7556
273c8c2b5042
fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents:
6684
diff
changeset
|
470 self.assertRaisesMessage(RateLimitExceeded, |
|
273c8c2b5042
fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents:
6684
diff
changeset
|
471 LoginAction(self.client).handle, |
|
5717
cad18de2b988
issue2550949: Rate limit password guesses/login attempts.
John Rouillard <rouilj@ieee.org>
parents:
5649
diff
changeset
|
472 'Logins occurring too fast. Please wait: 3 seconds.') |
|
cad18de2b988
issue2550949: Rate limit password guesses/login attempts.
John Rouillard <rouilj@ieee.org>
parents:
5649
diff
changeset
|
473 |
|
5772
8dbe307bdb57
Finish up login rate limit code. Set config item to 0 disables, make
John Rouillard <rouilj@ieee.org>
parents:
5718
diff
changeset
|
474 def testLoginRateLimitOff(self): |
|
8dbe307bdb57
Finish up login rate limit code. Set config item to 0 disables, make
John Rouillard <rouilj@ieee.org>
parents:
5718
diff
changeset
|
475 ''' Set number of logins to 0 per minute. Verify that |
|
8dbe307bdb57
Finish up login rate limit code. Set config item to 0 disables, make
John Rouillard <rouilj@ieee.org>
parents:
5718
diff
changeset
|
476 we can do 1000 which for manual login might as well be off. |
|
8dbe307bdb57
Finish up login rate limit code. Set config item to 0 disables, make
John Rouillard <rouilj@ieee.org>
parents:
5718
diff
changeset
|
477 ''' |
|
8dbe307bdb57
Finish up login rate limit code. Set config item to 0 disables, make
John Rouillard <rouilj@ieee.org>
parents:
5718
diff
changeset
|
478 |
|
8dbe307bdb57
Finish up login rate limit code. Set config item to 0 disables, make
John Rouillard <rouilj@ieee.org>
parents:
5718
diff
changeset
|
479 self.client.db.config.WEB_LOGIN_ATTEMPTS_MIN = 0 |
|
8dbe307bdb57
Finish up login rate limit code. Set config item to 0 disables, make
John Rouillard <rouilj@ieee.org>
parents:
5718
diff
changeset
|
480 |
|
8dbe307bdb57
Finish up login rate limit code. Set config item to 0 disables, make
John Rouillard <rouilj@ieee.org>
parents:
5718
diff
changeset
|
481 # Do the first login setting an invalid login name |
|
8dbe307bdb57
Finish up login rate limit code. Set config item to 0 disables, make
John Rouillard <rouilj@ieee.org>
parents:
5718
diff
changeset
|
482 self.assertLoginLeavesMessages(['Invalid login'], 'nouser') |
|
8dbe307bdb57
Finish up login rate limit code. Set config item to 0 disables, make
John Rouillard <rouilj@ieee.org>
parents:
5718
diff
changeset
|
483 for i in range(1000): |
|
8dbe307bdb57
Finish up login rate limit code. Set config item to 0 disables, make
John Rouillard <rouilj@ieee.org>
parents:
5718
diff
changeset
|
484 self.client._error_message = [] |
|
8dbe307bdb57
Finish up login rate limit code. Set config item to 0 disables, make
John Rouillard <rouilj@ieee.org>
parents:
5718
diff
changeset
|
485 self.assertLoginLeavesMessages(['Invalid login']) |
|
8dbe307bdb57
Finish up login rate limit code. Set config item to 0 disables, make
John Rouillard <rouilj@ieee.org>
parents:
5718
diff
changeset
|
486 |
|
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
|
487 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
|
488 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
|
489 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
|
490 self.result = [] |
|
4992
b562df8a5056
Fix form-parsing for multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4880
diff
changeset
|
491 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
|
492 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
|
493 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
|
494 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
|
495 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
|
496 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
|
497 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
|
498 return kw |
|
4992
b562df8a5056
Fix form-parsing for multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4880
diff
changeset
|
499 self.new_id+=1 |
|
b562df8a5056
Fix form-parsing for multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4880
diff
changeset
|
500 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
|
501 |
|
0dd05c9e5fff
New test for linking of non-existing and existing properties via a form.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3635
diff
changeset
|
502 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
|
503 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
|
504 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
|
505 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
|
506 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
|
507 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
|
508 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
|
509 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
|
510 ({'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
|
511 ,'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
|
512 ,'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
|
513 ,'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
|
514 }) |
|
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
|
515 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
|
516 |
|
0dd05c9e5fff
New test for linking of non-existing and existing properties via a form.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3635
diff
changeset
|
517 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
|
518 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
|
519 [ ('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
|
520 , ('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
|
521 ] |
|
0dd05c9e5fff
New test for linking of non-existing and existing properties via a form.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3635
diff
changeset
|
522 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
|
523 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
|
524 ( {('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
|
525 , [('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
|
526 ) |
|
0dd05c9e5fff
New test for linking of non-existing and existing properties via a form.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3635
diff
changeset
|
527 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
|
528 self.action.handle() |
|
5248
198b6e810c67
Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents:
5164
diff
changeset
|
529 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
|
530 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
|
531 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
|
532 |
|
4992
b562df8a5056
Fix form-parsing for multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4880
diff
changeset
|
533 def testMessageMultiAttach(self): |
|
b562df8a5056
Fix form-parsing for multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4880
diff
changeset
|
534 expect = \ |
|
b562df8a5056
Fix form-parsing for multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4880
diff
changeset
|
535 [ ('create',(),{'content':'t2'}) |
|
b562df8a5056
Fix form-parsing for multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4880
diff
changeset
|
536 , ('create',(),{'content':'t'}) |
|
b562df8a5056
Fix form-parsing for multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4880
diff
changeset
|
537 , ('set',('4711',), {'messages':['23','42','17','18']}) |
|
b562df8a5056
Fix form-parsing for multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4880
diff
changeset
|
538 ] |
|
b562df8a5056
Fix form-parsing for multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4880
diff
changeset
|
539 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
|
540 self.client.parsePropsFromForm = lambda: \ |
|
b562df8a5056
Fix form-parsing for multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4880
diff
changeset
|
541 ( {('msg','-1'):{'content':'t'},('msg','-2'):{'content':'t2'} |
|
b562df8a5056
Fix form-parsing for multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4880
diff
changeset
|
542 , ('issue','4711'):{}} |
|
b562df8a5056
Fix form-parsing for multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4880
diff
changeset
|
543 , [('issue','4711','messages',[('msg','-1'),('msg','-2')])] |
|
b562df8a5056
Fix form-parsing for multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4880
diff
changeset
|
544 ) |
|
b562df8a5056
Fix form-parsing for multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4880
diff
changeset
|
545 try : |
|
b562df8a5056
Fix form-parsing for multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4880
diff
changeset
|
546 self.action.handle() |
|
5248
198b6e810c67
Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents:
5164
diff
changeset
|
547 except Redirect as msg: |
|
4992
b562df8a5056
Fix form-parsing for multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4880
diff
changeset
|
548 pass |
|
5505
2ce41b8dffaf
compared sorted lists as order can be random
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5503
diff
changeset
|
549 self.assertEqual(sorted(expect, key=NoneAndDictComparable), |
|
2ce41b8dffaf
compared sorted lists as order can be random
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5503
diff
changeset
|
550 sorted(self.result, key=NoneAndDictComparable)) |
|
4992
b562df8a5056
Fix form-parsing for multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4880
diff
changeset
|
551 |
|
3855
de4c2e538e06
Bug-Fix: File attachments from the web-interface didn't work.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3852
diff
changeset
|
552 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
|
553 expect = \ |
|
de4c2e538e06
Bug-Fix: File attachments from the web-interface didn't work.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3852
diff
changeset
|
554 [('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
|
555 ,('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
|
556 ] |
|
de4c2e538e06
Bug-Fix: File attachments from the web-interface didn't work.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3852
diff
changeset
|
557 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
|
558 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
|
559 ( {('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
|
560 ,('issue','4711'):{} |
|
de4c2e538e06
Bug-Fix: File attachments from the web-interface didn't work.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3852
diff
changeset
|
561 } |
|
de4c2e538e06
Bug-Fix: File attachments from the web-interface didn't work.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3852
diff
changeset
|
562 , [('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
|
563 ,('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
|
564 ,('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
|
565 ] |
|
de4c2e538e06
Bug-Fix: File attachments from the web-interface didn't work.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3852
diff
changeset
|
566 ) |
|
de4c2e538e06
Bug-Fix: File attachments from the web-interface didn't work.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3852
diff
changeset
|
567 try : |
|
de4c2e538e06
Bug-Fix: File attachments from the web-interface didn't work.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3852
diff
changeset
|
568 self.action.handle() |
|
5248
198b6e810c67
Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents:
5164
diff
changeset
|
569 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
|
570 pass |
|
de4c2e538e06
Bug-Fix: File attachments from the web-interface didn't work.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3852
diff
changeset
|
571 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
|
572 |
|
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
|
573 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
|
574 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
|
575 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
|
576 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
|
577 ( {('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
|
578 , [('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
|
579 ) |
|
0dd05c9e5fff
New test for linking of non-existing and existing properties via a form.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3635
diff
changeset
|
580 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
|
581 self.action.handle() |
|
5248
198b6e810c67
Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents:
5164
diff
changeset
|
582 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
|
583 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
|
584 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
|
585 |
|
4304
df7a4400c2ce
Fix linking of an existing item to a newly created item...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3855
diff
changeset
|
586 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
|
587 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
|
588 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
|
589 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
|
590 ( {('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
|
591 , [('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
|
592 ) |
|
df7a4400c2ce
Fix linking of an existing item to a newly created item...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3855
diff
changeset
|
593 try : |
|
df7a4400c2ce
Fix linking of an existing item to a newly created item...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3855
diff
changeset
|
594 self.action.handle() |
|
5248
198b6e810c67
Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents:
5164
diff
changeset
|
595 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
|
596 pass |
|
df7a4400c2ce
Fix linking of an existing item to a newly created item...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3855
diff
changeset
|
597 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
|
598 |
|
2930
4b5d7b4bc089
applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2515
diff
changeset
|
599 # vim: set et sts=4 sw=4 : |
