Skip to content

Commit ff632c9

Browse files
author
Alexander Smishlajev
committed
remove extra CRs
1 parent d5477ba commit ff632c9

File tree

1 file changed

+184
-184
lines changed

1 file changed

+184
-184
lines changed

test/test_actions.py

Lines changed: 184 additions & 184 deletions
Original file line numberDiff line numberDiff line change
@@ -1,184 +1,184 @@
1-
from __future__ import nested_scopes
2-
3-
import unittest
4-
from cgi import FieldStorage, MiniFieldStorage
5-
6-
from roundup import hyperdb
7-
from roundup.date import Date, Interval
8-
from roundup.cgi.actions import *
9-
from roundup.cgi.exceptions import Redirect, Unauthorised, SeriousError
10-
11-
from mocknull import MockNull
12-
13-
def true(*args, **kwargs):
14-
return 1
15-
16-
class ActionTestCase(unittest.TestCase):
17-
def setUp(self):
18-
self.form = FieldStorage()
19-
self.client = MockNull()
20-
self.client.form = self.form
21-
class TemplatingUtils:
22-
pass
23-
self.client.instance.interfaces.TemplatingUtils = TemplatingUtils
24-
25-
class ShowActionTestCase(ActionTestCase):
26-
def assertRaisesMessage(self, exception, callable, message, *args,
27-
**kwargs):
28-
"""An extension of assertRaises, which also checks the exception
29-
message. We need this because we rely on exception messages when
30-
redirecting.
31-
"""
32-
try:
33-
callable(*args, **kwargs)
34-
except exception, msg:
35-
self.assertEqual(str(msg), message)
36-
else:
37-
if hasattr(excClass,'__name__'):
38-
excName = excClass.__name__
39-
else:
40-
excName = str(excClass)
41-
raise self.failureException, excName
42-
43-
def testShowAction(self):
44-
self.client.base = 'BASE/'
45-
46-
action = ShowAction(self.client)
47-
self.assertRaises(ValueError, action.handle)
48-
49-
self.form.value.append(MiniFieldStorage('@type', 'issue'))
50-
self.assertRaises(SeriousError, action.handle)
51-
52-
self.form.value.append(MiniFieldStorage('@number', '1'))
53-
self.assertRaisesMessage(Redirect, action.handle, 'BASE/issue1')
54-
55-
def testShowActionNoType(self):
56-
action = ShowAction(self.client)
57-
self.assertRaises(ValueError, action.handle)
58-
self.form.value.append(MiniFieldStorage('@number', '1'))
59-
self.assertRaisesMessage(ValueError, action.handle,
60-
'No type specified')
61-
62-
class RetireActionTestCase(ActionTestCase):
63-
def testRetireAction(self):
64-
self.client.db.security.hasPermission = true
65-
self.client.ok_message = []
66-
RetireAction(self.client).handle()
67-
self.assert_(len(self.client.ok_message) == 1)
68-
69-
def testNoPermission(self):
70-
self.assertRaises(Unauthorised, RetireAction(self.client).execute)
71-
72-
def testDontRetireAdminOrAnonymous(self):
73-
self.client.db.security.hasPermission=true
74-
# look up the user class
75-
self.client.classname = 'user'
76-
# but always look up admin, regardless of nodeid
77-
self.client.db.user.get = lambda a,b: 'admin'
78-
self.assertRaises(ValueError, RetireAction(self.client).handle)
79-
# .. or anonymous
80-
self.client.db.user.get = lambda a,b: 'anonymous'
81-
self.assertRaises(ValueError, RetireAction(self.client).handle)
82-
83-
class SearchActionTestCase(ActionTestCase):
84-
def setUp(self):
85-
ActionTestCase.setUp(self)
86-
self.action = SearchAction(self.client)
87-
88-
class StandardSearchActionTestCase(SearchActionTestCase):
89-
def testNoPermission(self):
90-
self.assertRaises(Unauthorised, self.action.execute)
91-
92-
def testQueryName(self):
93-
self.assertEqual(self.action.getQueryName(), '')
94-
95-
self.form.value.append(MiniFieldStorage('@queryname', 'foo'))
96-
self.assertEqual(self.action.getQueryName(), 'foo')
97-
98-
class FakeFilterVarsTestCase(SearchActionTestCase):
99-
def setUp(self):
100-
SearchActionTestCase.setUp(self)
101-
self.client.db.classes.getprops = lambda: {'foo': hyperdb.Multilink('foo')}
102-
103-
def assertFilterEquals(self, expected):
104-
self.action.fakeFilterVars()
105-
self.assertEqual(self.form.getvalue('@filter'), expected)
106-
107-
def testEmptyMultilink(self):
108-
self.form.value.append(MiniFieldStorage('foo', ''))
109-
self.form.value.append(MiniFieldStorage('foo', ''))
110-
111-
self.assertFilterEquals(None)
112-
113-
def testNonEmptyMultilink(self):
114-
self.form.value.append(MiniFieldStorage('foo', ''))
115-
self.form.value.append(MiniFieldStorage('foo', '1'))
116-
117-
self.assertFilterEquals('foo')
118-
119-
def testEmptyKey(self):
120-
self.form.value.append(MiniFieldStorage('foo', ''))
121-
self.assertFilterEquals(None)
122-
123-
def testStandardKey(self):
124-
self.form.value.append(MiniFieldStorage('foo', '1'))
125-
self.assertFilterEquals('foo')
126-
127-
def testStringKey(self):
128-
self.client.db.classes.getprops = lambda: {'foo': hyperdb.String()}
129-
self.form.value.append(MiniFieldStorage('foo', 'hello'))
130-
self.assertFilterEquals('foo')
131-
132-
def testTokenizedStringKey(self):
133-
self.client.db.classes.getprops = lambda: {'foo': hyperdb.String()}
134-
self.form.value.append(MiniFieldStorage('foo', 'hello world'))
135-
136-
self.assertFilterEquals('foo')
137-
138-
# The single value gets replaced with the tokenized list.
139-
self.assertEqual([x.value for x in self.form['foo']], ['hello', 'world'])
140-
141-
class CollisionDetectionTestCase(ActionTestCase):
142-
def setUp(self):
143-
ActionTestCase.setUp(self)
144-
self.action = EditItemAction(self.client)
145-
self.now = Date('.')
146-
# round off for testing
147-
self.now.second = int(self.now.second)
148-
149-
def testLastUserActivity(self):
150-
self.assertEqual(self.action.lastUserActivity(), None)
151-
152-
self.client.form.value.append(MiniFieldStorage('@lastactivity', str(self.now)))
153-
self.assertEqual(self.action.lastUserActivity(), self.now)
154-
155-
def testLastNodeActivity(self):
156-
self.action.classname = 'issue'
157-
self.action.nodeid = '1'
158-
159-
def get(nodeid, propname):
160-
self.assertEqual(nodeid, '1')
161-
self.assertEqual(propname, 'activity')
162-
return self.now
163-
self.client.db.issue.get = get
164-
165-
self.assertEqual(self.action.lastNodeActivity(), self.now)
166-
167-
def testCollision(self):
168-
self.failUnless(self.action.detectCollision(self.now, self.now + Interval("1d")))
169-
self.failIf(self.action.detectCollision(self.now, self.now - Interval("1d")))
170-
self.failIf(self.action.detectCollision(None, self.now))
171-
172-
def test_suite():
173-
suite = unittest.TestSuite()
174-
suite.addTest(unittest.makeSuite(RetireActionTestCase))
175-
suite.addTest(unittest.makeSuite(StandardSearchActionTestCase))
176-
suite.addTest(unittest.makeSuite(FakeFilterVarsTestCase))
177-
suite.addTest(unittest.makeSuite(ShowActionTestCase))
178-
suite.addTest(unittest.makeSuite(CollisionDetectionTestCase))
179-
return suite
180-
181-
if __name__ == '__main__':
182-
runner = unittest.TextTestRunner()
183-
unittest.main(testRunner=runner)
184-
1+
from __future__ import nested_scopes
2+
3+
import unittest
4+
from cgi import FieldStorage, MiniFieldStorage
5+
6+
from roundup import hyperdb
7+
from roundup.date import Date, Interval
8+
from roundup.cgi.actions import *
9+
from roundup.cgi.exceptions import Redirect, Unauthorised, SeriousError
10+
11+
from mocknull import MockNull
12+
13+
def true(*args, **kwargs):
14+
return 1
15+
16+
class ActionTestCase(unittest.TestCase):
17+
def setUp(self):
18+
self.form = FieldStorage()
19+
self.client = MockNull()
20+
self.client.form = self.form
21+
class TemplatingUtils:
22+
pass
23+
self.client.instance.interfaces.TemplatingUtils = TemplatingUtils
24+
25+
class ShowActionTestCase(ActionTestCase):
26+
def assertRaisesMessage(self, exception, callable, message, *args,
27+
**kwargs):
28+
"""An extension of assertRaises, which also checks the exception
29+
message. We need this because we rely on exception messages when
30+
redirecting.
31+
"""
32+
try:
33+
callable(*args, **kwargs)
34+
except exception, msg:
35+
self.assertEqual(str(msg), message)
36+
else:
37+
if hasattr(excClass,'__name__'):
38+
excName = excClass.__name__
39+
else:
40+
excName = str(excClass)
41+
raise self.failureException, excName
42+
43+
def testShowAction(self):
44+
self.client.base = 'BASE/'
45+
46+
action = ShowAction(self.client)
47+
self.assertRaises(ValueError, action.handle)
48+
49+
self.form.value.append(MiniFieldStorage('@type', 'issue'))
50+
self.assertRaises(SeriousError, action.handle)
51+
52+
self.form.value.append(MiniFieldStorage('@number', '1'))
53+
self.assertRaisesMessage(Redirect, action.handle, 'BASE/issue1')
54+
55+
def testShowActionNoType(self):
56+
action = ShowAction(self.client)
57+
self.assertRaises(ValueError, action.handle)
58+
self.form.value.append(MiniFieldStorage('@number', '1'))
59+
self.assertRaisesMessage(ValueError, action.handle,
60+
'No type specified')
61+
62+
class RetireActionTestCase(ActionTestCase):
63+
def testRetireAction(self):
64+
self.client.db.security.hasPermission = true
65+
self.client.ok_message = []
66+
RetireAction(self.client).handle()
67+
self.assert_(len(self.client.ok_message) == 1)
68+
69+
def testNoPermission(self):
70+
self.assertRaises(Unauthorised, RetireAction(self.client).execute)
71+
72+
def testDontRetireAdminOrAnonymous(self):
73+
self.client.db.security.hasPermission=true
74+
# look up the user class
75+
self.client.classname = 'user'
76+
# but always look up admin, regardless of nodeid
77+
self.client.db.user.get = lambda a,b: 'admin'
78+
self.assertRaises(ValueError, RetireAction(self.client).handle)
79+
# .. or anonymous
80+
self.client.db.user.get = lambda a,b: 'anonymous'
81+
self.assertRaises(ValueError, RetireAction(self.client).handle)
82+
83+
class SearchActionTestCase(ActionTestCase):
84+
def setUp(self):
85+
ActionTestCase.setUp(self)
86+
self.action = SearchAction(self.client)
87+
88+
class StandardSearchActionTestCase(SearchActionTestCase):
89+
def testNoPermission(self):
90+
self.assertRaises(Unauthorised, self.action.execute)
91+
92+
def testQueryName(self):
93+
self.assertEqual(self.action.getQueryName(), '')
94+
95+
self.form.value.append(MiniFieldStorage('@queryname', 'foo'))
96+
self.assertEqual(self.action.getQueryName(), 'foo')
97+
98+
class FakeFilterVarsTestCase(SearchActionTestCase):
99+
def setUp(self):
100+
SearchActionTestCase.setUp(self)
101+
self.client.db.classes.getprops = lambda: {'foo': hyperdb.Multilink('foo')}
102+
103+
def assertFilterEquals(self, expected):
104+
self.action.fakeFilterVars()
105+
self.assertEqual(self.form.getvalue('@filter'), expected)
106+
107+
def testEmptyMultilink(self):
108+
self.form.value.append(MiniFieldStorage('foo', ''))
109+
self.form.value.append(MiniFieldStorage('foo', ''))
110+
111+
self.assertFilterEquals(None)
112+
113+
def testNonEmptyMultilink(self):
114+
self.form.value.append(MiniFieldStorage('foo', ''))
115+
self.form.value.append(MiniFieldStorage('foo', '1'))
116+
117+
self.assertFilterEquals('foo')
118+
119+
def testEmptyKey(self):
120+
self.form.value.append(MiniFieldStorage('foo', ''))
121+
self.assertFilterEquals(None)
122+
123+
def testStandardKey(self):
124+
self.form.value.append(MiniFieldStorage('foo', '1'))
125+
self.assertFilterEquals('foo')
126+
127+
def testStringKey(self):
128+
self.client.db.classes.getprops = lambda: {'foo': hyperdb.String()}
129+
self.form.value.append(MiniFieldStorage('foo', 'hello'))
130+
self.assertFilterEquals('foo')
131+
132+
def testTokenizedStringKey(self):
133+
self.client.db.classes.getprops = lambda: {'foo': hyperdb.String()}
134+
self.form.value.append(MiniFieldStorage('foo', 'hello world'))
135+
136+
self.assertFilterEquals('foo')
137+
138+
# The single value gets replaced with the tokenized list.
139+
self.assertEqual([x.value for x in self.form['foo']], ['hello', 'world'])
140+
141+
class CollisionDetectionTestCase(ActionTestCase):
142+
def setUp(self):
143+
ActionTestCase.setUp(self)
144+
self.action = EditItemAction(self.client)
145+
self.now = Date('.')
146+
# round off for testing
147+
self.now.second = int(self.now.second)
148+
149+
def testLastUserActivity(self):
150+
self.assertEqual(self.action.lastUserActivity(), None)
151+
152+
self.client.form.value.append(MiniFieldStorage('@lastactivity', str(self.now)))
153+
self.assertEqual(self.action.lastUserActivity(), self.now)
154+
155+
def testLastNodeActivity(self):
156+
self.action.classname = 'issue'
157+
self.action.nodeid = '1'
158+
159+
def get(nodeid, propname):
160+
self.assertEqual(nodeid, '1')
161+
self.assertEqual(propname, 'activity')
162+
return self.now
163+
self.client.db.issue.get = get
164+
165+
self.assertEqual(self.action.lastNodeActivity(), self.now)
166+
167+
def testCollision(self):
168+
self.failUnless(self.action.detectCollision(self.now, self.now + Interval("1d")))
169+
self.failIf(self.action.detectCollision(self.now, self.now - Interval("1d")))
170+
self.failIf(self.action.detectCollision(None, self.now))
171+
172+
def test_suite():
173+
suite = unittest.TestSuite()
174+
suite.addTest(unittest.makeSuite(RetireActionTestCase))
175+
suite.addTest(unittest.makeSuite(StandardSearchActionTestCase))
176+
suite.addTest(unittest.makeSuite(FakeFilterVarsTestCase))
177+
suite.addTest(unittest.makeSuite(ShowActionTestCase))
178+
suite.addTest(unittest.makeSuite(CollisionDetectionTestCase))
179+
return suite
180+
181+
if __name__ == '__main__':
182+
runner = unittest.TextTestRunner()
183+
unittest.main(testRunner=runner)
184+

0 commit comments

Comments
 (0)