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

Side by Side Diff: appengine/monorail/tracker/test/issuelist_test.py

Issue 1868553004: Open Source Monorail (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: Rebase Created 4 years, 8 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
OLDNEW
(Empty)
1 # Copyright 2016 The Chromium Authors. All rights reserved.
2 # Use of this source code is govered by a BSD-style
3 # license that can be found in the LICENSE file or at
4 # https://developers.google.com/open-source/licenses/bsd
5
6 """Unit tests for issuelist module."""
7
8 import unittest
9
10 import settings
11 from framework import permissions
12 from framework import table_view_helpers
13 from proto import tracker_pb2
14 from proto import user_pb2
15 from services import service_manager
16 from testing import fake
17 from testing import testing_helpers
18 from tracker import issuelist
19 from tracker import tablecell
20 from tracker import tracker_bizobj
21 from tracker import tracker_constants
22
23
24 class DisplayNameMock(object):
25
26 def __init__(self, name):
27 self.display_name = name
28
29
30 class IssueListUnitTest(unittest.TestCase):
31
32 def testGatherPageData(self):
33 # TODO(jrobbins): write tests for this method.
34 pass
35
36 def testGetGridViewData(self):
37 # TODO(jrobbins): write tests for this method.
38 pass
39
40 def testGetTableViewData(self):
41 # TODO(jrobbins): write tests for this method.
42 pass
43
44 def testGatherHelpData_GridSwitchesToIDs(self):
45 services = service_manager.Services()
46 servlet = issuelist.IssueList('req', 'res', services=services)
47 mr = testing_helpers.MakeMonorailRequest()
48 page_data = {'results': [1, 2, 3]}
49
50 # Don't show cue if in issue list mode (the default).
51 help_data = servlet.GatherHelpData(mr, page_data)
52 self.assertNotEqual('showing_ids_instead_of_tiles', help_data['cue'])
53
54 mr.mode = 'grid'
55 # Don't show cue if showing already IDs (the default).
56 help_data = servlet.GatherHelpData(mr, page_data)
57 self.assertNotEqual('showing_ids_instead_of_tiles', help_data['cue'])
58
59 mr.cells = 'counts'
60 # Don't show cue if showing counts.
61 help_data = servlet.GatherHelpData(mr, page_data)
62 self.assertNotEqual('showing_ids_instead_of_tiles', help_data['cue'])
63
64 mr.cells = 'tiles'
65 # Don't show cue if there were <= 1000 results
66 help_data = servlet.GatherHelpData(mr, page_data)
67 self.assertNotEqual('showing_ids_instead_of_tiles', help_data['cue'])
68
69 # Show cue if there are more than 1000 results
70 page_data = {'results': [1] * (settings.max_tiles_in_grid + 1)}
71 help_data = servlet.GatherHelpData(mr, page_data)
72 self.assertEqual('showing_ids_instead_of_tiles', help_data['cue'])
73
74 def testGatherHelpData_KeystrokeHelp(self):
75 services = service_manager.Services()
76 servlet = issuelist.IssueList('req', 'res', services=services)
77 mr = testing_helpers.MakeMonorailRequest()
78
79 page_data = {'table_data': []}
80
81 # Owners and members see a cue to try "?" to see keyboard shortcuts.
82 mr.perms = permissions.OWNER_ACTIVE_PERMISSIONSET
83 help_data = servlet.GatherHelpData(mr, page_data)
84 self.assertEqual('dit_keystrokes', help_data['cue'])
85 mr.perms = permissions.COMMITTER_ACTIVE_PERMISSIONSET
86 help_data = servlet.GatherHelpData(mr, page_data)
87 self.assertEqual('dit_keystrokes', help_data['cue'])
88
89 # Non-members do not see the cue.
90 mr.perms = permissions.USER_PERMISSIONSET
91 help_data = servlet.GatherHelpData(mr, page_data)
92 self.assertEqual(None, help_data['cue'])
93
94 def testGatherHelpData_ItalicsMeanDerived(self):
95 services = service_manager.Services()
96 servlet = issuelist.IssueList('req', 'res', services=services)
97 mr = testing_helpers.MakeMonorailRequest()
98
99 page_data = {'table_data': []}
100
101 cell = table_view_helpers.TableCell(
102 table_view_helpers.CELL_TYPE_ATTR, [1, 2, 3],
103 derived_values=[4, 5, 6])
104 page_data_with_derived = {
105 'table_data': [table_view_helpers.TableRow([cell], True)]
106 }
107
108 # Owners and members see a cue about italics, iff there are any
109 # derived values shown in the list.
110 mr.perms = permissions.OWNER_ACTIVE_PERMISSIONSET
111 help_data = servlet.GatherHelpData(mr, page_data_with_derived)
112 self.assertEqual('italics_mean_derived', help_data['cue'])
113 help_data = servlet.GatherHelpData(mr, page_data)
114 self.assertNotEqual('italics_mean_derived', help_data['cue'])
115 mr.perms = permissions.COMMITTER_ACTIVE_PERMISSIONSET
116 help_data = servlet.GatherHelpData(mr, page_data_with_derived)
117 self.assertEqual('italics_mean_derived', help_data['cue'])
118 help_data = servlet.GatherHelpData(mr, page_data)
119 self.assertNotEqual('italics_mean_derived', help_data['cue'])
120
121 # Non-members do not see the cue.
122 mr.perms = permissions.USER_PERMISSIONSET
123 help_data = servlet.GatherHelpData(mr, page_data_with_derived)
124 self.assertNotEqual('italics_mean_derived', help_data['cue'])
125
126
127 CELL_FACTORIES = {
128 'id': tablecell.TableCellID,
129 'summary': table_view_helpers.TableCellSummary,
130 'status': tablecell.TableCellStatus,
131 'owner': tablecell.TableCellOwner,
132 }
133
134
135 class IssueListFunctionsTest(unittest.TestCase):
136
137 def setUp(self):
138 self.config = tracker_bizobj.MakeDefaultProjectIssueConfig(789)
139
140 def testAnyDerivedValues(self):
141 cell1 = table_view_helpers.TableCell(
142 table_view_helpers.CELL_TYPE_SUMMARY, ['this is a summary'])
143 cell2 = table_view_helpers.TableCell(
144 table_view_helpers.CELL_TYPE_ATTR, ['value'],
145 derived_values=['derived'])
146
147 table_data = [
148 table_view_helpers.TableRow([cell1], False),
149 table_view_helpers.TableRow([], False)]
150 self.assertFalse(issuelist._AnyDerivedValues(table_data))
151
152 table_data = [
153 table_view_helpers.TableRow([cell1, cell2], False),
154 table_view_helpers.TableRow([], False)]
155 self.assertTrue(issuelist._AnyDerivedValues(table_data))
156
157 def testMakeTableData_Normal(self):
158 issue = fake.MakeTestIssue(
159 789, 123, 'summary', 'New', 0,
160 labels=['Type-Defect', 'Priority-Medium'])
161 issue.project_name = 'proj'
162 visible_results = [issue]
163
164 # Standard columns
165 lower_columns = _GetColumns()
166 table_data = issuelist._MakeTableData(
167 visible_results, None, [], lower_columns, [], {}, CELL_FACTORIES, {},
168 self.config)
169 self.assertEqual(1, len(table_data))
170 row = table_data[0]
171 self.assertEqual(len(lower_columns), len(row.cells))
172 self.assertEqual([], row.group.cells)
173
174 # Also test row info that we pass to JS code.
175 self.assertEqual(123, row.local_id)
176 self.assertEqual('proj', row.project_name)
177 self.assertEqual('proj:123', row.issue_ref)
178 self.assertEqual('/p/proj/issues/detail?id=123', row.issue_url)
179
180 # 2 columns -> 2 cells with 1 value in each cell.
181 lower_columns = ['type', 'priority']
182 table_data = issuelist._MakeTableData(
183 visible_results, None, [], lower_columns, [], {}, CELL_FACTORIES, {},
184 self.config)
185 self.assertEqual(1, len(table_data))
186 row = table_data[0]
187 self.assertEqual(len(lower_columns), len(row.cells))
188 self.assertEqual(0, row.cells[0].col_index)
189 self.assertEqual(1, len(row.cells[0].values))
190 self.assertEqual('Defect', row.cells[0].values[0].item)
191 self.assertEqual(1, row.cells[1].col_index)
192 self.assertEqual(1, len(row.cells[1].values))
193 self.assertEqual('Medium', row.cells[1].values[0].item)
194 self.assertEqual([], row.group.cells)
195
196 def testMakeTableData_Combined(self):
197 issue = fake.MakeTestIssue(
198 789, 1, 'summary', 'New', 0, labels=['Type-Defect', 'Priority-Medium'])
199 visible_results = [issue]
200
201 # A combined column -> 1 cell with 2 values in it.
202 lower_columns = ['type/priority']
203 table_data = issuelist._MakeTableData(
204 visible_results, None, [], lower_columns, [], {}, CELL_FACTORIES, {},
205 self.config)
206 self.assertEqual(1, len(table_data))
207 row = table_data[0]
208 self.assertEqual(len(lower_columns), len(row.cells))
209 self.assertEqual(0, row.cells[0].col_index)
210 self.assertEqual(2, len(row.cells[0].values))
211 self.assertEqual('Defect', row.cells[0].values[0].item)
212 self.assertEqual('Medium', row.cells[0].values[1].item)
213 self.assertEqual([], row.group.cells)
214
215 def testMakeTableData_GroupBy(self):
216 issue = fake.MakeTestIssue(
217 789, 1, 'summary', 'New', 0, labels=['Type-Defect', 'Priority-Medium'])
218 visible_results = [issue]
219
220 # 2 columns -> 2 cells with 1 value in each cell, row is part of a 1-row
221 # group of issues with type=defect.
222 lower_columns = ['type', 'priority']
223 table_data = issuelist._MakeTableData(
224 visible_results, None, [], lower_columns, ['type'], {}, CELL_FACTORIES,
225 {}, self.config)
226 self.assertEqual(1, len(table_data))
227 row = table_data[0]
228 self.assertEqual(len(lower_columns), len(row.cells))
229 self.assertEqual(0, row.cells[0].col_index)
230 self.assertEqual(1, len(row.cells[0].values))
231 self.assertEqual('Defect', row.cells[0].values[0].item)
232 self.assertEqual(1, row.cells[1].col_index)
233 self.assertEqual(1, len(row.cells[1].values))
234 self.assertEqual('Medium', row.cells[1].values[0].item)
235 self.assertEqual(1, len(row.group.cells))
236 self.assertEqual('Defect', row.group.cells[0].values[0].item)
237
238 def testGetStarredIssues_Anon(self):
239 services = service_manager.Services(issue_star=fake.IssueStarService())
240 mr = testing_helpers.MakeMonorailRequest()
241
242 self.assertEqual(set(), issuelist._GetStarredIssues(
243 mr.cnxn, mr.auth.user_id, services))
244
245 def testGetStarredIssues_SignedIn(self):
246 services = service_manager.Services(
247 config=fake.ConfigService(),
248 issue=fake.IssueService(),
249 user=fake.UserService(),
250 issue_star=fake.IssueStarService())
251 project = fake.Project(project_name='proj', project_id=789)
252 mr = testing_helpers.MakeMonorailRequest(
253 project=project, user_info={'user_id': 111L})
254
255 # User has not starred anything yet.
256 self.assertEqual(set(), issuelist._GetStarredIssues(
257 mr.cnxn, mr.auth.user_id, services))
258
259 # User starred 2 issues in 1 project. Other users have also starred stuff.
260 cnxn = 'fake connection'
261 config = services.config.GetProjectConfig(cnxn, project.project_id)
262 services.issue_star.SetStar(
263 cnxn, services, config, 100001, 111L, True)
264 services.issue_star.SetStar(
265 cnxn, services, config, 100002, 111L, True)
266 services.issue_star.SetStar(
267 cnxn, services, config, 100002, 111L, True)
268 services.issue_star.SetStar(
269 cnxn, services, config, 100099, 999L, True)
270 self.assertEqual(
271 {100001, 100002},
272 issuelist._GetStarredIssues(mr.cnxn, mr.auth.user_id, services))
273
274 def testGetStarredIssues_CrossProject(self):
275 services = service_manager.Services(
276 config=fake.ConfigService(),
277 issue=fake.IssueService(),
278 issue_star=fake.IssueStarService())
279 project = fake.Project(project_name='proj', project_id=789)
280 mr = testing_helpers.MakeMonorailRequest(
281 project=project, user_info={'user_id': 111L})
282 mr.query = 'project=proj,otherproj'
283
284 # User has not starred anything yet.
285 self.assertEqual(set(), issuelist._GetStarredIssues(
286 mr.cnxn, mr.auth.user_id, services))
287
288 # User starred 2 issues in 1 project, and 1 in another project.
289 # Other users have also starred stuff.
290 cnxn = 'fake connection'
291 config = services.config.GetProjectConfig(cnxn, project.project_id)
292 services.issue_star.SetStar(
293 cnxn, services, config, 100001, 111L, True)
294 services.issue_star.SetStar(
295 cnxn, services, config, 100002, 111L, True)
296 services.issue_star.SetStar(
297 cnxn, services, config, 100002, 999L, True)
298 services.issue_star.SetStar(
299 cnxn, services, config, 100099, 999L, True)
300 services.issue_star.SetStar(
301 cnxn, services, config, 200001, 111L, True)
302 services.issue_star.SetStar(
303 cnxn, services, config, 200001, 999L, True)
304 services.issue_star.SetStar(
305 cnxn, services, config, 200099, 999L, True)
306 self.assertEqual(
307 {100001, 100002, 200001},
308 issuelist._GetStarredIssues(mr.cnxn, mr.auth.user_id, services))
309
310 def testShouldPreviewOnHover(self):
311 saved_flag = settings.enable_quick_edit
312 user = user_pb2.User()
313
314 settings.enable_quick_edit = True
315 user.preview_on_hover = True
316 self.assertTrue(issuelist._ShouldPreviewOnHover(user))
317 user.preview_on_hover = False
318 self.assertFalse(issuelist._ShouldPreviewOnHover(user))
319
320 settings.enable_quick_edit = False
321 user.preview_on_hover = True
322 self.assertFalse(issuelist._ShouldPreviewOnHover(user))
323 user.preview_on_hover = False
324 self.assertFalse(issuelist._ShouldPreviewOnHover(user))
325
326 settings.enable_quick_edit = saved_flag
327
328
329 def _GetColumns():
330 """Return a list of all well known column names."""
331
332 columns = tracker_constants.DEFAULT_COL_SPEC.split()
333 columns.extend(tracker_constants.OTHER_BUILT_IN_COLS)
334 return [c.lower() for c in columns]
335
336
337 if __name__ == '__main__':
338 unittest.main()
OLDNEW
« no previous file with comments | « appengine/monorail/tracker/test/issueimport_test.py ('k') | appengine/monorail/tracker/test/issuelistcsv_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698