Exemple #1
0
  def testAddIssuesToHotlists(self):
    # Create two hotlists
    hotlist_1 = self.services.features.CreateHotlist(
        self.cnxn, 'Hotlist-1', 'Summary', 'Description', owner_ids=[111],
        editor_ids=[])
    hotlist_2 = self.services.features.CreateHotlist(
        self.cnxn, 'Hotlist-2', 'Summary', 'Description', owner_ids=[111],
        editor_ids=[])

    # Add Issue 1 to both hotlists
    request = features_pb2.AddIssuesToHotlistsRequest(
        note='Foo',
        hotlist_refs=[
            common_pb2.HotlistRef(
                name='Hotlist-1',
                owner=common_pb2.UserRef(user_id=111)),
            common_pb2.HotlistRef(
                name='Hotlist-2',
                owner=common_pb2.UserRef(user_id=111))],
        issue_refs=[
            common_pb2.IssueRef(project_name='proj', local_id=1)])

    mc = monorailcontext.MonorailContext(
        self.services, cnxn=self.cnxn, requester='*****@*****.**')
    self.CallWrapped(self.features_svcr.AddIssuesToHotlists, mc, request)

    self.assertEqual(
        [self.issue_1.issue_id],
        [item.issue_id for item in hotlist_1.items])
    self.assertEqual(
        [self.issue_1.issue_id],
        [item.issue_id for item in hotlist_2.items])

    self.assertEqual('Foo', hotlist_1.items[0].note)
    self.assertEqual('Foo', hotlist_2.items[0].note)
Exemple #2
0
  def testCreateHotlist_Normal(self):
    request = features_pb2.CreateHotlistRequest(
        name='Fake-Hotlist',
        summary='Summary',
        description='Description',
        editor_refs=[
            common_pb2.UserRef(user_id=222),
            common_pb2.UserRef(display_name='*****@*****.**')],
        issue_refs=[
            common_pb2.IssueRef(project_name='proj', local_id=1),
            common_pb2.IssueRef(project_name='proj', local_id=2)],
        is_private=True)
    mc = monorailcontext.MonorailContext(
        self.services, cnxn=self.cnxn, requester='*****@*****.**')
    self.CallWrapped(self.features_svcr.CreateHotlist, mc, request)

    # Check that the hotlist was successfuly added.
    hotlist_id = self.services.features.LookupHotlistIDs(
        self.cnxn, ['Fake-Hotlist'], [111]).get(('fake-hotlist', 111))
    hotlist = self.services.features.GetHotlist(self.cnxn, hotlist_id)
    self.assertEqual('Summary', hotlist.summary)
    self.assertEqual('Description', hotlist.description)
    self.assertEqual([111], hotlist.owner_ids)
    self.assertEqual([222, 333], hotlist.editor_ids)
    self.assertEqual(
        [self.issue_1.issue_id, self.issue_2.issue_id],
        [item.issue_id for item in hotlist.items])
    self.assertTrue(hotlist.is_private)
    def testGetUsersProjects(self):
        self.user = self.services.user.TestAddUser('*****@*****.**', 333)
        self.services.project_star.SetStar(self.cnxn, self.project.project_id,
                                           222, True)
        self.project.committer_ids.extend([222])

        self.AddUserProjects(222)
        self.AddUserProjects(333)

        request = users_pb2.GetUsersProjectsRequest(user_refs=[
            common_pb2.UserRef(display_name='*****@*****.**'),
            common_pb2.UserRef(display_name='*****@*****.**')
        ])
        mc = monorailcontext.MonorailContext(self.services,
                                             cnxn=self.cnxn,
                                             requester='*****@*****.**')
        mc.LookupLoggedInUserPerms(self.project)
        response = self.CallWrapped(self.users_svcr.GetUsersProjects, mc,
                                    request)

        self.assertEqual([
            user_objects_pb2.UserProjects(
                user_ref=common_pb2.UserRef(display_name='*****@*****.**'),
                owner_of=['members-only-222', 'owner-live-222'],
                member_of=['committer-live-222', 'proj'],
                contributor_to=['contributor-live-222'],
                starred_projects=['proj']),
            user_objects_pb2.UserProjects(
                user_ref=common_pb2.UserRef(display_name='*****@*****.**'),
                owner_of=['owner-live-333'],
                member_of=['committer-live-333'],
                contributor_to=['contributor-live-333'])
        ], list(response.users_projects))
