1
3
from loggerhead.apps.branch import BranchWSGIApp
2
4
from loggerhead.controllers.annotate_ui import AnnotateUI
3
5
from loggerhead.controllers.inventory_ui import InventoryUI
6
from loggerhead.controllers.revision_ui import RevisionUI
4
7
from loggerhead.tests.test_simple import BasicTests, consume_app
8
from loggerhead import util
7
11
class TestInventoryUI(BasicTests):
82
86
rev_ui.parse_args(env)
83
87
self.assertIsInstance(rev_ui.get_values('', {}, []), dict)
85
def test_add_template_values(self):
86
branch_app = self.make_branch_app_for_revision_ui(
87
[('file', 'content\n')], [('file', 'new content\n')])
88
env = {'SCRIPT_NAME': '/',
89
'PATH_INFO': '/revision/1/non-existent-file',
90
'QUERY_STRING':'start_revid=1' }
91
revision_ui = branch_app.lookup_app(env)
92
path = revision_ui.parse_args(env)
93
values = revision_ui.get_values(path, revision_ui.kwargs, {})
94
revision_ui.add_template_values(values)
95
self.assertIs(values['diff_chunks'], None)
97
89
def test_get_values_smoke(self):
98
90
branch_app = self.make_branch_app_for_revision_ui(
99
91
[('file', 'content\n'), ('other-file', 'other\n')],
145
137
self.assertEqual(2, len(annotated))
146
138
self.assertEqual('2', annotated[1].change.revno)
147
139
self.assertEqual('1', annotated[2].change.revno)
149
141
def test_annotate_empty_comment(self):
150
142
# Testing empty comment handling without breaking
151
143
history = [('rev1', 'old\nold\n', '.'), ('rev2', 'new\nold\n', '')]
153
145
ann_ui.args = ['rev2']
154
146
annotate_info = ann_ui.get_values('filename',
155
147
kwargs={'file_id': 'file_id'}, headers={})
157
def test_annotate_file_zero_sized(self):
158
# Test against a zero-sized file without breaking. No annotation must be present.
159
history = [('rev1', '' , '.')]
160
ann_ui = self.make_annotate_ui_for_file_history('file_id', history)
161
ann_ui.args = ['rev1']
162
annotate_info = ann_ui.get_values('filename',
163
kwargs={'file_id': 'file_id'}, headers={})
164
annotated = annotate_info['annotated']
165
self.assertEqual(0, len(annotated))
168
149
class TestFileDiffUI(BasicTests):
170
151
def make_branch_app_for_filediff_ui(self):
230
211
revlog_ui = branch_app.lookup_app(env)
231
212
self.assertOkJsonResponse(revlog_ui, env)
234
class TestControllerHooks(BasicTests):
236
def test_dummy_hook(self):
238
# A hook that returns None doesn't influence the searching for
240
env = {'SCRIPT_NAME': '', 'PATH_INFO': '/custom'}
241
myhook = lambda app, environ: None
242
branch = self.make_branch('.')
243
self.addCleanup(branch.lock_read().unlock)
244
app = self.make_branch_app(branch)
245
self.addCleanup(BranchWSGIApp.hooks.uninstall_named_hook, 'controller',
247
BranchWSGIApp.hooks.install_named_hook('controller', myhook, "captain hook")
248
self.assertRaises(KeyError, app.lookup_app, env)
250
def test_working_hook(self):
251
# A hook can provide an app to use for a particular request.
252
env = {'SCRIPT_NAME': '', 'PATH_INFO': '/custom'}
253
myhook = lambda app, environ: "I am hooked"
254
branch = self.make_branch('.')
255
self.addCleanup(branch.lock_read().unlock)
256
app = self.make_branch_app(branch)
257
self.addCleanup(BranchWSGIApp.hooks.uninstall_named_hook, 'controller',
259
BranchWSGIApp.hooks.install_named_hook('controller', myhook, "captain hook")
260
self.assertEquals("I am hooked", app.lookup_app(env))