~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_bugtracker.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2008-03-16 16:58:03 UTC
  • mfrom: (3224.3.1 news-typo)
  • Revision ID: pqm@pqm.ubuntu.com-20080316165803-tisoc9mpob9z544o
(Matt Nordhoff) Trivial NEWS typo fix

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2007-2010 Canonical Ltd
 
1
# Copyright (C) 2007 Canonical Ltd
2
2
#
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
12
12
#
13
13
# You should have received a copy of the GNU General Public License
14
14
# along with this program; if not, write to the Free Software
15
 
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
16
 
17
17
 
18
18
from bzrlib import bugtracker, errors, urlutils
19
 
from bzrlib.tests import TestCase, TestCaseWithMemoryTransport
 
19
from bzrlib.tests import TestCaseWithMemoryTransport
20
20
 
21
21
 
22
22
class TestGetBugURL(TestCaseWithMemoryTransport):
41
41
        self.tracker_type = TestGetBugURL.TransientTracker
42
42
        self.tracker_type.log = []
43
43
        bugtracker.tracker_registry.register('transient', self.tracker_type)
44
 
        self.addCleanup(bugtracker.tracker_registry.remove, 'transient')
 
44
        self.addCleanup(lambda:
 
45
                        bugtracker.tracker_registry.remove('transient'))
45
46
 
46
47
    def test_get_bug_url_for_transient_tracker(self):
47
48
        branch = self.make_branch('some_branch')
80
81
        self.assertEqual('http://bugs.debian.org/1234',
81
82
                         tracker.get_bug_url('1234'))
82
83
 
83
 
    def test_gnome_registered(self):
84
 
        branch = self.make_branch('some_branch')
85
 
        tracker = bugtracker.tracker_registry.get_tracker('gnome', branch)
86
 
        self.assertEqual('http://bugzilla.gnome.org/show_bug.cgi?id=1234',
87
 
                         tracker.get_bug_url('1234'))
88
 
 
89
84
    def test_trac_registered(self):
90
85
        """The Trac bug tracker should be registered by default and generate
91
86
        Trac bug page URLs when the appropriate configuration is present.
117
112
        self.assertEqual('http://bugs.com/1234/view.html',
118
113
                         tracker.get_bug_url('1234'))
119
114
 
120
 
    def test_generic_registered_non_integer(self):
121
 
        branch = self.make_branch('some_branch')
122
 
        config = branch.get_config()
123
 
        config.set_user_option('bugtracker_foo_url', 'http://bugs.com/{id}/view.html')
124
 
        tracker = bugtracker.tracker_registry.get_tracker('foo', branch)
125
 
        self.assertEqual('http://bugs.com/ABC-1234/view.html',
126
 
                         tracker.get_bug_url('ABC-1234'))
127
 
 
128
115
    def test_generic_incorrect_url(self):
129
116
        branch = self.make_branch('some_branch')
130
117
        config = branch.get_config()
135
122
 
136
123
class TestUniqueIntegerBugTracker(TestCaseWithMemoryTransport):
137
124
 
138
 
    def test_appends_id_to_base_url(self):
 
125
    def test_joins_id_to_base_url(self):
139
126
        """The URL of a bug is the base URL joined to the identifier."""
140
 
        tracker = bugtracker.UniqueIntegerBugTracker('xxx',
141
 
                'http://bugs.com/foo')
142
 
        self.assertEqual('http://bugs.com/foo1234', tracker.get_bug_url('1234'))
 
127
        tracker = bugtracker.UniqueIntegerBugTracker('xxx', 'http://bugs.com')
 
128
        self.assertEqual('http://bugs.com/1234', tracker.get_bug_url('1234'))
143
129
 
144
130
    def test_returns_tracker_if_abbreviation_matches(self):
145
131
        """The get() method should return an instance of the tracker if the
146
132
        given abbreviation matches the tracker's abbreviated name.
147
133
        """
148
 
        tracker = bugtracker.UniqueIntegerBugTracker('xxx',
149
 
                'http://bugs.com/')
 
134
        tracker = bugtracker.UniqueIntegerBugTracker('xxx', 'http://bugs.com')
150
135
        branch = self.make_branch('some_branch')
151
136
        self.assertIs(tracker, tracker.get('xxx', branch))
152
137
 
154
139
        """The get() method should return None if the given abbreviated name
155
140
        doesn't match the tracker's abbreviation.
156
141
        """
157
 
        tracker = bugtracker.UniqueIntegerBugTracker('xxx',
158
 
                'http://bugs.com/')
 
142
        tracker = bugtracker.UniqueIntegerBugTracker('xxx', 'http://bugs.com')
159
143
        branch = self.make_branch('some_branch')
160
144
        self.assertIs(None, tracker.get('yyy', branch))
161
145
 
163
147
        """A UniqueIntegerBugTracker shouldn't consult the branch for tracker
164
148
        information.
