~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_bugtracker.py

  • Committer: Ian Clatworthy
  • Date: 2007-11-30 04:28:32 UTC
  • mto: (3054.1.1 ianc-integration)
  • mto: This revision was merged to the branch mainline in revision 3055.
  • Revision ID: ian.clatworthy@internode.on.net-20071130042832-6prruj0kzg3fodm8
chapter 2 tweaks

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):
37
37
            return "http://bugs.com/%s" % bug_id
38
38
 
39
39
    def setUp(self):
40
 
        super(TestGetBugURL, self).setUp()
 
40
        TestCaseWithMemoryTransport.setUp(self)
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.
109
104
        self.assertEqual('http://bugs.com/show_bug.cgi?id=1234',
110
105
                         tracker.get_bug_url('1234'))
111
106
 
112
 
    def test_generic_registered(self):
113
 
        branch = self.make_branch('some_branch')
114
 
        config = branch.get_config()
115
 
        config.set_user_option('bugtracker_foo_url', 'http://bugs.com/{id}/view.html')
116
 
        tracker = bugtracker.tracker_registry.get_tracker('foo', branch)
117
 
        self.assertEqual('http://bugs.com/1234/view.html',
118
 
                         tracker.get_bug_url('1234'))
119
 
 
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
 
    def test_generic_incorrect_url(self):
129
 
        branch = self.make_branch('some_branch')
130
 
        config = branch.get_config()
131
 
        config.set_user_option('bugtracker_foo_url', 'http://bugs.com/view.html')
132
 
        tracker = bugtracker.tracker_registry.get_tracker('foo', branch)
133
 
        self.assertRaises(errors.InvalidBugTrackerURL, tracker.get_bug_url, '1234')
134
 
 
135
107
 
136
108
class TestUniqueIntegerBugTracker(TestCaseWithMemoryTransport):
137
109
 
138
 
    def test_appends_id_to_base_url(self):
 
110
    def test_joins_id_to_base_url(self):
139
111
        """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'))
 
112
        tracker = bugtracker.UniqueIntegerBugTracker('xxx', 'http://bugs.com')
 
113
        self.assertEqual('http://bugs.com/1234', tracker.get_bug_url('1234'))
143
114
 
144
115
    def test_returns_tracker_if_abbreviation_matches(self):
145
116
        """The get() method should return an instance of the tracker if the
146
117
        given abbreviation matches the tracker's abbreviated name.
147
118
        """
148
 
        tracker = bugtracker.UniqueIntegerBugTracker('xxx',
149
 
                'http://bugs.com/')
 
119
        tracker = bugtracker.UniqueIntegerBugTracker('xxx', 'http://bugs.com')
150
120
        branch = self.make_branch('some_branch')
151
121
        self.assertIs(tracker, tracker.get('xxx', branch))
152
122
 
154
124
        """The get() method should return None if the given abbreviated name
155
125
        doesn't match the tracker's abbreviation.
156
126
        """
157
 
        tracker = bugtracker.UniqueIntegerBugTracker('xxx',
158
 
                'http://bugs.com/')
 
127
        tracker = bugtracker.UniqueIntegerBugTracker('xxx', 'http://bugs.com')
159
128
        branch = self.make_branch('some_branch')
160
129
        self.assertIs(None, tracker.get('yyy', branch))
161
130
 
163
132
        """A UniqueIntegerBugTracker shouldn't consult the branch for tracker
164
133
        information.
165
134
        """
166
 
        tracker = bugtracker.UniqueIntegerBugTracker('xxx',
167
 
                'http://bugs.com/')
 
135
        tracker = bugtracker.UniqueIntegerBugTracker('xxx', 'http://bugs.com')
168
136
        self.assertIs(tracker, tracker.get('xxx', None))
169
137
        self.assertIs(None, tracker.get('yyy', None))
170
138
 
171
139
    def test_check_bug_id_only_accepts_integers(self):
172
140
        """A UniqueIntegerBugTracker accepts integers as bug IDs."""
173
 
        tracker = bugtracker.UniqueIntegerBugTracker('xxx',
174
 
                'http://bugs.com/')
 
141
        tracker = bugtracker.UniqueIntegerBugTracker('xxx', 'http://bugs.com')
175
142
        tracker.check_bug_id('1234')
176
143
 
177
144
    def test_check_bug_id_doesnt_accept_non_integers(self):
178
145
        """A UniqueIntegerBugTracker rejects non-integers as bug IDs."""
179
 
        tracker = bugtracker.UniqueIntegerBugTracker('xxx',
180
 
                'http://bugs.com/')
 
146
        tracker = bugtracker.UniqueIntegerBugTracker('xxx', 'http://bugs.com')
181
147
        self.assertRaises(
182
148
            errors.MalformedBugIdentifier, tracker.check_bug_id, 'red')
183
149
 
184
 
class TestURLParametrizedBugTracker(TestCaseWithMemoryTransport):
185
 
    """Tests for URLParametrizedBugTracker."""
 
150
 
 
151
class TestURLParametrizedIntegerBugTracker(TestCaseWithMemoryTransport):
 
152
    """Tests for TracTracker."""
186
153
 
187
154
    def setUp(self):
188
 
        super(TestURLParametrizedBugTracker, self).setUp()
 
155
        TestCaseWithMemoryTransport.setUp(self)
189
156
        self.url = 'http://twistedmatrix.com/trac'
190
 
        self.tracker = bugtracker.URLParametrizedBugTracker('some', 'ticket/')
 
157
        self.tracker = bugtracker.URLParametrizedIntegerBugTracker('some',
 
158
                                                                   'ticket/')
191
159
 
192
160
    def test_get_with_unsupported_tag(self):
193
161
        """If asked for an unrecognized or unconfigured tag, return None."""
199
167
        """If asked for a valid tag, return a tracker instance that can map bug
200
168
        IDs to <base_url>/<bug_area> + <bug_id>."""
201
169
        bugtracker.tracker_registry.register('some', self.tracker)
202
 
        self.addCleanup(bugtracker.tracker_registry.remove, 'some')
 
170
        self.addCleanup(lambda: bugtracker.tracker_registry.remove('some'))
203
171
 
204
172
        branch = self.make_branch('some_branch')
205
173
        config = branch.get_config()
209
177
            urlutils.join(self.url, 'ticket/') + '1234',
210
178
            tracker.get_bug_url('1234'))
211
179
 
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
 
        super(TestURLParametrizedIntegerBugTracker, self).setUp()
224
 
        self.url = 'http://twistedmatrix.com/trac'
225
 
        self.tracker = bugtracker.URLParametrizedIntegerBugTracker('some',
226
 
                                                                   'ticket/')
227
 
 
228
180
    def test_get_bug_url_for_bad_bug(self):
229
181
        """When given a bug identifier that is invalid for Trac, get_bug_url
230
182
        should raise an error.
231
183
        """
232
184
        self.assertRaises(
233
185
            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']))