Esempio n. 1
0
    def testGetUsersPrefs(self):
        self.user_service.userprefs_tbl = mock.Mock()
        self.user_service.userprefs_tbl.Select.return_value = [
            (111, 'code_font', 'true'),
            (111, 'keep_perms_open', 'true'),
            # Note: user 222 has not set any prefs.
            (333, 'code_font', 'false')
        ]

        prefs_dict = self.user_service.GetUsersPrefs(self.cnxn,
                                                     [111, 222, 333])

        expected = {
            111:
            user_pb2.UserPrefs(user_id=111,
                               prefs=[
                                   user_pb2.UserPrefValue(name='code_font',
                                                          value='true'),
                                   user_pb2.UserPrefValue(
                                       name='keep_perms_open', value='true')
                               ]),
            222:
            user_pb2.UserPrefs(user_id=222),
            333:
            user_pb2.UserPrefs(user_id=333,
                               prefs=[
                                   user_pb2.UserPrefValue(name='code_font',
                                                          value='false')
                               ]),
        }
        self.assertEqual(expected, prefs_dict)
Esempio n. 2
0
 def testGetNotifyRestrictedIssues_PrefIsSet(self):
     """When the notify_restricted_issues pref is set, we use it."""
     self.user_prefs.prefs.extend([
         user_pb2.UserPrefValue(name='x', value='y'),
         user_pb2.UserPrefValue(name='notify_restricted_issues', value='z'),
     ])
     actual = notify_helpers._GetNotifyRestrictedIssues(
         self.user_prefs, '*****@*****.**', self.user)
     self.assertEqual('z', actual)
Esempio n. 3
0
 def testSetUserPrefs(self):
   self.user_service.userprefs_tbl = mock.Mock()
   pref_values = [user_pb2.UserPrefValue(name='code_font', value='true'),
                  user_pb2.UserPrefValue(name='keep_perms_open', value='true')]
   self.user_service.SetUserPrefs(self.cnxn, 111, pref_values)
   self.user_service.userprefs_tbl.InsertRows.assert_called_once_with(
       self.cnxn, user_svc.USERPREFS_COLS,
       [(111, 'code_font', 'true'),
        (111, 'keep_perms_open', 'true')],
       replace=True)
Esempio n. 4
0
  def testGatherHelpData_DismissedEverything(self):
    mr = testing_helpers.MakeMonorailRequest(
        path='/p/proj/issues/entry', project=self.project)
    mr.auth.user_pb = user_pb2.User(user_id=111)
    mr.auth.user_id = 111
    self.services.user.SetUserPrefs(
        self.cnxn, 111,
        [user_pb2.UserPrefValue(name='privacy_click_through', value='true'),
         user_pb2.UserPrefValue(name='code_of_conduct', value='true')])

    help_data = self.servlet.GatherHelpData(mr, {})
    self.assertEqual(
        {'account_cue': None,
         'cue': None,
         'is_privileged_domain_user': None},
        help_data)
    def testGatherUnifiedSettingsPageData(self):
        mr = self.mr
        mr.auth.user_view = framework_views.StuffUserView(
            100, 'user@invalid', True)
        mr.auth.user_view.profile_url = '/u/profile/url'
        userprefs = user_pb2.UserPrefs(prefs=[
            user_pb2.UserPrefValue(name='public_issue_notice', value='true')
        ])
        page_data = framework_helpers.UserSettings.GatherUnifiedSettingsPageData(
            mr.auth.user_id, mr.auth.user_view, mr.auth.user_pb, userprefs)

        expected_keys = [
            'settings_user',
            'settings_user_pb',
            'settings_user_is_banned',
            'self',
            'profile_url_fragment',
            'preview_on_hover',
            'settings_user_prefs',
        ]
        self.assertItemsEqual(expected_keys, list(page_data.keys()))

        self.assertEqual('profile/url', page_data['profile_url_fragment'])
        self.assertTrue(page_data['settings_user_prefs'].public_issue_notice)
        self.assertFalse(page_data['settings_user_prefs'].restrict_new_issues)
Esempio n. 6
0
  def testGetUserPrefs(self):
    self.user_service.userprefs_tbl = mock.Mock()
    self.user_service.userprefs_tbl.Select.return_value = [
        (111, 'code_font', 'true'),
        (111, 'keep_perms_open', 'true'),
        # Note: user 222 has not set any prefs.
        (333, 'code_font', 'false')]

    userprefs = self.user_service.GetUserPrefs(self.cnxn, 111)
    expected = user_pb2.UserPrefs(
        user_id=111,
        prefs=[user_pb2.UserPrefValue(name='code_font', value='true'),
               user_pb2.UserPrefValue(name='keep_perms_open', value='true')])
    self.assertEqual(expected, userprefs)

    userprefs = self.user_service.GetUserPrefs(self.cnxn, 222)
    expected = user_pb2.UserPrefs(user_id=222)
    self.assertEqual(expected, userprefs)
    def testGetUserPrefs_Mine_Some(self):
        """User who set a pref gets it back."""
        self.services.user.SetUserPrefs(
            self.cnxn, 111,
            [user_pb2.UserPrefValue(name='code_font', value='true')])
        request = users_pb2.GetUserPrefsRequest()
        mc = monorailcontext.MonorailContext(self.services,
                                             cnxn=self.cnxn,
                                             requester='*****@*****.**')
        response = self.CallWrapped(self.users_svcr.GetUserPrefs, mc, request)

        self.assertEqual(1, len(response.prefs))
        self.assertEqual('code_font', response.prefs[0].name)
        self.assertEqual('true', response.prefs[0].value)
