annotate test/test_actions.py @ 3099:519b92df37dc

handle ~/.my.cnf files for MySQL defaults [SF#1096031]
author Richard Jones <richard@users.sourceforge.net>
date Thu, 13 Jan 2005 05:02:19 +0000
parents e665582ec099
children 79bcf944ceb8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2515
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
1 from __future__ import nested_scopes
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
2
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
3 import unittest
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
4 from cgi import FieldStorage, MiniFieldStorage
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
5
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
6 from roundup import hyperdb
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
7 from roundup.date import Date, Interval
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
8 from roundup.cgi.actions import *
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
9 from roundup.cgi.exceptions import Redirect, Unauthorised, SeriousError
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
10
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
11 from mocknull import MockNull
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
12
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
13 def true(*args, **kwargs):
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
14 return 1
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
15
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
16 class ActionTestCase(unittest.TestCase):
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
17 def setUp(self):
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
18 self.form = FieldStorage()
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
19 self.client = MockNull()
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
20 self.client.form = self.form
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
21 class TemplatingUtils:
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
22 pass
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
23 self.client.instance.interfaces.TemplatingUtils = TemplatingUtils
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
24
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
25 class ShowActionTestCase(ActionTestCase):
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
26 def assertRaisesMessage(self, exception, callable, message, *args,
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
27 **kwargs):
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
28 """An extension of assertRaises, which also checks the exception
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
29 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
30 redirecting.
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
31 """
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
32 try:
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
33 callable(*args, **kwargs)
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
34 except exception, msg:
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
35 self.assertEqual(str(msg), message)
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
36 else:
2930
4b5d7b4bc089 applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2515
diff changeset
37 if hasattr(exception, '__name__'):
4b5d7b4bc089 applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2515
diff changeset
38 excName = exception.__name__
2515
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
39 else:
2930
4b5d7b4bc089 applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2515
diff changeset
40 excName = str(exception)
2515
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
41 raise self.failureException, excName
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
42
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
43 def testShowAction(self):
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
44 self.client.base = 'BASE/'
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
45
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
46 action = ShowAction(self.client)
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
47 self.assertRaises(ValueError, action.handle)
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
48
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
49 self.form.value.append(MiniFieldStorage('@type', 'issue'))
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
50 self.assertRaises(SeriousError, action.handle)
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
51
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
52 self.form.value.append(MiniFieldStorage('@number', '1'))
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
53 self.assertRaisesMessage(Redirect, action.handle, 'BASE/issue1')
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
54
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
55 def testShowActionNoType(self):
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
56 action = ShowAction(self.client)
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
57 self.assertRaises(ValueError, action.handle)
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
58 self.form.value.append(MiniFieldStorage('@number', '1'))
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
59 self.assertRaisesMessage(ValueError, action.handle,
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
60 'No type specified')
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
61
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
62 class RetireActionTestCase(ActionTestCase):
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
63 def testRetireAction(self):
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
64 self.client.db.security.hasPermission = true
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
65 self.client.ok_message = []
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
66 RetireAction(self.client).handle()
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
67 self.assert_(len(self.client.ok_message) == 1)
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
68
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
69 def testNoPermission(self):
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
70 self.assertRaises(Unauthorised, RetireAction(self.client).execute)
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
71
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
72 def testDontRetireAdminOrAnonymous(self):
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
73 self.client.db.security.hasPermission=true
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
74 # look up the user class
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
75 self.client.classname = 'user'
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
76 # but always look up admin, regardless of nodeid
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
77 self.client.db.user.get = lambda a,b: 'admin'
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
78 self.assertRaises(ValueError, RetireAction(self.client).handle)
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
79 # .. or anonymous
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
80 self.client.db.user.get = lambda a,b: 'anonymous'
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
81 self.assertRaises(ValueError, RetireAction(self.client).handle)
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
82
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
83 class SearchActionTestCase(ActionTestCase):
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
84 def setUp(self):
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
85 ActionTestCase.setUp(self)
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
86 self.action = SearchAction(self.client)
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
87
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
88 class StandardSearchActionTestCase(SearchActionTestCase):
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
89 def testNoPermission(self):
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
90 self.assertRaises(Unauthorised, self.action.execute)
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
91
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
92 def testQueryName(self):
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
93 self.assertEqual(self.action.getQueryName(), '')
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
94
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
95 self.form.value.append(MiniFieldStorage('@queryname', 'foo'))
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
96 self.assertEqual(self.action.getQueryName(), 'foo')
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
97
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
98 class FakeFilterVarsTestCase(SearchActionTestCase):
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
99 def setUp(self):
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
100 SearchActionTestCase.setUp(self)
2930
4b5d7b4bc089 applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2515
diff changeset
101 self.client.db.classes.getprops = lambda: {'foo':
4b5d7b4bc089 applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2515
diff changeset
102 hyperdb.Multilink('foo')}
2515
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
103
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
104 def assertFilterEquals(self, expected):
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
105 self.action.fakeFilterVars()
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
106 self.assertEqual(self.form.getvalue('@filter'), expected)
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
107
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
108 def testEmptyMultilink(self):
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
109 self.form.value.append(MiniFieldStorage('foo', ''))
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
110 self.form.value.append(MiniFieldStorage('foo', ''))
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
111
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
112 self.assertFilterEquals(None)
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
113
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
114 def testNonEmptyMultilink(self):
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
115 self.form.value.append(MiniFieldStorage('foo', ''))
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
116 self.form.value.append(MiniFieldStorage('foo', '1'))
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
117
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
118 self.assertFilterEquals('foo')
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 testEmptyKey(self):
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
121 self.form.value.append(MiniFieldStorage('foo', ''))
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
122 self.assertFilterEquals(None)
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
123
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
124 def testStandardKey(self):
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
125 self.form.value.append(MiniFieldStorage('foo', '1'))
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
126 self.assertFilterEquals('foo')
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
127
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
128 def testStringKey(self):
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
129 self.client.db.classes.getprops = lambda: {'foo': hyperdb.String()}
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
130 self.form.value.append(MiniFieldStorage('foo', 'hello'))
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
131 self.assertFilterEquals('foo')
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
132
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
133 def testTokenizedStringKey(self):
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
134 self.client.db.classes.getprops = lambda: {'foo': hyperdb.String()}
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
135 self.form.value.append(MiniFieldStorage('foo', 'hello world'))
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
136
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
137 self.assertFilterEquals('foo')
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
138
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
139 # 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
140 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
141 ['hello', 'world'])
2515
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
142
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
143 class CollisionDetectionTestCase(ActionTestCase):
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
144 def setUp(self):
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
145 ActionTestCase.setUp(self)
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
146 self.action = EditItemAction(self.client)
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
147 self.now = Date('.')
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
148 # round off for testing
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
149 self.now.second = int(self.now.second)
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
150
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
151 def testLastUserActivity(self):
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
152 self.assertEqual(self.action.lastUserActivity(), None)
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
153
2930
4b5d7b4bc089 applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2515
diff changeset
154 self.client.form.value.append(
4b5d7b4bc089 applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2515
diff changeset
155 MiniFieldStorage('@lastactivity', str(self.now)))
2515
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
156 self.assertEqual(self.action.lastUserActivity(), self.now)
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
157
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
158 def testLastNodeActivity(self):
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
159 self.action.classname = 'issue'
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
160 self.action.nodeid = '1'
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 def get(nodeid, propname):
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
163 self.assertEqual(nodeid, '1')
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
164 self.assertEqual(propname, 'activity')
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
165 return self.now
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
166 self.client.db.issue.get = get
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
167
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
168 self.assertEqual(self.action.lastNodeActivity(), self.now)
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
169
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
170 def testCollision(self):
2930
4b5d7b4bc089 applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2515
diff changeset
171 self.failUnless(self.action.detectCollision(
4b5d7b4bc089 applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2515
diff changeset
172 self.now, self.now + Interval("1d")))
4b5d7b4bc089 applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2515
diff changeset
173 self.failIf(self.action.detectCollision(
4b5d7b4bc089 applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2515
diff changeset
174 self.now, self.now - Interval("1d")))
2515
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
175 self.failIf(self.action.detectCollision(None, self.now))
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
176
2930
4b5d7b4bc089 applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2515
diff changeset
177 class LoginTestCase(ActionTestCase):
4b5d7b4bc089 applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2515
diff changeset
178 def setUp(self):
4b5d7b4bc089 applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2515
diff changeset
179 ActionTestCase.setUp(self)
4b5d7b4bc089 applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2515
diff changeset
180 self.client.error_message = []
4b5d7b4bc089 applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2515
diff changeset
181
4b5d7b4bc089 applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2515
diff changeset
182 # set the db password to 'right'
4b5d7b4bc089 applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2515
diff changeset
183 self.client.db.user.get = lambda a,b: 'right'
4b5d7b4bc089 applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2515
diff changeset
184
4b5d7b4bc089 applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2515
diff changeset
185 # unless explicitly overridden, we should never get here
4b5d7b4bc089 applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2515
diff changeset
186 self.client.opendb = lambda a: self.fail(
4b5d7b4bc089 applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2515
diff changeset
187 "Logged in, but we shouldn't be.")
4b5d7b4bc089 applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2515
diff changeset
188
4b5d7b4bc089 applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2515
diff changeset
189 def assertLoginLeavesMessages(self, messages, username=None, password=None):
4b5d7b4bc089 applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2515
diff changeset
190 if username is not None:
4b5d7b4bc089 applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2515
diff changeset
191 self.form.value.append(MiniFieldStorage('__login_name', username))
4b5d7b4bc089 applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2515
diff changeset
192 if password is not None:
4b5d7b4bc089 applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2515
diff changeset
193 self.form.value.append(
4b5d7b4bc089 applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2515
diff changeset
194 MiniFieldStorage('__login_password', password))
4b5d7b4bc089 applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2515
diff changeset
195
4b5d7b4bc089 applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2515
diff changeset
196 LoginAction(self.client).handle()
4b5d7b4bc089 applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2515
diff changeset
197 self.assertEqual(self.client.error_message, messages)
4b5d7b4bc089 applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2515
diff changeset
198
4b5d7b4bc089 applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2515
diff changeset
199 def testNoUsername(self):
4b5d7b4bc089 applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2515
diff changeset
200 self.assertLoginLeavesMessages(['Username required'])
4b5d7b4bc089 applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2515
diff changeset
201
4b5d7b4bc089 applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2515
diff changeset
202 def testInvalidUsername(self):
4b5d7b4bc089 applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2515
diff changeset
203 def raiseKeyError(a):
4b5d7b4bc089 applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2515
diff changeset
204 raise KeyError
4b5d7b4bc089 applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2515
diff changeset
205 self.client.db.user.lookup = raiseKeyError
4b5d7b4bc089 applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2515
diff changeset
206 self.assertLoginLeavesMessages(['Invalid login'], 'foo')
4b5d7b4bc089 applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2515
diff changeset
207
4b5d7b4bc089 applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2515
diff changeset
208 def testInvalidPassword(self):
4b5d7b4bc089 applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2515
diff changeset
209 self.assertLoginLeavesMessages(['Invalid login'], 'foo', 'wrong')
4b5d7b4bc089 applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2515
diff changeset
210
4b5d7b4bc089 applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2515
diff changeset
211 def testNoWebAccess(self):
4b5d7b4bc089 applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2515
diff changeset
212 self.assertLoginLeavesMessages(['You do not have permission to login'],
4b5d7b4bc089 applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2515
diff changeset
213 'foo', 'right')
4b5d7b4bc089 applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2515
diff changeset
214
4b5d7b4bc089 applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2515
diff changeset
215 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
216 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
217
4b5d7b4bc089 applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2515
diff changeset
218 def opendb(username):
4b5d7b4bc089 applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2515
diff changeset
219 self.assertEqual(username, 'foo')
4b5d7b4bc089 applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2515
diff changeset
220 self.client.opendb = opendb
4b5d7b4bc089 applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2515
diff changeset
221
4b5d7b4bc089 applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2515
diff changeset
222 self.assertLoginLeavesMessages([], 'foo', 'right')
4b5d7b4bc089 applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2515
diff changeset
223
2515
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
224 def test_suite():
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
225 suite = unittest.TestSuite()
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
226 suite.addTest(unittest.makeSuite(RetireActionTestCase))
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
227 suite.addTest(unittest.makeSuite(StandardSearchActionTestCase))
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
228 suite.addTest(unittest.makeSuite(FakeFilterVarsTestCase))
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
229 suite.addTest(unittest.makeSuite(ShowActionTestCase))
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
230 suite.addTest(unittest.makeSuite(CollisionDetectionTestCase))
2930
4b5d7b4bc089 applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2515
diff changeset
231 suite.addTest(unittest.makeSuite(LoginTestCase))
2515
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
232 return suite
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
233
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
234 if __name__ == '__main__':
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
235 runner = unittest.TextTestRunner()
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
236 unittest.main(testRunner=runner)
f8dafdd91bf5 remove extra CRs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2514
diff changeset
237
2930
4b5d7b4bc089 applied patch [SF#1067690];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2515
diff changeset
238 # vim: set et sts=4 sw=4 :

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