Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(26)

Side by Side Diff: infra/services/builder_alerts/test/crbug_issues_test.py

Issue 2134193002: Remove codesite bug tracker support from builder_alerts and chromium-try-flakes (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: Update tests Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « infra/services/builder_alerts/crbug_issues.py ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright 2015 The Chromium Authors. All rights reserved. 1 # Copyright 2015 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 import datetime 5 import datetime
6 import json 6 import json
7 import mock 7 import mock
8 import unittest 8 import unittest
9 9
10 from infra.services.builder_alerts import crbug_issues 10 from infra.services.builder_alerts import crbug_issues
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
92 'sheriff-foobar': 'foobar'}), 92 'sheriff-foobar': 'foobar'}),
93 ] 93 ]
94 for patcher in self._patchers: 94 for patcher in self._patchers:
95 patcher.start() 95 patcher.start()
96 96
97 def tearDown(self): 97 def tearDown(self):
98 for patcher in self._patchers: 98 for patcher in self._patchers:
99 patcher.stop() 99 patcher.stop()
100 100
101 def test_correctly_sorts_issues_by_tree(self): 101 def test_correctly_sorts_issues_by_tree(self):
102 issues_by_tree = crbug_issues.query('test-account.json', False) 102 issues_by_tree = crbug_issues.query('test-account.json')
103 self.assertEqual(sorted(issues_by_tree.keys()), 103 self.assertEqual(sorted(issues_by_tree.keys()),
104 ['chromium', 'foobar', 'trooper']) 104 ['chromium', 'foobar', 'trooper'])
105 self.assertEqual(len(issues_by_tree['chromium']), 1) 105 self.assertEqual(len(issues_by_tree['chromium']), 1)
106 self.assertEqual(len(issues_by_tree['trooper']), 1) 106 self.assertEqual(len(issues_by_tree['trooper']), 1)
107 self.assertEqual(len(issues_by_tree['foobar']), 0) 107 self.assertEqual(len(issues_by_tree['foobar']), 0)
108 108
109 def test_retrieves_basic_issue_basic_properties(self): 109 def test_retrieves_basic_issue_basic_properties(self):
110 issues_by_tree = crbug_issues.query('test-account.json', False) 110 issues_by_tree = crbug_issues.query('test-account.json')
111 issue = issues_by_tree['chromium'][0] 111 issue = issues_by_tree['chromium'][0]
112 self.assertEqual(issue.get('key'), 'crbug_issue_id:123456') 112 self.assertEqual(issue.get('key'), 'crbug_issue_id:123456')
113 self.assertEqual(issue.get('title'), 'TestTitle') 113 self.assertEqual(issue.get('title'), 'TestTitle')
114 self.assertEqual(issue.get('body'), '') 114 self.assertEqual(issue.get('body'), '')
115 self.assertEqual( 115 self.assertEqual(
116 issue.get('links'), 116 issue.get('links'),
117 [{'title': 'crbug.com/123456', 'href': 'https://crbug.com/123456'}]) 117 [{'title': 'crbug.com/123456', 'href': 'https://crbug.com/123456'}])
118 self.assertEqual(issue.get('start_time'), '2015-10-01T22:59:56.000Z') 118 self.assertEqual(issue.get('start_time'), '2015-10-01T22:59:56.000Z')
119 self.assertEqual(issue.get('type'), 'crbug') 119 self.assertEqual(issue.get('type'), 'crbug')
120 self.assertEqual(issue.get('severity'), 1) # highest of two priority labels 120 self.assertEqual(issue.get('severity'), 1) # highest of two priority labels
121 self.assertEqual(issue.get('tags'), ['chromium']) 121 self.assertEqual(issue.get('tags'), ['chromium'])
122 122
123 def test_reports_utctime_on_returned_issues(self): 123 def test_reports_utctime_on_returned_issues(self):
124 # Mock built-in datetime.datetime.utcnow manually. See 124 # Mock built-in datetime.datetime.utcnow manually. See
125 # http://stackoverflow.com/q/4481954 for more details why. 125 # http://stackoverflow.com/q/4481954 for more details why.
126 class MockDateTime(datetime.datetime): 126 class MockDateTime(datetime.datetime):
127 @classmethod 127 @classmethod
128 def utcnow(cls): 128 def utcnow(cls):
129 return datetime.datetime(2015, 10, 2, 22, 0, 0) 129 return datetime.datetime(2015, 10, 2, 22, 0, 0)
130 old_datetime = datetime.datetime 130 old_datetime = datetime.datetime
131 datetime.datetime = MockDateTime 131 datetime.datetime = MockDateTime
132 132
133 issues_by_tree = crbug_issues.query('test-account.json', False) 133 issues_by_tree = crbug_issues.query('test-account.json')
134 issue = issues_by_tree['chromium'][0] 134 issue = issues_by_tree['chromium'][0]
135 self.assertEqual(issue.get('time'), '2015-10-02T22:00:00Z') 135 self.assertEqual(issue.get('time'), '2015-10-02T22:00:00Z')
136 136
137 datetime.datetime = old_datetime 137 datetime.datetime = old_datetime
138 138
139 def test_parses_tags_correctly(self): 139 def test_parses_tags_correctly(self):
140 issues_by_tree = crbug_issues.query('test-account.json', False) 140 issues_by_tree = crbug_issues.query('test-account.json')
141 issue = issues_by_tree['trooper'][0] 141 issue = issues_by_tree['trooper'][0]
142 self.assertEqual(issue.get('tags'), ['trooper']) 142 self.assertEqual(issue.get('tags'), ['trooper'])
143 143
144 def test_correct_severity_for_issues_with_no_priority(self): 144 def test_correct_severity_for_issues_with_no_priority(self):
145 issues_by_tree = crbug_issues.query('test-account.json', False) 145 issues_by_tree = crbug_issues.query('test-account.json')
146 issue = issues_by_tree['trooper'][0] 146 issue = issues_by_tree['trooper'][0]
147 self.assertIsNone(issue.get('severity')) 147 self.assertIsNone(issue.get('severity'))
148 148
149 149
150 class CrbugIssuesListTest(unittest.TestCase): 150 class CrbugIssuesListTest(unittest.TestCase):
151 def setUp(self): 151 def setUp(self):
152 crbug_service_mock = mock.Mock() 152 crbug_service_mock = mock.Mock()
153 issues_mock = crbug_service_mock.issues.return_value 153 issues_mock = crbug_service_mock.issues.return_value
154 self.list_mock = issues_mock.list.return_value 154 self.list_mock = issues_mock.list.return_value
155 155
156 self._patchers = [ 156 self._patchers = [
157 mock.patch.object(crbug_issues, '_build_crbug_service', 157 mock.patch.object(crbug_issues, '_build_crbug_service',
158 lambda _csa, _um: crbug_service_mock), 158 lambda _csa: crbug_service_mock),
159 # Tests below expect only a single sequence of calls to issue tracker 159 # Tests below expect only a single sequence of calls to issue tracker
160 # API iterating over all issues, so we mock whitelisted labels to only 160 # API iterating over all issues, so we mock whitelisted labels to only
161 # contain a single entry. 161 # contain a single entry.
162 mock.patch.object(crbug_issues, 'WHITELISTED_LABELS', 162 mock.patch.object(crbug_issues, 'WHITELISTED_LABELS',
163 {'sheriff-chromium': 'chromium'}), 163 {'sheriff-chromium': 'chromium'}),
164 ] 164 ]
165 for patcher in self._patchers: 165 for patcher in self._patchers:
166 patcher.start() 166 patcher.start()
167 167
168 def tearDown(self): 168 def tearDown(self):
169 for patcher in self._patchers: 169 for patcher in self._patchers:
170 patcher.stop() 170 patcher.stop()
171 171
172 def test_correctly_stops_on_no_results(self): 172 def test_correctly_stops_on_no_results(self):
173 self.list_mock.execute.side_effect = [ 173 self.list_mock.execute.side_effect = [
174 {'items': [{'id': 1}, {'id': 2}, {'id': 3}]}, 174 {'items': [{'id': 1}, {'id': 2}, {'id': 3}]},
175 {}, 175 {},
176 {'items': [{'id': 4}]}, 176 {'items': [{'id': 4}]},
177 ] 177 ]
178 178
179 issues = crbug_issues._list_issues('test-account.json', False) 179 issues = crbug_issues._list_issues('test-account.json')
180 self.assertEqual(len(issues), 3) 180 self.assertEqual(len(issues), 3)
181 181
182 def test_correctly_stops_on_empty_results(self): 182 def test_correctly_stops_on_empty_results(self):
183 self.list_mock.execute.side_effect = [ 183 self.list_mock.execute.side_effect = [
184 {'items': [{'id': 1}, {'id': 2}, {'id': 3}]}, 184 {'items': [{'id': 1}, {'id': 2}, {'id': 3}]},
185 {'items': []}, 185 {'items': []},
186 {'items': [{'id': 4}]}, 186 {'items': [{'id': 4}]},
187 ] 187 ]
188 188
189 issues = crbug_issues._list_issues('test-account.json', False) 189 issues = crbug_issues._list_issues('test-account.json')
190 self.assertEqual(len(issues), 3) 190 self.assertEqual(len(issues), 3)
191 191
192 def test_correctly_deduplicates_results(self): 192 def test_correctly_deduplicates_results(self):
193 self.list_mock.execute.side_effect = [ 193 self.list_mock.execute.side_effect = [
194 {'items': [{'id': 1}, {'id': 2}, {'id': 3}]}, 194 {'items': [{'id': 1}, {'id': 2}, {'id': 3}]},
195 {'items': [{'id': 2}, {'id': 3}, {'id': 4}]}, 195 {'items': [{'id': 2}, {'id': 3}, {'id': 4}]},
196 {}, 196 {},
197 ] 197 ]
198 198
199 issues = crbug_issues._list_issues('test-account.json', False) 199 issues = crbug_issues._list_issues('test-account.json')
200 self.assertEqual(len(issues), 4) 200 self.assertEqual(len(issues), 4)
201 self.assertEqual([1, 2, 3, 4], [issue['id'] for issue in issues]) 201 self.assertEqual([1, 2, 3, 4], [issue['id'] for issue in issues])
OLDNEW
« no previous file with comments | « infra/services/builder_alerts/crbug_issues.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698