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