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

Unified 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 side-by-side diff with in-line comments
Download patch
Index: appengine/monorail/tracker/test/issuelist_test.py
diff --git a/appengine/monorail/tracker/test/issuelist_test.py b/appengine/monorail/tracker/test/issuelist_test.py
new file mode 100644
index 0000000000000000000000000000000000000000..07770c33094b62e28bc9929f33d2216c245418a6
--- /dev/null
+++ b/appengine/monorail/tracker/test/issuelist_test.py
@@ -0,0 +1,338 @@
+# Copyright 2016 The Chromium Authors. All rights reserved.
+# Use of this source code is govered by a BSD-style
+# license that can be found in the LICENSE file or at
+# https://developers.google.com/open-source/licenses/bsd
+
+"""Unit tests for issuelist module."""
+
+import unittest
+
+import settings
+from framework import permissions
+from framework import table_view_helpers
+from proto import tracker_pb2
+from proto import user_pb2
+from services import service_manager
+from testing import fake
+from testing import testing_helpers
+from tracker import issuelist
+from tracker import tablecell
+from tracker import tracker_bizobj
+from tracker import tracker_constants
+
+
+class DisplayNameMock(object):
+
+ def __init__(self, name):
+ self.display_name = name
+
+
+class IssueListUnitTest(unittest.TestCase):
+
+ def testGatherPageData(self):
+ # TODO(jrobbins): write tests for this method.
+ pass
+
+ def testGetGridViewData(self):
+ # TODO(jrobbins): write tests for this method.
+ pass
+
+ def testGetTableViewData(self):
+ # TODO(jrobbins): write tests for this method.
+ pass
+
+ def testGatherHelpData_GridSwitchesToIDs(self):
+ services = service_manager.Services()
+ servlet = issuelist.IssueList('req', 'res', services=services)
+ mr = testing_helpers.MakeMonorailRequest()
+ page_data = {'results': [1, 2, 3]}
+
+ # Don't show cue if in issue list mode (the default).
+ help_data = servlet.GatherHelpData(mr, page_data)
+ self.assertNotEqual('showing_ids_instead_of_tiles', help_data['cue'])
+
+ mr.mode = 'grid'
+ # Don't show cue if showing already IDs (the default).
+ help_data = servlet.GatherHelpData(mr, page_data)
+ self.assertNotEqual('showing_ids_instead_of_tiles', help_data['cue'])
+
+ mr.cells = 'counts'
+ # Don't show cue if showing counts.
+ help_data = servlet.GatherHelpData(mr, page_data)
+ self.assertNotEqual('showing_ids_instead_of_tiles', help_data['cue'])
+
+ mr.cells = 'tiles'
+ # Don't show cue if there were <= 1000 results
+ help_data = servlet.GatherHelpData(mr, page_data)
+ self.assertNotEqual('showing_ids_instead_of_tiles', help_data['cue'])
+
+ # Show cue if there are more than 1000 results
+ page_data = {'results': [1] * (settings.max_tiles_in_grid + 1)}
+ help_data = servlet.GatherHelpData(mr, page_data)
+ self.assertEqual('showing_ids_instead_of_tiles', help_data['cue'])
+
+ def testGatherHelpData_KeystrokeHelp(self):
+ services = service_manager.Services()
+ servlet = issuelist.IssueList('req', 'res', services=services)
+ mr = testing_helpers.MakeMonorailRequest()
+
+ page_data = {'table_data': []}
+
+ # Owners and members see a cue to try "?" to see keyboard shortcuts.
+ mr.perms = permissions.OWNER_ACTIVE_PERMISSIONSET
+ help_data = servlet.GatherHelpData(mr, page_data)
+ self.assertEqual('dit_keystrokes', help_data['cue'])
+ mr.perms = permissions.COMMITTER_ACTIVE_PERMISSIONSET
+ help_data = servlet.GatherHelpData(mr, page_data)
+ self.assertEqual('dit_keystrokes', help_data['cue'])
+
+ # Non-members do not see the cue.
+ mr.perms = permissions.USER_PERMISSIONSET
+ help_data = servlet.GatherHelpData(mr, page_data)
+ self.assertEqual(None, help_data['cue'])
+
+ def testGatherHelpData_ItalicsMeanDerived(self):
+ services = service_manager.Services()
+ servlet = issuelist.IssueList('req', 'res', services=services)
+ mr = testing_helpers.MakeMonorailRequest()
+
+ page_data = {'table_data': []}
+
+ cell = table_view_helpers.TableCell(
+ table_view_helpers.CELL_TYPE_ATTR, [1, 2, 3],
+ derived_values=[4, 5, 6])
+ page_data_with_derived = {
+ 'table_data': [table_view_helpers.TableRow([cell], True)]
+ }
+
+ # Owners and members see a cue about italics, iff there are any
+ # derived values shown in the list.
+ mr.perms = permissions.OWNER_ACTIVE_PERMISSIONSET
+ help_data = servlet.GatherHelpData(mr, page_data_with_derived)
+ self.assertEqual('italics_mean_derived', help_data['cue'])
+ help_data = servlet.GatherHelpData(mr, page_data)
+ self.assertNotEqual('italics_mean_derived', help_data['cue'])
+ mr.perms = permissions.COMMITTER_ACTIVE_PERMISSIONSET
+ help_data = servlet.GatherHelpData(mr, page_data_with_derived)
+ self.assertEqual('italics_mean_derived', help_data['cue'])
+ help_data = servlet.GatherHelpData(mr, page_data)
+ self.assertNotEqual('italics_mean_derived', help_data['cue'])
+
+ # Non-members do not see the cue.
+ mr.perms = permissions.USER_PERMISSIONSET
+ help_data = servlet.GatherHelpData(mr, page_data_with_derived)
+ self.assertNotEqual('italics_mean_derived', help_data['cue'])
+
+
+CELL_FACTORIES = {
+ 'id': tablecell.TableCellID,
+ 'summary': table_view_helpers.TableCellSummary,
+ 'status': tablecell.TableCellStatus,
+ 'owner': tablecell.TableCellOwner,
+ }
+
+
+class IssueListFunctionsTest(unittest.TestCase):
+
+ def setUp(self):
+ self.config = tracker_bizobj.MakeDefaultProjectIssueConfig(789)
+
+ def testAnyDerivedValues(self):
+ cell1 = table_view_helpers.TableCell(
+ table_view_helpers.CELL_TYPE_SUMMARY, ['this is a summary'])
+ cell2 = table_view_helpers.TableCell(
+ table_view_helpers.CELL_TYPE_ATTR, ['value'],
+ derived_values=['derived'])
+
+ table_data = [
+ table_view_helpers.TableRow([cell1], False),
+ table_view_helpers.TableRow([], False)]
+ self.assertFalse(issuelist._AnyDerivedValues(table_data))
+
+ table_data = [
+ table_view_helpers.TableRow([cell1, cell2], False),
+ table_view_helpers.TableRow([], False)]
+ self.assertTrue(issuelist._AnyDerivedValues(table_data))
+
+ def testMakeTableData_Normal(self):
+ issue = fake.MakeTestIssue(
+ 789, 123, 'summary', 'New', 0,
+ labels=['Type-Defect', 'Priority-Medium'])
+ issue.project_name = 'proj'
+ visible_results = [issue]
+
+ # Standard columns
+ lower_columns = _GetColumns()
+ table_data = issuelist._MakeTableData(
+ visible_results, None, [], lower_columns, [], {}, CELL_FACTORIES, {},
+ self.config)
+ self.assertEqual(1, len(table_data))
+ row = table_data[0]
+ self.assertEqual(len(lower_columns), len(row.cells))
+ self.assertEqual([], row.group.cells)
+
+ # Also test row info that we pass to JS code.
+ self.assertEqual(123, row.local_id)
+ self.assertEqual('proj', row.project_name)
+ self.assertEqual('proj:123', row.issue_ref)
+ self.assertEqual('/p/proj/issues/detail?id=123', row.issue_url)
+
+ # 2 columns -> 2 cells with 1 value in each cell.
+ lower_columns = ['type', 'priority']
+ table_data = issuelist._MakeTableData(
+ visible_results, None, [], lower_columns, [], {}, CELL_FACTORIES, {},
+ self.config)
+ self.assertEqual(1, len(table_data))
+ row = table_data[0]
+ self.assertEqual(len(lower_columns), len(row.cells))
+ self.assertEqual(0, row.cells[0].col_index)
+ self.assertEqual(1, len(row.cells[0].values))
+ self.assertEqual('Defect', row.cells[0].values[0].item)
+ self.assertEqual(1, row.cells[1].col_index)
+ self.assertEqual(1, len(row.cells[1].values))
+ self.assertEqual('Medium', row.cells[1].values[0].item)
+ self.assertEqual([], row.group.cells)
+
+ def testMakeTableData_Combined(self):
+ issue = fake.MakeTestIssue(
+ 789, 1, 'summary', 'New', 0, labels=['Type-Defect', 'Priority-Medium'])
+ visible_results = [issue]
+
+ # A combined column -> 1 cell with 2 values in it.
+ lower_columns = ['type/priority']
+ table_data = issuelist._MakeTableData(
+ visible_results, None, [], lower_columns, [], {}, CELL_FACTORIES, {},
+ self.config)
+ self.assertEqual(1, len(table_data))
+ row = table_data[0]
+ self.assertEqual(len(lower_columns), len(row.cells))
+ self.assertEqual(0, row.cells[0].col_index)
+ self.assertEqual(2, len(row.cells[0].values))
+ self.assertEqual('Defect', row.cells[0].values[0].item)
+ self.assertEqual('Medium', row.cells[0].values[1].item)
+ self.assertEqual([], row.group.cells)
+
+ def testMakeTableData_GroupBy(self):
+ issue = fake.MakeTestIssue(
+ 789, 1, 'summary', 'New', 0, labels=['Type-Defect', 'Priority-Medium'])
+ visible_results = [issue]
+
+ # 2 columns -> 2 cells with 1 value in each cell, row is part of a 1-row
+ # group of issues with type=defect.
+ lower_columns = ['type', 'priority']
+ table_data = issuelist._MakeTableData(
+ visible_results, None, [], lower_columns, ['type'], {}, CELL_FACTORIES,
+ {}, self.config)
+ self.assertEqual(1, len(table_data))
+ row = table_data[0]
+ self.assertEqual(len(lower_columns), len(row.cells))
+ self.assertEqual(0, row.cells[0].col_index)
+ self.assertEqual(1, len(row.cells[0].values))
+ self.assertEqual('Defect', row.cells[0].values[0].item)
+ self.assertEqual(1, row.cells[1].col_index)
+ self.assertEqual(1, len(row.cells[1].values))
+ self.assertEqual('Medium', row.cells[1].values[0].item)
+ self.assertEqual(1, len(row.group.cells))
+ self.assertEqual('Defect', row.group.cells[0].values[0].item)
+
+ def testGetStarredIssues_Anon(self):
+ services = service_manager.Services(issue_star=fake.IssueStarService())
+ mr = testing_helpers.MakeMonorailRequest()
+
+ self.assertEqual(set(), issuelist._GetStarredIssues(
+ mr.cnxn, mr.auth.user_id, services))
+
+ def testGetStarredIssues_SignedIn(self):
+ services = service_manager.Services(
+ config=fake.ConfigService(),
+ issue=fake.IssueService(),
+ user=fake.UserService(),
+ issue_star=fake.IssueStarService())
+ project = fake.Project(project_name='proj', project_id=789)
+ mr = testing_helpers.MakeMonorailRequest(
+ project=project, user_info={'user_id': 111L})
+
+ # User has not starred anything yet.
+ self.assertEqual(set(), issuelist._GetStarredIssues(
+ mr.cnxn, mr.auth.user_id, services))
+
+ # User starred 2 issues in 1 project. Other users have also starred stuff.
+ cnxn = 'fake connection'
+ config = services.config.GetProjectConfig(cnxn, project.project_id)
+ services.issue_star.SetStar(
+ cnxn, services, config, 100001, 111L, True)
+ services.issue_star.SetStar(
+ cnxn, services, config, 100002, 111L, True)
+ services.issue_star.SetStar(
+ cnxn, services, config, 100002, 111L, True)
+ services.issue_star.SetStar(
+ cnxn, services, config, 100099, 999L, True)
+ self.assertEqual(
+ {100001, 100002},
+ issuelist._GetStarredIssues(mr.cnxn, mr.auth.user_id, services))
+
+ def testGetStarredIssues_CrossProject(self):
+ services = service_manager.Services(
+ config=fake.ConfigService(),
+ issue=fake.IssueService(),
+ issue_star=fake.IssueStarService())
+ project = fake.Project(project_name='proj', project_id=789)
+ mr = testing_helpers.MakeMonorailRequest(
+ project=project, user_info={'user_id': 111L})
+ mr.query = 'project=proj,otherproj'
+
+ # User has not starred anything yet.
+ self.assertEqual(set(), issuelist._GetStarredIssues(
+ mr.cnxn, mr.auth.user_id, services))
+
+ # User starred 2 issues in 1 project, and 1 in another project.
+ # Other users have also starred stuff.
+ cnxn = 'fake connection'
+ config = services.config.GetProjectConfig(cnxn, project.project_id)
+ services.issue_star.SetStar(
+ cnxn, services, config, 100001, 111L, True)
+ services.issue_star.SetStar(
+ cnxn, services, config, 100002, 111L, True)
+ services.issue_star.SetStar(
+ cnxn, services, config, 100002, 999L, True)
+ services.issue_star.SetStar(
+ cnxn, services, config, 100099, 999L, True)
+ services.issue_star.SetStar(
+ cnxn, services, config, 200001, 111L, True)
+ services.issue_star.SetStar(
+ cnxn, services, config, 200001, 999L, True)
+ services.issue_star.SetStar(
+ cnxn, services, config, 200099, 999L, True)
+ self.assertEqual(
+ {100001, 100002, 200001},
+ issuelist._GetStarredIssues(mr.cnxn, mr.auth.user_id, services))
+
+ def testShouldPreviewOnHover(self):
+ saved_flag = settings.enable_quick_edit
+ user = user_pb2.User()
+
+ settings.enable_quick_edit = True
+ user.preview_on_hover = True
+ self.assertTrue(issuelist._ShouldPreviewOnHover(user))
+ user.preview_on_hover = False
+ self.assertFalse(issuelist._ShouldPreviewOnHover(user))
+
+ settings.enable_quick_edit = False
+ user.preview_on_hover = True
+ self.assertFalse(issuelist._ShouldPreviewOnHover(user))
+ user.preview_on_hover = False
+ self.assertFalse(issuelist._ShouldPreviewOnHover(user))
+
+ settings.enable_quick_edit = saved_flag
+
+
+def _GetColumns():
+ """Return a list of all well known column names."""
+
+ columns = tracker_constants.DEFAULT_COL_SPEC.split()
+ columns.extend(tracker_constants.OTHER_BUILT_IN_COLS)
+ return [c.lower() for c in columns]
+
+
+if __name__ == '__main__':
+ unittest.main()
« 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