blob: c63ad508d549cbd1be1c39364761d0ba9a6be9da [file] [log] [blame]
# Copyright 2016 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Unit tests for helpers module."""
from __future__ import print_function
from __future__ import division
from __future__ import absolute_import
import unittest
from features import hotlist_helpers
from features import features_constants
from framework import profiler
from framework import table_view_helpers
from framework import sorting
from services import service_manager
from testing import testing_helpers
from testing import fake
from tracker import tablecell
from tracker import tracker_bizobj
from mrproto import features_pb2
from mrproto import tracker_pb2
class HotlistTableDataTest(unittest.TestCase):
def setUp(self):
self.services = service_manager.Services(
issue=fake.IssueService(),
features=fake.FeaturesService(),
issue_star=fake.AbstractStarService(),
config=fake.ConfigService(),
project=fake.ProjectService(),
user=fake.UserService(),
cache_manager=fake.CacheManager())
self.services.project.TestAddProject('ProjectName', project_id=1)
self.services.user.TestAddUser('annajowang@email.com', 111)
self.services.user.TestAddUser('claremont@email.com', 222)
issue1 = fake.MakeTestIssue(
1, 1, 'issue_summary', 'New', 111, project_name='ProjectName')
self.services.issue.TestAddIssue(issue1)
issue2 = fake.MakeTestIssue(
1, 2, 'issue_summary2', 'New', 111, project_name='ProjectName')
self.services.issue.TestAddIssue(issue2)
issue3 = fake.MakeTestIssue(
1, 3, 'issue_summary3', 'New', 222, project_name='ProjectName')
self.services.issue.TestAddIssue(issue3)
issues = [issue1, issue2, issue3]
hotlist_items = [
(issue.issue_id, rank, 222, None, '') for
rank, issue in enumerate(issues)]
self.hotlist_items_list = [
features_pb2.MakeHotlistItem(
issue_id, rank=rank, adder_id=adder_id,
date_added=date, note=note) for (
issue_id, rank, adder_id, date, note) in hotlist_items]
self.test_hotlist = self.services.features.TestAddHotlist(
'hotlist', hotlist_id=123, owner_ids=[111],
hotlist_item_fields=hotlist_items)
sorting.InitializeArtValues(self.services)
self.mr = None
def setUpCreateHotlistTableDataTestMR(self, **kwargs):
self.mr = testing_helpers.MakeMonorailRequest(**kwargs)
self.services.user.TestAddUser('annajo@email.com', 148)
self.mr.auth.effective_ids = {148}
self.mr.col_spec = 'ID Summary Modified'
def testCreateHotlistTableData(self):
self.setUpCreateHotlistTableDataTestMR(hotlist=self.test_hotlist)
table_data, table_related_dict = hotlist_helpers.CreateHotlistTableData(
self.mr, self.hotlist_items_list, self.services)
self.assertEqual(len(table_data), 3)
start_index = 100001
for row in table_data:
self.assertEqual(row.project_name, 'ProjectName')
self.assertEqual(row.issue_id, start_index)
start_index += 1
self.assertEqual(len(table_related_dict['column_values']), 3)
# test none of the shown columns show up in unshown_columns
self.assertTrue(
set(self.mr.col_spec.split()).isdisjoint(
table_related_dict['unshown_columns']))
self.assertEqual(table_related_dict['is_cross_project'], False)
self.assertEqual(len(table_related_dict['pagination'].visible_results), 3)
def testCreateHotlistTableData_Pagination(self):
self.setUpCreateHotlistTableDataTestMR(
hotlist=self.test_hotlist, path='/123?num=2')
table_data, _ = hotlist_helpers.CreateHotlistTableData(
self.mr, self.hotlist_items_list, self.services)
self.assertEqual(len(table_data), 2)
def testCreateHotlistTableData_EndPagination(self):
self.setUpCreateHotlistTableDataTestMR(
hotlist=self.test_hotlist, path='/123?num=2&start=2')
table_data, _ = hotlist_helpers.CreateHotlistTableData(
self.mr, self.hotlist_items_list, self.services)
self.assertEqual(len(table_data), 1)
class MakeTableDataTest(unittest.TestCase):
def test_MakeTableData(self):
issues = [fake.MakeTestIssue(
789, 1, 'issue_summary', 'New', 111, project_name='ProjectName',
issue_id=1001)]
config = tracker_bizobj.MakeDefaultProjectIssueConfig(789)
cell_factories = {
'summary': table_view_helpers.TableCellSummary}
table_data = hotlist_helpers._MakeTableData(
issues, [], ['summary'], [], {} , cell_factories,
{}, set(), config, None, 29, 'stars')
self.assertEqual(len(table_data), 1)
row = table_data[0]
self.assertEqual(row.issue_id, 1001)
self.assertEqual(row.local_id, 1)
self.assertEqual(row.project_name, 'ProjectName')
self.assertEqual(row.issue_ref, 'ProjectName:1')
self.assertTrue('hotlist_id=29' in row.issue_ctx_url)
self.assertTrue('sort=stars' in row.issue_ctx_url)
class GetAllProjectsOfIssuesTest(unittest.TestCase):
issue_x_1 = tracker_pb2.Issue()
issue_x_1.project_id = 789
issue_x_2 = tracker_pb2.Issue()
issue_x_2.project_id = 789
issue_y_1 = tracker_pb2.Issue()
issue_y_1.project_id = 678
def testGetAllProjectsOfIssues_Normal(self):
issues = [self.issue_x_1, self.issue_x_2]
self.assertEqual(
hotlist_helpers.GetAllProjectsOfIssues(issues),
set([789]))
issues = [self.issue_x_1, self.issue_x_2, self.issue_y_1]
self.assertEqual(
hotlist_helpers.GetAllProjectsOfIssues(issues),
set([678, 789]))
def testGetAllProjectsOfIssues_Empty(self):
self.assertEqual(
hotlist_helpers.GetAllProjectsOfIssues([]),
set())
class HelpersUnitTest(unittest.TestCase):
# TODO(jojwang): Write Tests for GetAllConfigsOfProjects
def setUp(self):
self.services = service_manager.Services(issue=fake.IssueService(),
config=fake.ConfigService(),
project=fake.ProjectService(),
features=fake.FeaturesService(),
user=fake.UserService())
self.project = self.services.project.TestAddProject(
'ProjectName', project_id=1, owner_ids=[111])
self.services.user.TestAddUser('annajowang@email.com', 111)
self.services.user.TestAddUser('claremont@email.com', 222)
self.issue1 = fake.MakeTestIssue(
1, 1, 'issue_summary', 'New', 111,
project_name='ProjectName', labels='restrict-view-Googler')
self.services.issue.TestAddIssue(self.issue1)
self.issue3 = fake.MakeTestIssue(
1, 3, 'issue_summary3', 'New', 222, project_name='ProjectName')
self.services.issue.TestAddIssue(self.issue3)
self.issue4 = fake.MakeTestIssue(
1, 4, 'issue_summary4', 'Fixed', 222, closed_timestamp=232423,
project_name='ProjectName')
self.services.issue.TestAddIssue(self.issue4)
self.issues = [self.issue1, self.issue3, self.issue4]
self.mr = testing_helpers.MakeMonorailRequest()
def testFilterIssues(self):
test_allowed_issues = hotlist_helpers.FilterIssues(
self.mr.cnxn, self.mr.auth, 2, self.issues, self.services)
self.assertEqual(len(test_allowed_issues), 1)
self.assertEqual(test_allowed_issues[0].local_id, 3)
def testFilterIssues_ShowClosed(self):
test_allowed_issues = hotlist_helpers.FilterIssues(
self.mr.cnxn, self.mr.auth, 1, self.issues, self.services)
self.assertEqual(len(test_allowed_issues), 2)
self.assertEqual(test_allowed_issues[0].local_id, 3)
self.assertEqual(test_allowed_issues[1].local_id, 4)
def testMembersWithoutGivenIDs(self):
h = features_pb2.Hotlist()
owners, editors, followers = hotlist_helpers.MembersWithoutGivenIDs(
h, set())
# Check lists are empty
self.assertFalse(owners)
self.assertFalse(editors)
self.assertFalse(followers)
h.owner_ids.extend([1, 2, 3])
h.editor_ids.extend([4, 5, 6])
h.follower_ids.extend([7, 8, 9])
owners, editors, followers = hotlist_helpers.MembersWithoutGivenIDs(
h, {10, 11, 12})
self.assertEqual(h.owner_ids, owners)
self.assertEqual(h.editor_ids, editors)
self.assertEqual(h.follower_ids, followers)
owners, editors, followers = hotlist_helpers.MembersWithoutGivenIDs(
h, set())
self.assertEqual(h.owner_ids, owners)
self.assertEqual(h.editor_ids, editors)
self.assertEqual(h.follower_ids, followers)
owners, editors, followers = hotlist_helpers.MembersWithoutGivenIDs(
h, {1, 4, 7})
self.assertEqual([2, 3], owners)
self.assertEqual([5, 6], editors)
self.assertEqual([8, 9], followers)
def testMembersWithGivenIDs(self):
h = features_pb2.Hotlist()
# empty GivenIDs give empty member lists from originally empty member lists
owners, editors, followers = hotlist_helpers.MembersWithGivenIDs(
h, set(), 'follower')
self.assertFalse(owners)
self.assertFalse(editors)
self.assertFalse(followers)
# empty GivenIDs return original non-empty member lists
h.owner_ids.extend([1, 2, 3])
h.editor_ids.extend([4, 5, 6])
h.follower_ids.extend([7, 8, 9])
owners, editors, followers = hotlist_helpers.MembersWithGivenIDs(
h, set(), 'editor')
self.assertEqual(owners, h.owner_ids)
self.assertEqual(editors, h.editor_ids)
self.assertEqual(followers, h.follower_ids)
# non-member GivenIDs return updated member lists
owners, editors, followers = hotlist_helpers.MembersWithGivenIDs(
h, {10, 11, 12}, 'owner')
self.assertEqual(owners, [1, 2, 3, 10, 11, 12])
self.assertEqual(editors, [4, 5, 6])
self.assertEqual(followers, [7, 8, 9])
# member GivenIDs return updated member lists
owners, editors, followers = hotlist_helpers.MembersWithGivenIDs(
h, {1, 4, 7}, 'editor')
self.assertEqual(owners, [2, 3])
self.assertEqual(editors, [5, 6, 1, 4, 7])
self.assertEqual(followers, [8, 9])
def testGetURLOfHotlist(self):
cnxn = 'fake cnxn'
user = self.services.user.TestAddUser('claremont@email.com', 432)
user.obscure_email = False
hotlist1 = self.services.features.TestAddHotlist(
'hotlist1', hotlist_id=123, owner_ids=[432])
url = hotlist_helpers.GetURLOfHotlist(
cnxn, hotlist1, self.services.user)
self.assertEqual('/u/claremont@email.com/hotlists/hotlist1', url)
url = hotlist_helpers.GetURLOfHotlist(
cnxn, hotlist1, self.services.user, url_for_token=True)
self.assertEqual('/u/432/hotlists/hotlist1', url)
user.obscure_email = True
url = hotlist_helpers.GetURLOfHotlist(
cnxn, hotlist1, self.services.user)
self.assertEqual('/u/432/hotlists/hotlist1', url)
# Test that a Hotlist without an owner has an empty URL.
hotlist_unowned = self.services.features.TestAddHotlist('hotlist2',
hotlist_id=234, owner_ids=[])
url = hotlist_helpers.GetURLOfHotlist(cnxn, hotlist_unowned,
self.services.user)
self.assertFalse(url)