comparison test/test_actions.py @ 2032:5a7ec0c63095

fixes to some unit tests, and a cleanup
author Richard Jones <richard@users.sourceforge.net>
date Fri, 20 Feb 2004 03:48:16 +0000
parents 366d3bbce982
children d6bcdae0b085
comparison
equal deleted inserted replaced
2031:bcb21e5722b8 2032:5a7ec0c63095
18 # This allows assignments which assume all intermediate steps are Null 18 # This allows assignments which assume all intermediate steps are Null
19 # objects if they don't exist yet. 19 # objects if they don't exist yet.
20 # 20 #
21 # For example (with just 'client' defined): 21 # For example (with just 'client' defined):
22 # 22 #
23 # client.db.config.TRACKER_WEB = 'BASE/' 23 # client.db.config.TRACKER_WEB = 'BASE/'
24 setattr(self, name, MockNull()) 24 setattr(self, name, MockNull())
25 return getattr(self, name) 25 return getattr(self, name)
26 26
27 def __getitem__(self, key): return self 27 def __getitem__(self, key): return self
28 def __nonzero__(self): return 0 28 def __nonzero__(self): return 0
29 def __str__(self): return '' 29 def __str__(self): return ''
30 30
31 def true(*args, **kwargs): 31 def true(*args, **kwargs):
32 return 1 32 return 1
34 class ActionTestCase(unittest.TestCase): 34 class ActionTestCase(unittest.TestCase):
35 def setUp(self): 35 def setUp(self):
36 self.form = FieldStorage() 36 self.form = FieldStorage()
37 self.client = MockNull() 37 self.client = MockNull()
38 self.client.form = self.form 38 self.client.form = self.form
39 39
40 class ShowActionTestCase(ActionTestCase): 40 class ShowActionTestCase(ActionTestCase):
41 def assertRaisesMessage(self, exception, callable, message, *args, **kwargs): 41 def assertRaisesMessage(self, exception, callable, message, *args, **kwargs):
42 try: 42 try:
43 callable(*args, **kwargs) 43 callable(*args, **kwargs)
44 except exception, msg: 44 except exception, msg:
45 self.assertEqual(str(msg), message) 45 self.assertEqual(str(msg), message)
46 else: 46 else:
47 if hasattr(excClass,'__name__'): excName = excClass.__name__ 47 if hasattr(excClass,'__name__'): excName = excClass.__name__
48 else: excName = str(excClass) 48 else: excName = str(excClass)
49 raise self.failureException, excName 49 raise self.failureException, excName
50 50
51 def testShowAction(self): 51 def testShowAction(self):
52 self.client.db.config.TRACKER_WEB = 'BASE/' 52 self.client.db.config.TRACKER_WEB = 'BASE/'
53 53
54 action = ShowAction(self.client) 54 action = ShowAction(self.client)
55 self.assertRaises(ValueError, action.handle) 55 self.assertRaises(ValueError, action.handle)
56 56
57 self.form.value.append(MiniFieldStorage('@type', 'issue')) 57 self.form.value.append(MiniFieldStorage('@type', 'issue'))
58 self.assertRaisesMessage(Redirect, action.handle, 'BASE/issue') 58 self.assertRaisesMessage(Redirect, action.handle, 'BASE/issue')
59 59
60 self.form.value.append(MiniFieldStorage('@number', '1')) 60 self.form.value.append(MiniFieldStorage('@number', '1'))
61 self.assertRaisesMessage(Redirect, action.handle, 'BASE/issue1') 61 self.assertRaisesMessage(Redirect, action.handle, 'BASE/issue1')
62 62
63 class RetireActionTestCase(ActionTestCase): 63 class RetireActionTestCase(ActionTestCase):
64 def testRetireAction(self): 64 def testRetireAction(self):
66 self.client.ok_message = [] 66 self.client.ok_message = []
67 RetireAction(self.client).handle() 67 RetireAction(self.client).handle()
68 self.assert_(len(self.client.ok_message) == 1) 68 self.assert_(len(self.client.ok_message) == 1)
69 69
70 def testNoPermission(self): 70 def testNoPermission(self):
71 self.assertRaises(Unauthorised, RetireAction(self.client).handle) 71 self.assertRaises(Unauthorised, RetireAction(self.client).execute)
72 72
73 def testDontRetireAdminOrAnonymous(self): 73 def testDontRetireAdminOrAnonymous(self):
74 self.client.db.security.hasPermission=true 74 self.client.db.security.hasPermission=true
75 self.client.classname = 'user' 75 # look up the user class
76 self.client.classname = 'user'
77 # but always look up admin, regardless of nodeid
76 self.client.db.user.get = lambda a,b: 'admin' 78 self.client.db.user.get = lambda a,b: 'admin'
79 self.assertRaises(ValueError, RetireAction(self.client).handle)
80 # .. or anonymous
81 self.client.db.user.get = lambda a,b: 'anonymous'
77 self.assertRaises(ValueError, RetireAction(self.client).handle) 82 self.assertRaises(ValueError, RetireAction(self.client).handle)
78 83
79 class SearchActionTestCase(ActionTestCase): 84 class SearchActionTestCase(ActionTestCase):
80 def setUp(self): 85 def setUp(self):
81 ActionTestCase.setUp(self) 86 ActionTestCase.setUp(self)
82 self.action = SearchAction(self.client) 87 self.action = SearchAction(self.client)
83 88
84 class StandardSearchActionTestCase(SearchActionTestCase): 89 class StandardSearchActionTestCase(SearchActionTestCase):
85 def testNoPermission(self): 90 def testNoPermission(self):
86 self.assertRaises(Unauthorised, self.action.handle) 91 self.assertRaises(Unauthorised, self.action.execute)
87 92
88 def testQueryName(self): 93 def testQueryName(self):
89 self.assertEqual(self.action.getQueryName(), '') 94 self.assertEqual(self.action.getQueryName(), '')
90 95
91 self.form.value.append(MiniFieldStorage('@queryname', 'foo')) 96 self.form.value.append(MiniFieldStorage('@queryname', 'foo'))
92 self.assertEqual(self.action.getQueryName(), 'foo') 97 self.assertEqual(self.action.getQueryName(), 'foo')
97 self.client.db.classes.getprops = lambda: {'foo': hyperdb.Multilink('foo')} 102 self.client.db.classes.getprops = lambda: {'foo': hyperdb.Multilink('foo')}
98 103
99 def assertFilterEquals(self, expected): 104 def assertFilterEquals(self, expected):
100 self.action.fakeFilterVars() 105 self.action.fakeFilterVars()
101 self.assertEqual(self.form.getvalue('@filter'), expected) 106 self.assertEqual(self.form.getvalue('@filter'), expected)
102 107
103 def testEmptyMultilink(self): 108 def testEmptyMultilink(self):
104 self.form.value.append(MiniFieldStorage('foo', '')) 109 self.form.value.append(MiniFieldStorage('foo', ''))
105 self.form.value.append(MiniFieldStorage('foo', '')) 110 self.form.value.append(MiniFieldStorage('foo', ''))
106 111
107 self.assertFilterEquals(None) 112 self.assertFilterEquals(None)
126 self.assertFilterEquals('foo') 131 self.assertFilterEquals('foo')
127 132
128 def testTokenizedStringKey(self): 133 def testTokenizedStringKey(self):
129 self.client.db.classes.getprops = lambda: {'foo': hyperdb.String()} 134 self.client.db.classes.getprops = lambda: {'foo': hyperdb.String()}
130 self.form.value.append(MiniFieldStorage('foo', 'hello world')) 135 self.form.value.append(MiniFieldStorage('foo', 'hello world'))
131 136
132 self.assertFilterEquals('foo') 137 self.assertFilterEquals('foo')
133 138
134 # The single value gets replaced with the tokenized list. 139 # The single value gets replaced with the tokenized list.
135 self.assertEqual([x.value for x in self.form['foo']], ['hello', 'world']) 140 self.assertEqual([x.value for x in self.form['foo']], ['hello', 'world'])
136 141
137 class CollisionDetectionTestCase(ActionTestCase): 142 class CollisionDetectionTestCase(ActionTestCase):
138 def setUp(self): 143 def setUp(self):
139 ActionTestCase.setUp(self) 144 ActionTestCase.setUp(self)
140 self.action = EditItemAction(self.client) 145 self.action = EditItemAction(self.client)
141 self.now = Date('.') 146 self.now = Date('.')
142 147
143 def testLastUserActivity(self): 148 def testLastUserActivity(self):
144 self.assertEqual(self.action.lastUserActivity(), None) 149 self.assertEqual(self.action.lastUserActivity(), None)
145 150
146 self.client.form.value.append(MiniFieldStorage('@lastactivity', str(self.now))) 151 self.client.form.value.append(MiniFieldStorage('@lastactivity', str(self.now)))
147 self.assertEqual(self.action.lastUserActivity(), self.now) 152 self.assertEqual(self.action.lastUserActivity(), self.now)
148 153
149 def testLastNodeActivity(self): 154 def testLastNodeActivity(self):
150 self.action.classname = 'issue' 155 self.action.classname = 'issue'
151 self.action.nodeid = '1' 156 self.action.nodeid = '1'
159 self.assertEqual(self.action.lastNodeActivity(), self.now) 164 self.assertEqual(self.action.lastNodeActivity(), self.now)
160 165
161 def testCollision(self): 166 def testCollision(self):
162 self.failUnless(self.action.detectCollision(self.now, self.now + Interval("1d"))) 167 self.failUnless(self.action.detectCollision(self.now, self.now + Interval("1d")))
163 self.failIf(self.action.detectCollision(self.now, self.now - Interval("1d"))) 168 self.failIf(self.action.detectCollision(self.now, self.now - Interval("1d")))
164 self.failIf(self.action.detectCollision(None, self.now)) 169 self.failIf(self.action.detectCollision(None, self.now))
165 170
166 def test_suite(): 171 def test_suite():
167 suite = unittest.TestSuite() 172 suite = unittest.TestSuite()
168 suite.addTest(unittest.makeSuite(RetireActionTestCase)) 173 suite.addTest(unittest.makeSuite(RetireActionTestCase))
169 suite.addTest(unittest.makeSuite(StandardSearchActionTestCase)) 174 suite.addTest(unittest.makeSuite(StandardSearchActionTestCase))
170 suite.addTest(unittest.makeSuite(FakeFilterVarsTestCase)) 175 suite.addTest(unittest.makeSuite(FakeFilterVarsTestCase))

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