Esempio n. 8
0
    def testGatherHelpData_YouAreBouncing(self):
        project = fake.Project(project_name='proj')
        _request, mr = testing_helpers.GetRequestObjects(path='/p/proj',
                                                         project=project)
        mr.auth.user_id = 111
        mr.auth.user_pb.email_bounce_timestamp = 1497647529
        help_data = self.page_class.GatherHelpData(mr, {})
        self.assertEqual('your_email_bounced', help_data['cue'])

        self.page_class.services.user.SetUserPrefs(
            'cnxn', 111,
            [user_pb2.UserPrefValue(name='your_email_bounced', value='true')])
        help_data = self.page_class.GatherHelpData(mr, {})
        self.assertEqual(None, help_data['cue'])
        self.assertEqual(None, help_data['account_cue'])
    def testGetUserPrefs_Other_Denied(self):
        """A non-admin cannot read another user's prefs."""
        self.services.user.SetUserPrefs(
            self.cnxn, 111,
            [user_pb2.UserPrefValue(name='code_font', value='true')])
        # user2 is not a site admin.

        request = users_pb2.GetUserPrefsRequest()
        request.user_ref.display_name = '*****@*****.**'
        mc = monorailcontext.MonorailContext(self.services,
                                             cnxn=self.cnxn,
                                             requester='*****@*****.**')
        mc.LookupLoggedInUserPerms(self.project)
        with self.assertRaises(permissions.PermissionException):
            self.CallWrapped(self.users_svcr.GetUserPrefs, mc, request)
Esempio n. 10
0
    def testGatherHelpData_VacationReminder(self):
        project = fake.Project(project_name='proj')
        _request, mr = testing_helpers.GetRequestObjects(path='/p/proj',
                                                         project=project)
        mr.auth.user_id = 111
        mr.auth.user_pb.vacation_message = 'Gone skiing'
        help_data = self.page_class.GatherHelpData(mr, {})
        self.assertEqual('you_are_on_vacation', help_data['cue'])

        self.page_class.services.user.SetUserPrefs(
            'cnxn', 111,
            [user_pb2.UserPrefValue(name='you_are_on_vacation', value='true')])
        help_data = self.page_class.GatherHelpData(mr, {})
        self.assertEqual(None, help_data['cue'])
        self.assertEqual(None, help_data['account_cue'])
Esempio n. 11
0
    def testGatherHelpData_Nonmember(self):
        mr = testing_helpers.MakeMonorailRequest(path='/p/proj/people/list',
                                                 project=self.project)
        mr.auth.user_id = 999
        mr.auth.effective_ids = {999}
        help_data = self.servlet.GatherHelpData(mr, {})
        self.assertEqual({
            'account_cue': None,
            'cue': 'how_to_join_project'
        }, help_data)

        self.servlet.services.user.SetUserPrefs(
            'cnxn', 999,
            [user_pb2.UserPrefValue(name='how_to_join_project', value='true')])
        help_data = self.servlet.GatherHelpData(mr, {})
        self.assertEqual({'account_cue': None, 'cue': None}, help_data)
    def testSetUserPrefs_Mine_Overwrite(self):
        """User can change the value of a pref."""
        self.services.user.SetUserPrefs(
            self.cnxn, 111,
            [user_pb2.UserPrefValue(name='code_font', value='true')])
        request = users_pb2.SetUserPrefsRequest(prefs=[
            user_objects_pb2.UserPrefValue(name='code_font', value='false')
        ])
        mc = monorailcontext.MonorailContext(self.services,
                                             cnxn=self.cnxn,
                                             requester='*****@*****.**')
        self.CallWrapped(self.users_svcr.SetUserPrefs, mc, request)

        prefs_after = self.services.user.GetUserPrefs(self.cnxn, 111)
        self.assertEqual(1, len(prefs_after.prefs))
        self.assertEqual('code_font', prefs_after.prefs[0].name)
        self.assertEqual('false', prefs_after.prefs[0].value)