165
149
        """
166
 
        tracker = bugtracker.UniqueIntegerBugTracker('xxx',
167
 
                'http://bugs.com/')
 
150
        tracker = bugtracker.UniqueIntegerBugTracker('xxx', 'http://bugs.com')
168
151
        self.assertIs(tracker, tracker.get('xxx', None))
169
152
        self.assertIs(None, tracker.get('yyy', None))
170
153
 
171
154
    def test_check_bug_id_only_accepts_integers(self):
172
155
        """A UniqueIntegerBugTracker accepts integers as bug IDs."""
173
 
        tracker = bugtracker.UniqueIntegerBugTracker('xxx',
174
 
                'http://bugs.com/')
 
156
        tracker = bugtracker.UniqueIntegerBugTracker('xxx', 'http://bugs.com')
175
157
        tracker.check_bug_id('1234')
176
158
 
177
159
    def test_check_bug_id_doesnt_accept_non_integers(self):
178
160
        """A UniqueIntegerBugTracker rejects non-integers as bug IDs."""
179
 
        tracker = bugtracker.UniqueIntegerBugTracker('xxx',
180
 
                'http://bugs.com/')
 
161
        tracker = bugtracker.UniqueIntegerBugTracker('xxx', 'http://bugs.com')
181
162
        self.assertRaises(
182
163
            errors.MalformedBugIdentifier, tracker.check_bug_id, 'red')
183
164
 
184
 
class TestURLParametrizedBugTracker(TestCaseWithMemoryTransport):
185
 
    """Tests for URLParametrizedBugTracker."""
 
165
 
 
166
class TestURLParametrizedIntegerBugTracker(TestCaseWithMemoryTransport):
 
167
    """Tests for TracTracker."""
186
168
 
187
169
    def setUp(self):
188
170
        TestCaseWithMemoryTransport.setUp(self)
189
171
        self.url = 'http://twistedmatrix.com/trac'
190
 
        self.tracker = bugtracker.URLParametrizedBugTracker('some', 'ticket/')
 
172
        self.tracker = bugtracker.URLParametrizedIntegerBugTracker('some',
 
173
                                                                   'ticket/')
191
174
 
192
175
    def test_get_with_unsupported_tag(self):
193
176
        """If asked for an unrecognized or unconfigured tag, return None."""
199
182
        """If asked for a valid tag, return a tracker instance that can map bug
200
183
        IDs to <base_url>/<bug_area> + <bug_id>."""
201
184
        bugtracker.tracker_registry.register('some', self.tracker)
202
 
        self.addCleanup(bugtracker.tracker_registry.remove, 'some')
 
185
        self.addCleanup(lambda: bugtracker.tracker_registry.remove('some'))
203
186
 
204
187
        branch = self.make_branch('some_branch')
205
188
        config = branch.get_config()
209
192
            urlutils.join(self.url, 'ticket/') + '1234',
210
193
            tracker.get_bug_url('1234'))
211
194
 
212
 
    def test_get_bug_url_for_integer_id(self):
213
 
        self.tracker.check_bug_id('1234')
214
 
 
215
 
    def test_get_bug_url_for_non_integer_id(self):
216
 
        self.tracker.check_bug_id('ABC-1234')
217
 
 
218
 
 
219
 
class TestURLParametrizedIntegerBugTracker(TestCaseWithMemoryTransport):
220
 
    """Tests for URLParametrizedIntegerBugTracker."""
221
 
 
222
 
    def setUp(self):
223
 
        TestCaseWithMemoryTransport.setUp(self)
224
 
        self.url = 'http://twistedmatrix.com/trac'
225
 
        self.tracker = bugtracker.URLParametrizedIntegerBugTracker('some',
226
 
                                                                   'ticket/')
227
 
 
228
195
    def test_get_bug_url_for_bad_bug(self):
229
196
        """When given a bug identifier that is invalid for Trac, get_bug_url
230
197
        should raise an error.
231
198
        """
232
199
        self.assertRaises(
233
200
            errors.MalformedBugIdentifier, self.tracker.get_bug_url, 'bad')
234
 
 
235
 
 
236
 
class TestPropertyEncoding(TestCase):
237
 
    """Tests for how the bug URLs are encoded as revision properties."""
238
 
 
239
 
    def test_encoding_one(self):
240
 
        self.assertEqual(
241
 
            'http://example.com/bugs/1 fixed',
242
 
            bugtracker.encode_fixes_bug_urls(['http://example.com/bugs/1']))
243
 
 
244
 
    def test_encoding_zero(self):
245
 
        self.assertEqual('', bugtracker.encode_fixes_bug_urls([]))
246
 
 
247
 
    def test_encoding_two(self):
248
 
        self.assertEqual(
249
 
            'http://example.com/bugs/1 fixed\n'
250
 
            'http://example.com/bugs/2 fixed',
251
 
            bugtracker.encode_fixes_bug_urls(
252
 
                ['http://example.com/bugs/1', 'http://example.com/bugs/2']))