Exemple #4
0
  def testListHotlistIssues(self):
    hotlist_id = self.services.features.CreateHotlist(
        self.cnxn, 'Fake-Hotlist', 'Summary', 'Description',
        owner_ids=[111], editor_ids=[]).hotlist_id
    self.services.features.UpdateHotlistItems(
        self.cnxn, hotlist_id, [],
        [(self.issue_1.issue_id, 222, 12345, 'Note'),
         (self.issue_2.issue_id, 111, 12346, 'Note')])
    self.issue_2.labels = ['Restrict-View-CoreTeam']

    owner_ref = common_pb2.UserRef(user_id=111)
    hotlist_ref = common_pb2.HotlistRef(name='Fake-Hotlist', owner=owner_ref)
    request = features_pb2.ListHotlistIssuesRequest(hotlist_ref=hotlist_ref)

    mc = monorailcontext.MonorailContext(
        self.services, cnxn=self.cnxn, requester='*****@*****.**')
    mc.LookupLoggedInUserPerms(self.project)
    response = self.CallWrapped(
        self.features_svcr.ListHotlistIssues, mc, request)

    self.assertEqual(1, len(response.items))
    self.assertEqual(10, response.items[0].rank)
    self.assertEqual(12345, response.items[0].added_timestamp)
    self.assertEqual('Note', response.items[0].note)
    self.assertEqual(
        common_pb2.UserRef(
            user_id=222,
            display_name='*****@*****.**'),
        response.items[0].adder_ref)
    self.assertEqual(1, response.items[0].issue.local_id)
    self.assertEqual('proj', response.items[0].issue.project_name)
    self.assertEqual('sum', response.items[0].issue.summary)
    self.assertEqual('New', response.items[0].issue.status_ref.status)
