1
# Copyright (C) 2008, 2009 Canonical Ltd.
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
# GNU General Public License for more details.
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21
from bzrlib.tests import TestCaseWithTransport
22
from bzrlib.util.configobj.configobj import ConfigObj
23
from bzrlib import config
25
from loggerhead.apps.branch import BranchWSGIApp
26
from paste.fixture import TestApp
27
from paste.httpexceptions import HTTPExceptionHandler
31
def test_config_root():
32
from loggerhead.apps.config import Root
34
app = TestApp(HTTPExceptionHandler(Root(config)))
36
res.mustcontain('loggerhead branches')
39
class BasicTests(TestCaseWithTransport):
42
TestCaseWithTransport.setUp(self)
43
logging.basicConfig(level=logging.ERROR)
44
logging.getLogger('bzr').setLevel(logging.CRITICAL)
46
def createBranch(self):
47
self.tree = self.make_branch_and_tree('.')
49
def setUpLoggerhead(self, **kw):
50
branch_app = BranchWSGIApp(self.tree.branch, '', **kw).app
51
return TestApp(HTTPExceptionHandler(branch_app))
54
class TestWithSimpleTree(BasicTests):
57
BasicTests.setUp(self)
60
self.filecontents = ('some\nmultiline\ndata\n'
61
'with<htmlspecialchars\n')
62
self.build_tree_contents(
63
[('myfilename', self.filecontents)])
64
self.tree.add('myfilename')
65
self.fileid = self.tree.path2id('myfilename')
66
self.msg = 'a very exciting commit message <'
67
self.revid = self.tree.commit(message=self.msg)
69
def test_changes(self):
70
app = self.setUpLoggerhead()
71
res = app.get('/changes')
72
res.mustcontain(cgi.escape(self.msg))
74
def test_changes_branch_from(self):
75
app = self.setUpLoggerhead(served_url="lp:loggerhead")
76
res = app.get('/changes')
77
self.failUnless("To get this branch, use:" in res)
78
self.failUnless("lp:loggerhead" in res)
79
app = self.setUpLoggerhead(served_url=None)
80
res = app.get('/changes')
81
self.failIf("To get this branch, use:" in res)
83
def test_changes_search(self):
84
app = self.setUpLoggerhead()
85
res = app.get('/changes', params={'q': 'foo'})
86
res.mustcontain('Sorry, no results found for your search.')
88
def test_annotate(self):
89
app = self.setUpLoggerhead()
90
res = app.get('/annotate', params={'file_id': self.fileid})
91
for line in self.filecontents.splitlines():
92
res.mustcontain(cgi.escape(line))
94
def test_inventory(self):
95
app = self.setUpLoggerhead()
96
res = app.get('/files')
97
res.mustcontain('myfilename')
98
res = app.get('/files/')
99
res.mustcontain('myfilename')
100
res = app.get('/files/1')
101
res.mustcontain('myfilename')
102
res = app.get('/files/1/')
103
res.mustcontain('myfilename')
104
res = app.get('/files/1/?file_id=' + self.tree.path2id(''))
105
res.mustcontain('myfilename')
107
def test_inventory_bad_rev_404(self):
108
app = self.setUpLoggerhead()
109
res = app.get('/files/200', status=404)
110
res = app.get('/files/invalid-revid', status=404)
112
def test_inventory_bad_path_404(self):
113
app = self.setUpLoggerhead()
114
res = app.get('/files/1/hooha', status=404)
115
res = app.get('/files/1?file_id=dssadsada', status=404)
117
def test_revision(self):
118
app = self.setUpLoggerhead()
119
res = app.get('/revision/1')
120
res.mustcontain('myfilename')
123
class TestEmptyBranch(BasicTests):
124
"""Test that an empty branch doesn't break"""
127
BasicTests.setUp(self)
130
def test_changes(self):
131
app = self.setUpLoggerhead()
132
res = app.get('/changes')
133
res.mustcontain('No revisions!')
135
def test_inventory(self):
136
app = self.setUpLoggerhead()
137
res = app.get('/files')
138
res.mustcontain('No revisions!')
141
class TestHiddenBranch(BasicTests):
143
Test that hidden branches aren't shown
144
FIXME: not tested that it doesn't show up on listings
148
BasicTests.setUp(self)
150
locations = config.locations_config_filename()
151
config.ensure_config_dir_exists()
152
open(locations, 'wb').write('[%s]\nhttp_serve = False'
153
% (self.tree.branch.base,))
155
def test_no_access(self):
156
app = self.setUpLoggerhead()
157
res = app.get('/changes', status=404)
160
#class TestGlobalConfig(BasicTests):
162
# Test that global config settings are respected
166
# BasicTests.setUp(self)
167
# self.createBranch()
168
# config.GlobalConfig().set_user_option('http_version', 'True')
170
# def test_setting_respected(self):
171
#FIXME: Figure out how to test this properly
172
# app = self.setUpLoggerhead()
173
# res = app.get('/changes', status=200)