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)
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)
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)
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)
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)
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)
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'])
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)
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)
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)
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)
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 ]