def ConvertUserRef(explicit_user_id, derived_user_id, users_by_id):
    """Use the given user IDs to create a UserRef."""
    user_id = explicit_user_id or derived_user_id
    is_derived = not explicit_user_id
    if not user_id:
        return common_pb2.UserRef(
            user_id=0, display_name=framework_constants.NO_USER_NAME)

    return common_pb2.UserRef(user_id=user_id,
                              is_derived=is_derived,
                              display_name=users_by_id[user_id].display_name)
    def testUnlinkAccounts_Normal(self):
        """Users can unlink their accounts."""
        self.services.user.linked_account_rows = [(111, 222)]
        request = users_pb2.UnlinkAccountsRequest(
            parent=common_pb2.UserRef(display_name='*****@*****.**'),
            child=common_pb2.UserRef(display_name='*****@*****.**'))
        mc = monorailcontext.MonorailContext(self.services,
                                             cnxn=self.cnxn,
                                             requester='*****@*****.**')

        self.CallWrapped(self.users_svcr.UnlinkAccounts, mc, request)

        self.assertEqual([], self.services.user.linked_account_rows)
  def testListComponents_IncludeAdminInfo(self):
    self.services.config.CreateComponentDef(
        self.cnxn, self.project.project_id, 'Foo', 'Foo Component', True, [],
        [], 1234567, 111, [])
    self.services.config.CreateComponentDef(
        self.cnxn, self.project.project_id, 'Bar', 'Bar Component', False, [],
        [], 1234568, 111, [])
    self.services.config.CreateComponentDef(
        self.cnxn, self.project.project_id, 'Bar>Baz', 'Baz Component',
        False, [], [], 1234569, 111, [])
    creator_ref = common_pb2.UserRef(
        user_id=111,
        display_name='*****@*****.**')
    no_user_ref = common_pb2.UserRef(
        display_name=framework_constants.NO_USER_NAME)

    request = projects_pb2.ListComponentsRequest(
        project_name='proj', include_admin_info=True)
    mc = monorailcontext.MonorailContext(
        self.services, cnxn=self.cnxn, requester='*****@*****.**')
    response = self.CallWrapped(
        self.projects_svcr.ListComponents, mc, request)

    self.assertEqual(
        [project_objects_pb2.ComponentDef(
            path='Foo',
            docstring='Foo Component',
            deprecated=True,
            created=1234567,
            creator_ref=creator_ref,
             modifier_ref=no_user_ref),
         project_objects_pb2.ComponentDef(
             path='Bar',
             docstring='Bar Component',
             deprecated=False,
             created=1234568,
             creator_ref=creator_ref,
             modifier_ref=no_user_ref),
         project_objects_pb2.ComponentDef(
             path='Bar>Baz',
             docstring='Baz Component',
             deprecated=False,
             created=1234569,
             creator_ref=creator_ref,
             modifier_ref=no_user_ref),
            ],
        list(response.component_defs))
    def testGetMemberships(self):
        request = users_pb2.GetMembershipsRequest(user_ref=common_pb2.UserRef(
            display_name='*****@*****.**', user_id=111))
        mc = monorailcontext.MonorailContext(self.services,
                                             cnxn=self.cnxn,
                                             requester='*****@*****.**')

        response = self.CallWrapped(self.users_svcr.GetMemberships, mc,
                                    request)
        expected_group_refs = [
            common_pb2.UserRef(display_name='*****@*****.**',
                               user_id=self.group1_id),
            common_pb2.UserRef(display_name='*****@*****.**',
                               user_id=self.group2_id)
        ]

        self.assertItemsEqual(expected_group_refs, response.group_refs)
 def CallStar(self, requester='*****@*****.**', starred=True):
     request = users_pb2.StarUserRequest(
         user_ref=common_pb2.UserRef(user_id=222), starred=starred)
     mc = monorailcontext.MonorailContext(self.services,
                                          cnxn=self.cnxn,
                                          requester=requester)
     response = self.CallWrapped(self.users_svcr.StarUser, mc, request)
     return response.star_count
 def testListReferencedUsers(self):
     """We can get all valid users by email addresses."""
     request = users_pb2.ListReferencedUsersRequest(
         # we ignore emails that are empty or belong to non-existent users.
         user_refs=[
             common_pb2.UserRef(display_name='*****@*****.**'),
             common_pb2.UserRef(display_name='*****@*****.**'),
             common_pb2.UserRef(display_name=''),
             common_pb2.UserRef()
         ])
     mc = monorailcontext.MonorailContext(self.services,
                                          cnxn=self.cnxn,
                                          requester='*****@*****.**')
     response = self.CallWrapped(self.users_svcr.ListReferencedUsers, mc,
                                 request)
     self.assertEqual(len(response.users), 1)
     self.assertEqual(response.users[0].user_id, 222)
 def CallGetStarCount(self):
     request = users_pb2.GetUserStarCountRequest(
         user_ref=common_pb2.UserRef(user_id=222))
     mc = monorailcontext.MonorailContext(self.services,
                                          cnxn=self.cnxn,
                                          requester='*****@*****.**')
     response = self.CallWrapped(self.users_svcr.GetUserStarCount, mc,
                                 request)
     return response.star_count
Exemple #12
0
def ConvertUserRefs(explicit_user_ids, derived_user_ids, users_by_id,
                    use_email):
    """Use the given user ID lists to create a list of UserRef."""
    result = []
    for user_id in explicit_user_ids:
        result.append(
            common_pb2.UserRef(
                user_id=user_id,
                is_derived=False,
                display_name=(users_by_id[user_id].email if use_email else
                              users_by_id[user_id].display_name)))
    for user_id in derived_user_ids:
        result.append(
            common_pb2.UserRef(
                user_id=user_id,
                is_derived=True,
                display_name=(users_by_id[user_id].email if use_email else
                              users_by_id[user_id].display_name)))
    return result
    def testGetMemberships_NonExistentUser(self):
        request = users_pb2.GetMembershipsRequest(user_ref=common_pb2.UserRef(
            display_name='*****@*****.**', user_id=888))

        mc = monorailcontext.MonorailContext(self.services,
                                             cnxn=self.cnxn,
                                             requester='')

        with self.assertRaises(exceptions.NoSuchUserException):
            self.CallWrapped(self.users_svcr.GetMemberships, mc, request)
