blob: f4783f129d42f9d08e33b685a370b4f5bd52a769 [file]
# Copyright 2018 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
"""Tests for the users servicer."""
import unittest
import mox
from components.prpc import codes
from components.prpc import context
from components.prpc import server
from api import users_servicer
from api.api_proto import common_pb2
from api.api_proto import users_pb2
from api.api_proto import user_objects_pb2
from framework import authdata
from framework import monorailcontext
from testing import fake
from services import service_manager
class UsersServicerTest(unittest.TestCase):
def setUp(self):
self.mox = mox.Mox()
self.cnxn = fake.MonorailConnection()
self.services = service_manager.Services(
config=fake.ConfigService(),
issue=fake.IssueService(),
user=fake.UserService(),
user_star=fake.UserStarService(),
usergroup=fake.UserGroupService(),
project=fake.ProjectService(),
features=fake.FeaturesService())
self.project = self.services.project.TestAddProject('proj', project_id=987)
self.user = self.services.user.TestAddUser('owner@example.com', 111L)
self.user_2 = self.services.user.TestAddUser('test2@example.com', 222L)
self.users_svcr = users_servicer.UsersServicer(
self.services, make_rate_limiter=False)
self.prpc_context = context.ServicerContext()
self.prpc_context.set_code(codes.StatusCode.OK)
def tearDown(self):
self.mox.UnsetStubs()
self.mox.ResetAll()
def CallWrapped(self, wrapped_handler, *args, **kwargs):
return wrapped_handler.wrapped(self.users_svcr, *args, **kwargs)
def testGetUser_Normal(self):
"""We can get a user by email address."""
request = common_pb2.UserRef(display_name='test2@example.com', user_id=222L)
mc = monorailcontext.MonorailContext(
self.services, cnxn=self.cnxn, requester='owner@example.com')
response = self.CallWrapped(self.users_svcr.GetUser, mc, request)
self.assertEqual('test2@example.com', response.email)
self.assertEqual(222L, response.user_id)
def testListCommits_Normal(self):
"""We can get user commits"""
request = users_pb2.GetUserCommitsRequest(email="test@example.com",
from_timestamp=1, until_timestamp=3)
mc = monorailcontext.MonorailContext(
self.services, cnxn=self.cnxn, requester='owner@example.com')
response = self.CallWrapped(self.users_svcr.GetUserCommits, mc, request)
actual_0 = response.user_commits[0]
actual_1 = response.user_commits[1]
expected_0 = user_objects_pb2.Commit(commit_sha="mysha2",
author_id=3784859778, commit_time=2, commit_message="hi",
commit_repo_url="repo")
expected_1 = user_objects_pb2.Commit(commit_sha="mysha1",
author_id=3784859778, commit_time=1, commit_message="hi",
commit_repo_url="repo")
self.assertEqual(expected_0, actual_0)
self.assertEqual(expected_1, actual_1)
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.
emails=['test2@example.com', 'ghost@example.com', ''])
mc = monorailcontext.MonorailContext(
self.services, cnxn=self.cnxn, requester='owner@example.com')
response = self.CallWrapped(
self.users_svcr.ListReferencedUsers, mc, request)
self.assertEqual(len(response.users), 1)
self.assertEqual(response.users[0].user_id, 222L)
def CallGetStarCount(self):
request = users_pb2.GetUserStarCountRequest(
user_ref=common_pb2.UserRef(user_id=222L))
mc = monorailcontext.MonorailContext(
self.services, cnxn=self.cnxn, requester='owner@example.com')
response = self.CallWrapped(
self.users_svcr.GetUserStarCount, mc, request)
return response.star_count
def CallStar(self, requester='owner@example.com', starred=True):
request = users_pb2.StarUserRequest(
user_ref=common_pb2.UserRef(user_id=222L), 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 testStarCount_Normal(self):
self.assertEqual(0, self.CallGetStarCount())
self.assertEqual(1, self.CallStar())
self.assertEqual(1, self.CallGetStarCount())
def testStarCount_StarTwiceSameUser(self):
self.assertEqual(1, self.CallStar())
self.assertEqual(1, self.CallStar())
self.assertEqual(1, self.CallGetStarCount())
def testStarCount_StarTwiceDifferentUser(self):
self.assertEqual(1, self.CallStar())
self.assertEqual(2, self.CallStar(requester='test2@example.com'))
self.assertEqual(2, self.CallGetStarCount())
def testStarCount_RemoveStarTwiceSameUser(self):
self.assertEqual(1, self.CallStar())
self.assertEqual(1, self.CallGetStarCount())
self.assertEqual(0, self.CallStar(starred=False))
self.assertEqual(0, self.CallStar(starred=False))
self.assertEqual(0, self.CallGetStarCount())
def testStarCount_RemoveStarTwiceDifferentUser(self):
self.assertEqual(1, self.CallStar())
self.assertEqual(2, self.CallStar(requester='test2@example.com'))
self.assertEqual(2, self.CallGetStarCount())
self.assertEqual(1, self.CallStar(starred=False))
self.assertEqual(
0, self.CallStar(requester='test2@example.com', starred=False))
self.assertEqual(0, self.CallGetStarCount())