Esempio n. 13
0
  def testGatherPageData_RestrictNewIssues(self):
    """Users with this pref set default to reporting issues with R-V-G."""
    self.mox.ReplayAll()
    mr = testing_helpers.MakeMonorailRequest(
        path='/p/proj/issues/entry', services=self.services)
    mr.auth.user_view = framework_views.StuffUserView(100, 'user@invalid', True)
    user = self.services.user.TestAddUser('user@invalid', 100)
    self.services.user.GetUser = Mock(return_value=user)
    self.services.template.GetTemplateById = Mock(return_value=self.template)

    mr.auth.user_id = 100
    page_data = self.servlet.GatherPageData(mr)
    self.assertNotIn('Restrict-View-Google', page_data['labels'])

    pref = user_pb2.UserPrefValue(name='restrict_new_issues', value='true')
    self.services.user.SetUserPrefs(self.cnxn, 100, [pref])
    page_data = self.servlet.GatherPageData(mr)
    self.assertIn('Restrict-View-Google', page_data['labels'])
    def testGetUserPrefs_Other_Allowed(self):
        """A site admin can read another user's prefs."""
        self.services.user.SetUserPrefs(
            self.cnxn, 111,
            [user_pb2.UserPrefValue(name='code_font', value='true')])
        self.user_2.is_site_admin = True

        request = users_pb2.GetUserPrefsRequest()
        request.user_ref.display_name = '*****@*****.**'
        mc = monorailcontext.MonorailContext(self.services,
                                             cnxn=self.cnxn,
                                             requester='*****@*****.**')
        mc.LookupLoggedInUserPerms(self.project)
        response = self.CallWrapped(self.users_svcr.GetUserPrefs, mc, request)

        self.assertEqual(1, len(response.prefs))
        self.assertEqual('code_font', response.prefs[0].name)
        self.assertEqual('true', response.prefs[0].value)
Esempio n. 15
0
    def _DeserializeUserPrefsByID(self, userprefs_rows):
        """Convert database row tuples into UserPrefs PBs.

    Args:
      userprefs_rows: rows from the UserPrefs DB table.

    Returns:
      A dict {user_id: userprefs} for all the users in userprefs_rows.
    """
        result_dict = {}

        # Make one UserPrefs PB for each row in userprefs_rows.
        for row in userprefs_rows:
            (user_id, name, value) = row
            if user_id not in result_dict:
                userprefs = user_pb2.UserPrefs(user_id=user_id)
                result_dict[user_id] = userprefs
            else:
                userprefs = result_dict[user_id]
            userprefs.prefs.append(
                user_pb2.UserPrefValue(name=name, value=value))

        return result_dict
    def testSetUserPrefs_Other_Denied(self):
        """A non-admin cannot set another user's prefs."""
        self.services.user.SetUserPrefs(
            self.cnxn, 111,
            [user_pb2.UserPrefValue(name='code_font', value='true')])
        # user2 is not a site admin.

        request = users_pb2.SetUserPrefsRequest(prefs=[
            user_objects_pb2.UserPrefValue(name='code_font', value='false')
        ])
        request.user_ref.display_name = '*****@*****.**'
        mc = monorailcontext.MonorailContext(self.services,
                                             cnxn=self.cnxn,
                                             requester='*****@*****.**')
        mc.LookupLoggedInUserPerms(self.project)
        with self.assertRaises(permissions.PermissionException):
            self.CallWrapped(self.users_svcr.SetUserPrefs, mc, request)

        # Regardless of any exception, the preferences remain unchanged.
        prefs_after = self.services.user.GetUserPrefs(self.cnxn, 111)
        self.assertEqual(1, len(prefs_after.prefs))
        self.assertEqual('code_font', prefs_after.prefs[0].name)
        self.assertEqual('true', prefs_after.prefs[0].value)
Esempio n. 17
0
    def ProcessSettingsForm(cls, we, post_data, user, admin=False):
        """Process the posted form data from the unified user settings form.

    Args:
      we: A WorkEnvironment with cnxn and services.
      post_data: The parsed post data from the form submission request.
      user: The user PB of the target user.
      admin: Whether settings reserved for admins are supported.
    """
        obscure_email = 'obscure_email' in post_data

        kwargs = {}
        if admin:
            kwargs.update(is_site_admin='site_admin' in post_data)
            kwargs.update(is_banned='banned' in post_data,
                          banned_reason=post_data.get('banned_reason', ''))

        we.UpdateUserSettings(
            user,
            notify='notify' in post_data,
            notify_starred='notify_starred' in post_data,
            email_compact_subject='email_compact_subject' in post_data,
            email_view_widget='email_view_widget' in post_data,
            notify_starred_ping='notify_starred_ping' in post_data,
            preview_on_hover='preview_on_hover' in post_data,
            obscure_email=obscure_email,
            vacation_message=post_data.get('vacation_message', ''),
            **kwargs)

        user_prefs = []
        for pref_name in ['restrict_new_issues', 'public_issue_notice']:
            user_prefs.append(
                user_pb2.UserPrefValue(
                    name=pref_name,
                    value=('true' if pref_name in post_data else 'false')))
        we.SetUserPrefs(user.user_id, user_prefs)
Esempio n. 18
0
def IngestPrefValues(pref_values):
    """Return protorpc UserPrefValues for the given values."""
    return [
        user_pb2.UserPrefValue(name=upv.name, value=upv.value)
        for upv in pref_values
    ]