10
from configobj import ConfigObj
4
from bzrlib.tests import TestCaseWithTransport
5
from bzrlib.util.configobj.configobj import ConfigObj
12
from loggerhead.history import History
13
7
from loggerhead.apps.branch import BranchWSGIApp
14
8
from paste.fixture import TestApp
9
from paste.httpexceptions import HTTPExceptionHandler
17
13
def test_config_root():
18
14
from loggerhead.apps.config import Root
19
15
config = ConfigObj()
20
app = TestApp(Root(config))
16
app = TestApp(HTTPExceptionHandler(Root(config)))
22
18
res.mustcontain('loggerhead branches')
25
class BasicTests(object):
27
# setup_method and teardown_method are so i can run the tests with
28
# py.test and take advantage of the error reporting.
29
def setup_method(self, meth):
32
def teardown_method(self, meth):
21
class BasicTests(TestCaseWithTransport):
36
logging.basicConfig(level=logging.DEBUG)
38
self.old_bzrhome = None
24
TestCaseWithTransport.setUp(self)
25
logging.basicConfig(level=logging.ERROR)
26
logging.getLogger('bzr').setLevel(logging.CRITICAL)
40
28
def createBranch(self):
41
self.old_bzrhome = bzrlib.osutils.set_or_unset_env('BZR_HOME', '')
42
self.bzrbranch = tempfile.mkdtemp()
43
self.branch = bzrlib.bzrdir.BzrDir.create_branch_convenience(
44
self.bzrbranch, force_new_tree=True)
45
self.tree = self.branch.bzrdir.open_workingtree()
50
branch_name = 'branch'
54
def setUpLoggerhead(self):
55
app = TestApp(BranchWSGIApp(self.branch).app)
59
if self.bzrbranch is not None:
60
shutil.rmtree(self.bzrbranch)
61
bzrlib.osutils.set_or_unset_env('BZR_HOME', self.old_bzrhome)
29
self.tree = self.make_branch_and_tree('.')
31
def setUpLoggerhead(self, **kw):
32
branch_app = BranchWSGIApp(self.tree.branch, '', **kw).app
33
return TestApp(HTTPExceptionHandler(branch_app))
64
36
class TestWithSimpleTree(BasicTests):
67
39
BasicTests.setUp(self)
68
40
self.createBranch()
70
f = open(os.path.join(self.bzrbranch, 'myfilename'), 'w')
71
42
self.filecontents = ('some\nmultiline\ndata\n'
72
43
'with<htmlspecialchars\n')
74
f.write(self.filecontents)
44
self.build_tree_contents(
45
[('myfilename', self.filecontents)])
77
46
self.tree.add('myfilename')
78
47
self.fileid = self.tree.path2id('myfilename')
79
48
self.msg = 'a very exciting commit message <'
80
49
self.revid = self.tree.commit(message=self.msg)
83
51
def test_changes(self):
84
52
app = self.setUpLoggerhead()
85
53
res = app.get('/changes')
86
54
res.mustcontain(cgi.escape(self.msg))
56
def test_changes_branch_from(self):
57
app = self.setUpLoggerhead(served_url="lp:loggerhead")
58
res = app.get('/changes')
59
self.failUnless("To get this branch, use:" in res)
60
self.failUnless("lp:loggerhead" in res)
61
app = self.setUpLoggerhead(served_url=None)
62
res = app.get('/changes')
63
self.failIf("To get this branch, use:" in res)
88
65
def test_changes_search(self):
89
66
app = self.setUpLoggerhead()
90
67
res = app.get('/changes', params={'q': 'foo'})
93
70
def test_annotate(self):
94
71
app = self.setUpLoggerhead()
95
res = app.get('/annotate', params={'file_id':self.fileid})
72
res = app.get('/annotate', params={'file_id': self.fileid})
96
73
for line in self.filecontents.splitlines():
97
74
res.mustcontain(cgi.escape(line))
100
77
app = self.setUpLoggerhead()
101
78
res = app.get('/files')
102
79
res.mustcontain('myfilename')
80
res = app.get('/files/')
81
res.mustcontain('myfilename')
82
res = app.get('/files/1')
83
res.mustcontain('myfilename')
84
res = app.get('/files/1/')
85
res.mustcontain('myfilename')
86
res = app.get('/files/1/?file_id=' + self.tree.path2id(''))
87
res.mustcontain('myfilename')
89
def test_inventory_bad_rev_404(self):
90
app = self.setUpLoggerhead()
91
res = app.get('/files/200', status=404)
92
res = app.get('/files/invalid-revid', status=404)
94
def test_inventory_bad_path_404(self):
95
app = self.setUpLoggerhead()
96
res = app.get('/files/1/hooha', status=404)
97
res = app.get('/files/1?file_id=dssadsada', status=404)
104
99
def test_revision(self):
105
100
app = self.setUpLoggerhead()
118
113
res = app.get('/changes')
119
114
res.mustcontain('No revisions!')
116
def test_inventory(self):
117
app = self.setUpLoggerhead()
118
res = app.get('/files')
119
res.mustcontain('No revisions!')