Exemple #14
0
 def CallGetStarCount(self):
   # Query for hotlists for '*****@*****.**'
   owner_ref = common_pb2.UserRef(user_id=111)
   hotlist_ref = common_pb2.HotlistRef(name='Fake-Hotlist', owner=owner_ref)
   request = features_pb2.GetHotlistStarCountRequest(hotlist_ref=hotlist_ref)
   mc = monorailcontext.MonorailContext(
       self.services, cnxn=self.cnxn, requester='*****@*****.**')
   response = self.CallWrapped(
       self.features_svcr.GetHotlistStarCount, mc, request)
   return response.star_count
Exemple #15
0
  def testListStarredHotlists(self):
    hotlists = [
        self.services.features.CreateHotlist(
            self.cnxn, 'Fake-Hotlist', 'Summary', 'Description',
            owner_ids=[222], editor_ids=[111]),
        self.services.features.CreateHotlist(
            self.cnxn, 'Fake-Hotlist-2', 'Summary', 'Description',
            owner_ids=[111], editor_ids=[222]),
        self.services.features.CreateHotlist(
            self.cnxn, 'Private-Hotlist', 'Summary', 'Description',
            owner_ids=[333], editor_ids=[222], is_private=True)]

    for hotlist in hotlists:
      self.services.hotlist_star.SetStar(
          self.cnxn, hotlist.hotlist_id, 111, True)

    request = features_pb2.ListStarredHotlistsRequest()
    mc = monorailcontext.MonorailContext(
        self.services, cnxn=self.cnxn, requester='*****@*****.**')
    response = self.CallWrapped(
        self.features_svcr.ListStarredHotlists, mc, request)

    expected_hotlists = [
        features_objects_pb2.Hotlist(
            owner_ref=common_pb2.UserRef(
                user_id=222,
                display_name='*****@*****.**'),
            name='Fake-Hotlist',
            summary='Summary',
            description='Description'),
        features_objects_pb2.Hotlist(
            owner_ref=common_pb2.UserRef(
                user_id=111,
                display_name='*****@*****.**'),
            name='Fake-Hotlist-2',
            summary='Summary',
            description='Description')]

    # We don't have permission to see the last issue, because it is marked as
    # private and we're not owners or editors.
    self.assertEqual(expected_hotlists, list(response.hotlists))
    def testUnlinkAccounts_NotFound(self):
        """Reject attempt to unlink a user that does not exist or unspecified."""
        mc = monorailcontext.MonorailContext(self.services,
                                             cnxn=self.cnxn,
                                             requester='*****@*****.**')

        request = users_pb2.UnlinkAccountsRequest(
            parent=common_pb2.UserRef(display_name='*****@*****.**'),
            child=common_pb2.UserRef(display_name='*****@*****.**'))
        with self.assertRaises(exceptions.NoSuchUserException):
            self.CallWrapped(self.users_svcr.UnlinkAccounts, mc, request)

        request = users_pb2.UnlinkAccountsRequest(
            parent=common_pb2.UserRef(display_name='*****@*****.**'),
            child=common_pb2.UserRef(display_name='*****@*****.**'))
        with self.assertRaises(exceptions.NoSuchUserException):
            self.CallWrapped(self.users_svcr.UnlinkAccounts, mc, request)

        request = users_pb2.UnlinkAccountsRequest(parent=common_pb2.UserRef(
            display_name='*****@*****.**'))
        with self.assertRaises(exceptions.InputException):
            self.CallWrapped(self.users_svcr.UnlinkAccounts, mc, request)

        request = users_pb2.UnlinkAccountsRequest(child=common_pb2.UserRef(
            display_name='*****@*****.**'))
        with self.assertRaises(exceptions.InputException):
            self.CallWrapped(self.users_svcr.UnlinkAccounts, mc, request)
