def testGetUserPrefs_Mine_Empty(self):
        """User who never set any pref gets empty prefs."""
        request = users_pb2.GetUserPrefsRequest()
        mc = monorailcontext.MonorailContext(self.services,
                                             cnxn=self.cnxn,
                                             requester='*****@*****.**')
        response = self.CallWrapped(self.users_svcr.GetUserPrefs, mc, request)

        self.assertEqual(0, len(response.prefs))
    def testGetUserPrefs_Anon(self):
        """Anon always has empty prefs."""
        request = users_pb2.GetUserPrefsRequest()
        mc = monorailcontext.MonorailContext(self.services,
                                             cnxn=self.cnxn,
                                             requester=None)
        response = self.CallWrapped(self.users_svcr.GetUserPrefs, mc, request)

        self.assertEqual(0, len(response.prefs))
    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 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 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 testGetUserSavedQueries_Mine(self):
        """See your own queries."""
        self.services.features.UpdateUserSavedQueries(self.cnxn, 111, [
            tracker_pb2.SavedQuery(query_id=101, name='test',
                                   query='owner:me'),
            tracker_pb2.SavedQuery(query_id=202,
                                   name='hello',
                                   query='world',
                                   executes_in_project_ids=[987])
        ])
        request = users_pb2.GetUserPrefsRequest()
        mc = monorailcontext.MonorailContext(self.services,
                                             cnxn=self.cnxn,
                                             requester='*****@*****.**')
        response = self.CallWrapped(self.users_svcr.GetSavedQueries, mc,
                                    request)

        self.assertEqual(2, len(response.saved_queries))

        self.assertEqual('test', response.saved_queries[0].name)
        self.assertEqual('owner:me', response.saved_queries[0].query)
        self.assertEqual('hello', response.saved_queries[1].name)
        self.assertEqual('world', response.saved_queries[1].query)
        self.assertEqual(['proj'], response.saved_queries[1].project_names)