~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_bugtracker.py

  • Committer: Vincent Ladeuil
  • Date: 2010-03-02 10:21:39 UTC
  • mfrom: (4797.2.24 2.1)
  • mto: This revision was merged to the branch mainline in revision 5069.
  • Revision ID: v.ladeuil+lp@free.fr-20100302102139-b5cba7h6xu13mekg
Merge 2.1 into trunk including fixes for #331095, #507557, #185103, #524184 and #369501

Show diffs side-by-side

added added

removed removed

Lines of Context:
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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
16
 
17
17
 
18
18
from bzrlib import bugtracker, errors, urlutils
19
 
from bzrlib.tests import TestCaseWithMemoryTransport
 
19
from bzrlib.tests import TestCase, 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(lambda:
45
 
                        bugtracker.tracker_registry.remove('transient'))
 
44
        self.addCleanup(bugtracker.tracker_registry.remove, 'transient')
46
45
 
47
46
    def test_get_bug_url_for_transient_tracker(self):
48
47
        branch = self.make_branch('some_branch')
81
80
        self.assertEqual('http://bugs.debian.org/1234',
82
81
                         tracker.get_bug_url('1234'))
83
82
 
 
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
 
84
89
    def test_trac_registered(self):
85
90
        """The Trac bug tracker should be registered by default and generate
86
91
        Trac bug page URLs when the appropriate configuration is present.
104
109
        self.assertEqual('http://bugs.com/show_bug.cgi?id=1234',
105
110
                         tracker.get_bug_url('1234'))
106
111
 
 
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_incorrect_url(self):
 
121
        branch = self.make_branch('some_branch')
 
122
        config = branch.get_config()
 
123
        config.set_user_option('bugtracker_foo_url', 'http://bugs.com/view.html')
 
124
        tracker = bugtracker.tracker_registry.get_tracker('foo', branch)
 
125
        self.assertRaises(errors.InvalidBugTrackerURL, tracker.get_bug_url, '1234')
 
126
 
107
127
 
108
128
class TestUniqueIntegerBugTracker(TestCaseWithMemoryTransport):
109
129
 
110
 
    def test_joins_id_to_base_url(self):
 
130
    def test_appends_id_to_base_url(self):
111
131
        """The URL of a bug is the base URL joined to the identifier."""
112
 
        tracker = bugtracker.UniqueIntegerBugTracker('xxx', 'http://bugs.com')
113
 
        self.assertEqual('http://bugs.com/1234', tracker.get_bug_url('1234'))
 
132
        tracker = bugtracker.UniqueIntegerBugTracker('xxx',
 
133
                'http://bugs.com/foo')
 
134
        self.assertEqual('http://bugs.com/foo1234', tracker.get_bug_url('1234'))
114
135
 
115
136
    def test_returns_tracker_if_abbreviation_matches(self):
116
137
        """The get() method should return an instance of the tracker if the
117
138
        given abbreviation matches the tracker's abbreviated name.
118
139
        """
119
 
        tracker = bugtracker.UniqueIntegerBugTracker('xxx', 'http://bugs.com')
 
140
        tracker = bugtracker.UniqueIntegerBugTracker('xxx',
 
141
                'http://bugs.com/')
120
142
        branch = self.make_branch('some_branch')
121
143
        self.assertIs(tracker, tracker.get('xxx', branch))
122
144
 
124
146
        """The get() method should return None if the given abbreviated name
125
147
        doesn't match the tracker's abbreviation.
126
148
        """
127
 
        tracker = bugtracker.UniqueIntegerBugTracker('xxx', 'http://bugs.com')
 
149
        tracker = bugtracker.UniqueIntegerBugTracker('xxx',
 
150
                'http://bugs.com/')
128
151
        branch = self.make_branch('some_branch')
129
152
        self.assertIs(None, tracker.get('yyy', branch))
130
153
 
132
155
        """A UniqueIntegerBugTracker shouldn't consult the branch for tracker
133
156
        information.
134
157
        """
135
 
        tracker = bugtracker.UniqueIntegerBugTracker('xxx', 'http://bugs.com')
 
158
        tracker = bugtracker.UniqueIntegerBugTracker('xxx',
 
159
                'http://bugs.com/')
136
160
        self.assertIs(tracker, tracker.get('xxx', None))
137
161
        self.assertIs(None, tracker.get('yyy', None))
138
162
 
139
163
    def test_check_bug_id_only_accepts_integers(self):
140
164
        """A UniqueIntegerBugTracker accepts integers as bug IDs."""
141
 
        tracker = bugtracker.UniqueIntegerBugTracker('xxx', 'http://bugs.com')
 
165
        tracker = bugtracker.UniqueIntegerBugTracker('xxx',
 
166
                'http://bugs.com/')
142
167
        tracker.check_bug_id('1234')
143
168
 
144
169
    def test_check_bug_id_doesnt_accept_non_integers(self):
145
170
        """A UniqueIntegerBugTracker rejects non-integers as bug IDs."""
146
 
        tracker = bugtracker.UniqueIntegerBugTracker('xxx', 'http://bugs.com')
 
171
        tracker = bugtracker.UniqueIntegerBugTracker('xxx',
 
172
                'http://bugs.com/')
147
173
        self.assertRaises(
148
174
            errors.MalformedBugIdentifier, tracker.check_bug_id, 'red')
149
175
 
167
193
        """If asked for a valid tag, return a tracker instance that can map bug
168
194
        IDs to <base_url>/<bug_area> + <bug_id>."""
169
195
        bugtracker.tracker_registry.register('some', self.tracker)
170
 
        self.addCleanup(lambda: bugtracker.tracker_registry.remove('some'))
 
196
        self.addCleanup(bugtracker.tracker_registry.remove, 'some')
171
197
 
172
198
        branch = self.make_branch('some_branch')
173
199
        config = branch.get_config()
183
209
        """
184
210
        self.assertRaises(
185
211
            errors.MalformedBugIdentifier, self.tracker.get_bug_url, 'bad')
 
212
 
 
213
 
 
214
class TestPropertyEncoding(TestCase):
 
215
    """Tests for how the bug URLs are encoded as revision properties."""
 
216
 
 
217
    def test_encoding_one(self):
 
218
        self.assertEqual(
 
219
            'http://example.com/bugs/1 fixed',
 
220
            bugtracker.encode_fixes_bug_urls(['http://example.com/bugs/1']))
 
221
 
 
222
    def test_encoding_zero(self):
 
223
        self.assertEqual('', bugtracker.encode_fixes_bug_urls([]))
 
224
 
 
225
    def test_encoding_two(self):
 
226
        self.assertEqual(
 
227
            'http://example.com/bugs/1 fixed\n'
 
228
            'http://example.com/bugs/2 fixed',
 
229
            bugtracker.encode_fixes_bug_urls(
 
230
                ['http://example.com/bugs/1', 'http://example.com/bugs/2']))