Exemple #17
0
  def testListHotlistsByUser_NoHotlists(self):
    """There are no hotlists."""
    # No hotlists
    # Query for issues for '*****@*****.**'
    user_ref = common_pb2.UserRef(user_id=111)
    request = features_pb2.ListHotlistsByUserRequest(user=user_ref)

    # We're authenticated as '*****@*****.**'
    mc = monorailcontext.MonorailContext(
        self.services, cnxn=self.cnxn, requester='*****@*****.**')
    response = self.CallWrapped(self.features_svcr.ListHotlistsByUser, mc,
                                request)
    self.assertEqual(0, len(response.hotlists))
Exemple #18
0
  def testRemoveIssuesFromHotlists(self):
    # Create two hotlists with issues 1 and 2.
    hotlist_1 = self.services.features.CreateHotlist(
        self.cnxn, 'Hotlist-1', 'Summary', 'Description', owner_ids=[111],
        editor_ids=[])
    hotlist_2 = self.services.features.CreateHotlist(
        self.cnxn, 'Hotlist-2', 'Summary', 'Description', owner_ids=[111],
        editor_ids=[])
    self.services.features.AddIssuesToHotlists(
        self.cnxn,
        [hotlist_1.hotlist_id, hotlist_2.hotlist_id],
        [(self.issue_1.issue_id, 111, 0, ''),
         (self.issue_2.issue_id, 111, 0, '')],
        None, None, None)

    # Remove Issue 1 from both hotlists.
    request = features_pb2.RemoveIssuesFromHotlistsRequest(
        hotlist_refs=[
            common_pb2.HotlistRef(
                name='Hotlist-1',
                owner=common_pb2.UserRef(user_id=111)),
            common_pb2.HotlistRef(
                name='Hotlist-2',
                owner=common_pb2.UserRef(user_id=111))],
        issue_refs=[
            common_pb2.IssueRef(project_name='proj', local_id=1)])

    mc = monorailcontext.MonorailContext(
        self.services, cnxn=self.cnxn, requester='*****@*****.**')
    self.CallWrapped(self.features_svcr.RemoveIssuesFromHotlists, mc, request)

    # Only Issue 2 should remain in both lists.
    self.assertEqual(
        [self.issue_2.issue_id],
        [item.issue_id for item in hotlist_1.items])
    self.assertEqual(
        [self.issue_2.issue_id],
        [item.issue_id for item in hotlist_2.items])
    def testGetUser(self):
        """We can get a user by email address."""
        user_ref = common_pb2.UserRef(display_name='*****@*****.**')
        request = users_pb2.GetUserRequest(user_ref=user_ref)
        mc = monorailcontext.MonorailContext(self.services,
                                             cnxn=self.cnxn,
                                             requester='*****@*****.**')
        response = self.CallWrapped(self.users_svcr.GetUser, mc, request)
        self.assertEqual(response.email, '*****@*****.**')
        self.assertEqual(response.user_id, 222)
        self.assertFalse(response.is_site_admin)

        self.user_2.is_site_admin = True
        response = self.CallWrapped(self.users_svcr.GetUser, mc, request)
        self.assertTrue(response.is_site_admin)
Exemple #20
0
  def testListHotlistsByUser_PrivateIssueNotSignedIn(self):
    # Private hostlist owned by '*****@*****.**'
    self.services.features.CreateHotlist(
        self.cnxn, 'Fake-Hotlist', 'Summary', 'Description',
        owner_ids=[111], editor_ids=[222], is_private=True)

    # Query for issues for '*****@*****.**'
    user_ref = common_pb2.UserRef(user_id=111)
    request = features_pb2.ListHotlistsByUserRequest(user=user_ref)

    # We're not authenticated
    mc = monorailcontext.MonorailContext(self.services, cnxn=self.cnxn)
    response = self.CallWrapped(self.features_svcr.ListHotlistsByUser, mc,
                                request)

    self.assertEqual(0, len(response.hotlists))
