| Index: appengine/monorail/framework/test/framework_views_test.py
|
| diff --git a/appengine/monorail/framework/test/framework_views_test.py b/appengine/monorail/framework/test/framework_views_test.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..1d821eb0067a115695332af560fa34c7d50e4393
|
| --- /dev/null
|
| +++ b/appengine/monorail/framework/test/framework_views_test.py
|
| @@ -0,0 +1,198 @@
|
| +# 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 framework_views classes."""
|
| +
|
| +import unittest
|
| +
|
| +from framework import framework_views
|
| +from framework import monorailrequest
|
| +from proto import project_pb2
|
| +from proto import tracker_pb2
|
| +from proto import user_pb2
|
| +import settings
|
| +
|
| +
|
| +LONG_STR = 'VeryLongStringThatCertainlyWillNotFit'
|
| +LONG_PART_STR = 'OnePartThatWillNotFit-OneShort'
|
| +
|
| +
|
| +class LabelViewTest(unittest.TestCase):
|
| +
|
| + def testLabelView(self):
|
| + view = framework_views.LabelView('', None)
|
| + self.assertEquals('', view.name)
|
| +
|
| + view = framework_views.LabelView('Priority-High', None)
|
| + self.assertEquals('Priority-High', view.name)
|
| + self.assertIsNone(view.is_restrict)
|
| + self.assertEquals('Priority-High', view.tooltip)
|
| + self.assertEquals('', view.docstring)
|
| + self.assertEquals('Priority', view.prefix)
|
| + self.assertEquals('High', view.value)
|
| +
|
| + view = framework_views.LabelView('%s-%s' % (LONG_STR, LONG_STR), None)
|
| + self.assertEquals('%s-%s' % (LONG_STR, LONG_STR), view.name)
|
| + self.assertEquals('%s-%s' % (LONG_STR, LONG_STR), view.tooltip)
|
| + self.assertEquals('', view.docstring)
|
| + self.assertEquals(LONG_STR, view.prefix)
|
| + self.assertEquals(LONG_STR, view.value)
|
| +
|
| + view = framework_views.LabelView(LONG_PART_STR, None)
|
| + self.assertEquals(LONG_PART_STR, view.name)
|
| + self.assertEquals(LONG_PART_STR, view.tooltip)
|
| + self.assertEquals('', view.docstring)
|
| + self.assertEquals('OnePartThatWillNotFit', view.prefix)
|
| + self.assertEquals('OneShort', view.value)
|
| +
|
| + config = tracker_pb2.ProjectIssueConfig()
|
| + config.well_known_labels.append(tracker_pb2.LabelDef(
|
| + label='Priority-High', label_docstring='Must ship in this milestone'))
|
| +
|
| + view = framework_views.LabelView('Priority-High', config)
|
| + self.assertEquals('Must ship in this milestone', view.docstring)
|
| +
|
| + view = framework_views.LabelView('Priority-Foo', config)
|
| + self.assertEquals('', view.docstring)
|
| +
|
| + view = framework_views.LabelView('Restrict-View-Commit', None)
|
| + self.assertTrue(view.is_restrict)
|
| +
|
| +
|
| +class StatusViewTest(unittest.TestCase):
|
| +
|
| + def testStatusView(self):
|
| + view = framework_views.StatusView('', None)
|
| + self.assertEquals('', view.name)
|
| +
|
| + view = framework_views.StatusView('Accepted', None)
|
| + self.assertEquals('Accepted', view.name)
|
| + self.assertEquals('Accepted', view.tooltip)
|
| + self.assertEquals('', view.docstring)
|
| + self.assertEquals('yes', view.means_open)
|
| +
|
| + view = framework_views.StatusView(LONG_STR, None)
|
| + self.assertEquals(LONG_STR, view.name)
|
| + self.assertEquals(LONG_STR, view.tooltip)
|
| + self.assertEquals('', view.docstring)
|
| + self.assertEquals('yes', view.means_open)
|
| +
|
| + config = tracker_pb2.ProjectIssueConfig()
|
| + config.well_known_statuses.append(tracker_pb2.StatusDef(
|
| + status='SlamDunk', status_docstring='Code fixed and taught a lesson',
|
| + means_open=False))
|
| +
|
| + view = framework_views.StatusView('SlamDunk', config)
|
| + self.assertEquals('Code fixed and taught a lesson', view.docstring)
|
| + self.assertFalse(view.means_open)
|
| +
|
| + view = framework_views.StatusView('SlammedBack', config)
|
| + self.assertEquals('', view.docstring)
|
| +
|
| +
|
| +class RevealEmailsToMembersTest(unittest.TestCase):
|
| +
|
| + def setUp(self):
|
| + project = project_pb2.Project()
|
| + project.owner_ids.append(111L)
|
| + project.committer_ids.append(222L)
|
| + project.contributor_ids.append(333L)
|
| + project.contributor_ids.append(888L)
|
| + user = user_pb2.User()
|
| + user.is_site_admin = False
|
| + self.mr = monorailrequest.MonorailRequest()
|
| + self.mr.project = project
|
| + self.mr.auth.user_pb = user
|
| +
|
| + def CheckRevealAllToMember(
|
| + self, logged_in_user_id, expected, viewed_user_id=333L, group_id=None):
|
| + user_view = framework_views.UserView(
|
| + viewed_user_id, 'user@example.com', True)
|
| +
|
| + if group_id:
|
| + pass # xxx re-implement groups
|
| +
|
| + users_by_id = {333L: user_view}
|
| + self.mr.auth.user_id = logged_in_user_id
|
| + self.mr.auth.effective_ids = {logged_in_user_id}
|
| + # Assert display name is obscured before the reveal.
|
| + self.assertEqual('u...@example.com', user_view.display_name)
|
| + # Assert profile url contains user ID before the reveal.
|
| + self.assertEqual('/u/%s/' % viewed_user_id, user_view.profile_url)
|
| + framework_views.RevealAllEmailsToMembers(self.mr, users_by_id)
|
| + self.assertEqual(expected, not user_view.obscure_email)
|
| + if expected:
|
| + # Assert display name is now revealed.
|
| + self.assertEqual('user@example.com', user_view.display_name)
|
| + # Assert profile url contains the email.
|
| + self.assertEqual('/u/user@example.com/', user_view.profile_url)
|
| + else:
|
| + # Assert display name is still hidden.
|
| + self.assertEqual('u...@example.com', user_view.display_name)
|
| + # Assert profile url still contains user ID.
|
| + self.assertEqual('/u/%s/' % viewed_user_id, user_view.profile_url)
|
| +
|
| + def testRevealEmailsToPriviledgedDomain(self):
|
| + for priviledged_user_domain in settings.priviledged_user_domains:
|
| + self.mr.auth.user_pb.email = 'test@' + priviledged_user_domain
|
| + self.CheckRevealAllToMember(100001L, True)
|
| +
|
| + def testRevealEmailToSelf(self):
|
| + self.mr.auth.user_pb.email = 'user@example.com'
|
| + self.CheckRevealAllToMember(100001L, True)
|
| +
|
| + def testRevealAllEmailsToMembers_Collaborators(self):
|
| + self.CheckRevealAllToMember(0L, False)
|
| + self.CheckRevealAllToMember(111L, True)
|
| + self.CheckRevealAllToMember(222L, True)
|
| + self.CheckRevealAllToMember(333L, True)
|
| + self.CheckRevealAllToMember(444L, False)
|
| +
|
| + # Viewed user has indirect role in the project via a group.
|
| + self.CheckRevealAllToMember(0, False, group_id=888L)
|
| + self.CheckRevealAllToMember(111L, True, group_id=888L)
|
| + # xxx re-implement
|
| + # self.CheckRevealAllToMember(
|
| + # 111, True, viewed_user_id=444L, group_id=888L)
|
| +
|
| + # Logged in user has indirect role in the project via a group.
|
| + self.CheckRevealAllToMember(888L, True)
|
| +
|
| + def testRevealAllEmailsToMembers_Admins(self):
|
| + self.CheckRevealAllToMember(555L, False)
|
| + self.mr.auth.user_pb.is_site_admin = True
|
| + self.CheckRevealAllToMember(555L, True)
|
| +
|
| +
|
| +class RevealAllEmailsTest(unittest.TestCase):
|
| +
|
| + def testRevealAllEmail(self):
|
| + users_by_id = {
|
| + 111L: framework_views.UserView(111L, 'a@a.com', True),
|
| + 222L: framework_views.UserView(222L, 'b@b.com', True),
|
| + 333L: framework_views.UserView(333L, 'c@c.com', True),
|
| + 999L: framework_views.UserView(999L, 'z@z.com', True),
|
| + }
|
| + # Assert display names are obscured before the reveal.
|
| + self.assertEqual('a...@a.com', users_by_id[111L].display_name)
|
| + self.assertEqual('b...@b.com', users_by_id[222L].display_name)
|
| + self.assertEqual('c...@c.com', users_by_id[333L].display_name)
|
| + self.assertEqual('z...@z.com', users_by_id[999L].display_name)
|
| +
|
| + framework_views.RevealAllEmails(users_by_id)
|
| +
|
| + self.assertFalse(users_by_id[111L].obscure_email)
|
| + self.assertFalse(users_by_id[222L].obscure_email)
|
| + self.assertFalse(users_by_id[333L].obscure_email)
|
| + self.assertFalse(users_by_id[999L].obscure_email)
|
| + # Assert display names are now revealed.
|
| + self.assertEqual('a@a.com', users_by_id[111L].display_name)
|
| + self.assertEqual('b@b.com', users_by_id[222L].display_name)
|
| + self.assertEqual('c@c.com', users_by_id[333L].display_name)
|
| + self.assertEqual('z@z.com', users_by_id[999L].display_name)
|
| +
|
| +
|
| +if __name__ == '__main__':
|
| + unittest.main()
|
|
|