comparison bitten/tests/web_ui.py @ 439:20ddfbb8e879

Fix for #154, added unit tests.
author cmlenz
date Tue, 21 Aug 2007 11:13:36 +0000
parents cfbc9ee622d5
children e660687ac89c
comparison
equal deleted inserted replaced
438:99d516f75169 439:20ddfbb8e879
10 10
11 import shutil 11 import shutil
12 import tempfile 12 import tempfile
13 import unittest 13 import unittest
14 14
15 from trac.core import TracError
15 from trac.db import DatabaseManager 16 from trac.db import DatabaseManager
16 from trac.perm import PermissionCache, PermissionSystem 17 from trac.perm import PermissionCache, PermissionSystem
17 from trac.test import EnvironmentStub, Mock 18 from trac.test import EnvironmentStub, Mock
19 from trac.util.html import Markup
18 from trac.web.clearsilver import HDFWrapper 20 from trac.web.clearsilver import HDFWrapper
19 from trac.web.href import Href 21 from trac.web.href import Href
20 from bitten.model import BuildConfig, TargetPlatform, schema 22 from bitten.main import BuildSystem
21 from bitten.web_ui import BuildConfigController 23 from bitten.model import Build, BuildConfig, BuildStep, TargetPlatform, schema
24 from bitten.web_ui import BuildConfigController, SourceFileLinkFormatter
22 25
23 26
24 class BuildConfigControllerTestCase(unittest.TestCase): 27 class BuildConfigControllerTestCase(unittest.TestCase):
25 28
26 def setUp(self): 29 def setUp(self):
119 else: 122 else:
120 self.assertEqual('/trac/build/test?page=2', 123 self.assertEqual('/trac/build/test?page=2',
121 req.hdf.get('chrome.links.next.0.href')) 124 req.hdf.get('chrome.links.next.0.href'))
122 125
123 126
127 class SourceFileLinkFormatterTestCase(unittest.TestCase):
128
129 def setUp(self):
130 self.env = EnvironmentStub()
131
132 # Create tables
133 db = self.env.get_db_cnx()
134 cursor = db.cursor()
135 connector, _ = DatabaseManager(self.env)._get_connector()
136 for table in schema:
137 for stmt in connector.to_sql(table):
138 cursor.execute(stmt)
139
140 # Hook up a dummy repository
141 self.repos = Mock(
142 get_node=lambda path, rev=None: Mock(get_history=lambda: [],
143 isdir=True),
144 normalize_path=lambda path: path,
145 sync=lambda: None
146 )
147 self.env.get_repository = lambda authname=None: self.repos
148
149 def tearDown(self):
150 pass
151
152 def test_format_simple_link_in_repos(self):
153 BuildConfig(self.env, name='test', path='trunk').insert()
154 build = Build(self.env, config='test', platform=1, rev=123, rev_time=42,
155 status=Build.SUCCESS, slave='hal')
156 build.insert()
157 step = BuildStep(self.env, build=build.id, name='foo',
158 status=BuildStep.SUCCESS)
159 step.insert()
160
161 self.repos.get_node = lambda path, rev: (path, rev)
162
163 req = Mock(method='GET', href=Href('/trac'), authname='hal')
164 comp = SourceFileLinkFormatter(self.env)
165 formatter = comp.get_formatter(req, build)
166
167 output = formatter(step, None, None, u'error in foo/bar.c')
168 self.assertEqual(Markup, type(output))
169 self.assertEqual('error in <a href="/trac/browser/trunk/foo/bar.c">'
170 'foo/bar.c</a>', output)
171
172 def test_format_simple_link_not_in_repos(self):
173 BuildConfig(self.env, name='test', path='trunk').insert()
174 build = Build(self.env, config='test', platform=1, rev=123, rev_time=42,
175 status=Build.SUCCESS, slave='hal')
176 build.insert()
177 step = BuildStep(self.env, build=build.id, name='foo',
178 status=BuildStep.SUCCESS)
179 step.insert()
180
181 def _raise():
182 raise TracError('No such node')
183 self.repos.get_node = lambda path, rev: _raise()
184
185 req = Mock(method='GET', href=Href('/trac'), authname='hal')
186 comp = SourceFileLinkFormatter(self.env)
187 formatter = comp.get_formatter(req, build)
188
189 output = formatter(step, None, None, u'error in foo/bar.c')
190 self.assertEqual(Markup, type(output))
191 self.assertEqual('error in foo/bar.c', output)
192
193 def test_format_link_in_repos_with_line(self):
194 BuildConfig(self.env, name='test', path='trunk').insert()
195 build = Build(self.env, config='test', platform=1, rev=123, rev_time=42,
196 status=Build.SUCCESS, slave='hal')
197 build.insert()
198 step = BuildStep(self.env, build=build.id, name='foo',
199 status=BuildStep.SUCCESS)
200 step.insert()
201
202 self.repos.get_node = lambda path, rev: (path, rev)
203
204 req = Mock(method='GET', href=Href('/trac'), authname='hal')
205 comp = SourceFileLinkFormatter(self.env)
206 formatter = comp.get_formatter(req, build)
207
208 output = formatter(step, None, None, u'error in foo/bar.c:123')
209 self.assertEqual(Markup, type(output))
210 self.assertEqual('error in <a href="/trac/browser/trunk/foo/bar.c#L123">'
211 'foo/bar.c:123</a>', output)
212
213 def test_format_link_not_in_repos_with_line(self):
214 BuildConfig(self.env, name='test', path='trunk').insert()
215 build = Build(self.env, config='test', platform=1, rev=123, rev_time=42,
216 status=Build.SUCCESS, slave='hal')
217 build.insert()
218 step = BuildStep(self.env, build=build.id, name='foo',
219 status=BuildStep.SUCCESS)
220 step.insert()
221
222 def _raise():
223 raise TracError('No such node')
224 self.repos.get_node = lambda path, rev: _raise()
225
226 req = Mock(method='GET', href=Href('/trac'), authname='hal')
227 comp = SourceFileLinkFormatter(self.env)
228 formatter = comp.get_formatter(req, build)
229
230 output = formatter(step, None, None, u'error in foo/bar.c:123')
231 self.assertEqual(Markup, type(output))
232 self.assertEqual('error in foo/bar.c:123', output)
233
234
124 def suite(): 235 def suite():
125 return unittest.makeSuite(BuildConfigControllerTestCase, 'test') 236 suite = unittest.TestSuite()
237 suite.addTest(unittest.makeSuite(BuildConfigControllerTestCase, 'test'))
238 suite.addTest(unittest.makeSuite(SourceFileLinkFormatterTestCase, 'test'))
239 return suite
126 240
127 if __name__ == '__main__': 241 if __name__ == '__main__':
128 unittest.main(defaultTest='suite') 242 unittest.main(defaultTest='suite')
Copyright (C) 2012-2017 Edgewall Software