Exemple #21
0
  def testListHotlistsByUser_Empty(self):
    """There are no hotlists for the given user."""
    # Public hostlist owned by '*****@*****.**'
    self.services.features.CreateHotlist(
        self.cnxn, 'Fake-Hotlist', 'Summary', 'Description',
        owner_ids=[111], editor_ids=[222])

    # Query for issues for '*****@*****.**'
    user_ref = common_pb2.UserRef(user_id=444)
    request = features_pb2.ListHotlistsByUserRequest(user=user_ref)

    # We're authenticated as '*****@*****.**'
    mc = monorailcontext.MonorailContext(
        self.services, cnxn=self.cnxn, requester='*****@*****.**')
    response = self.CallWrapped(self.features_svcr.ListHotlistsByUser, mc,
                                request)

    self.assertEqual(0, len(response.hotlists))
Exemple #22
0
  def testUpdateHotlistIssueNote_NotAllowed(self):
    hotlist = self.services.features.CreateHotlist(
        self.cnxn, 'Hotlist-1', 'Summary', 'Description', owner_ids=[222],
        editor_ids=[])
    self.services.features.AddIssuesToHotlists(
        self.cnxn,
        [hotlist.hotlist_id], [(self.issue_1.issue_id, 222, 0, '')],
        None, None, None)

    request = features_pb2.UpdateHotlistIssueNoteRequest(
        hotlist_ref=common_pb2.HotlistRef(
            name='Hotlist-1',
            owner=common_pb2.UserRef(user_id=222)),
        issue_ref=common_pb2.IssueRef(
            project_name='proj',
            local_id=1),
        note='Note')

    mc = monorailcontext.MonorailContext(
        self.services, cnxn=self.cnxn, requester='*****@*****.**')
    with self.assertRaises(permissions.PermissionException):
      self.CallWrapped(self.features_svcr.UpdateHotlistIssueNote, mc, request)
Exemple #23
0
  def testListHotlistsByUser_SearchByEmail(self):
    """We can get a list of hotlists for a given email."""
    # Public hostlist owned by '*****@*****.**'
    self.services.features.CreateHotlist(
        self.cnxn, 'Fake-Hotlist', 'Summary', 'Description',
        owner_ids=[111], editor_ids=[222])

    # Query for issues for '*****@*****.**'
    user_ref = common_pb2.UserRef(display_name='*****@*****.**')
    request = features_pb2.ListHotlistsByUserRequest(user=user_ref)

    # We're authenticated as '*****@*****.**'
    mc = monorailcontext.MonorailContext(self.services, cnxn=self.cnxn)

    response = self.CallWrapped(self.features_svcr.ListHotlistsByUser, mc,
                                request)
    self.assertEqual(1, len(response.hotlists))
    hotlist = response.hotlists[0]
    self.assertEqual(111, hotlist.owner_ref.user_id)
    self.assertEqual('*****@*****.**', hotlist.owner_ref.display_name)
    self.assertEqual('Fake-Hotlist', hotlist.name)
    self.assertEqual('Summary', hotlist.summary)
    self.assertEqual('Description', hotlist.description)
Exemple #24
0
  def testUpdateHotlistIssueNote(self):
    hotlist = self.services.features.CreateHotlist(
        self.cnxn, 'Hotlist-1', 'Summary', 'Description', owner_ids=[111],
        editor_ids=[])
    self.services.features.AddIssuesToHotlists(
        self.cnxn,
        [hotlist.hotlist_id], [(self.issue_1.issue_id, 111, 0, '')],
        None, None, None)

    request = features_pb2.UpdateHotlistIssueNoteRequest(
        hotlist_ref=common_pb2.HotlistRef(
            name='Hotlist-1',
            owner=common_pb2.UserRef(user_id=111)),
        issue_ref=common_pb2.IssueRef(
            project_name='proj',
            local_id=1),
        note='Note')

    mc = monorailcontext.MonorailContext(
        self.services, cnxn=self.cnxn, requester='*****@*****.**')
    self.CallWrapped(self.features_svcr.UpdateHotlistIssueNote, mc, request)

    self.assertEqual('Note', hotlist.items[0].note)