| Index: appengine/monorail/services/test/user_svc_test.py
|
| diff --git a/appengine/monorail/services/test/user_svc_test.py b/appengine/monorail/services/test/user_svc_test.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..bf8b9e0fa338f04e808d26e2f6e11a0a6770dfd1
|
| --- /dev/null
|
| +++ b/appengine/monorail/services/test/user_svc_test.py
|
| @@ -0,0 +1,252 @@
|
| +# Copyright 2016 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 user service."""
|
| +
|
| +import unittest
|
| +
|
| +import mox
|
| +
|
| +from google.appengine.ext import testbed
|
| +
|
| +from framework import sql
|
| +from proto import user_pb2
|
| +from services import user_svc
|
| +from testing import fake
|
| +
|
| +
|
| +def SetUpGetUsers(user_service, cnxn):
|
| + """Set up expected calls to SQL tables."""
|
| + user_service.user_tbl.Select(
|
| + cnxn, cols=user_svc.USER_COLS, user_id=[333L]).AndReturn(
|
| + [(333L, 'c@example.com', False, False, False, 'Spammer',
|
| + 'stay_same_issue', False, False, False, True)])
|
| + user_service.actionlimit_tbl.Select(
|
| + cnxn, cols=user_svc.ACTIONLIMIT_COLS, user_id=[333L]).AndReturn([])
|
| + user_service.dismissedcues_tbl.Select(
|
| + cnxn, cols=user_svc.DISMISSEDCUES_COLS, user_id=[333L]).AndReturn([])
|
| +
|
| +
|
| +def MakeUserService(cache_manager, my_mox):
|
| + user_service = user_svc.UserService(cache_manager)
|
| + user_service.user_tbl = my_mox.CreateMock(sql.SQLTableManager)
|
| + user_service.actionlimit_tbl = my_mox.CreateMock(sql.SQLTableManager)
|
| + user_service.dismissedcues_tbl = my_mox.CreateMock(sql.SQLTableManager)
|
| + return user_service
|
| +
|
| +
|
| +class UserTwoLevelCacheTest(unittest.TestCase):
|
| +
|
| + def setUp(self):
|
| + self.testbed = testbed.Testbed()
|
| + self.testbed.activate()
|
| + self.testbed.init_memcache_stub()
|
| +
|
| + self.mox = mox.Mox()
|
| + self.cnxn = fake.MonorailConnection()
|
| + self.cache_manager = fake.CacheManager()
|
| + self.user_service = MakeUserService(self.cache_manager, self.mox)
|
| +
|
| + def testDeserializeUsersByID(self):
|
| + user_rows = [
|
| + (111L, 'a@example.com', False, False, False, '',
|
| + 'stay_same_issue', False, False, False, True),
|
| + (222L, 'b@example.com', False, False, False, '',
|
| + 'next_in_list', False, False, False, True),
|
| + ]
|
| + actionlimit_rows = []
|
| + dismissedcues_rows = []
|
| + user_dict = self.user_service.user_2lc._DeserializeUsersByID(
|
| + user_rows, actionlimit_rows, dismissedcues_rows)
|
| + self.assertEqual(2, len(user_dict))
|
| + self.assertEqual('a@example.com', user_dict[111L].email)
|
| + self.assertFalse(user_dict[111L].is_site_admin)
|
| + self.assertEqual('', user_dict[111L].banned)
|
| + self.assertFalse(user_dict[111L].notify_issue_change)
|
| + self.assertEqual('b@example.com', user_dict[222L].email)
|
| +
|
| + def testFetchItems(self):
|
| + SetUpGetUsers(self.user_service, self.cnxn)
|
| + self.mox.ReplayAll()
|
| + user_dict = self.user_service.user_2lc.FetchItems(self.cnxn, [333L])
|
| + self.mox.VerifyAll()
|
| + self.assertEqual([333L], user_dict.keys())
|
| + self.assertEqual('c@example.com', user_dict[333L].email)
|
| + self.assertFalse(user_dict[333L].is_site_admin)
|
| + self.assertEqual('Spammer', user_dict[333L].banned)
|
| +
|
| +
|
| +class UserServiceTest(unittest.TestCase):
|
| +
|
| + def setUp(self):
|
| + self.testbed = testbed.Testbed()
|
| + self.testbed.activate()
|
| + self.testbed.init_memcache_stub()
|
| +
|
| + self.mox = mox.Mox()
|
| + self.cnxn = fake.MonorailConnection()
|
| + self.cache_manager = fake.CacheManager()
|
| + self.user_service = MakeUserService(self.cache_manager, self.mox)
|
| +
|
| + def tearDown(self):
|
| + self.testbed.deactivate()
|
| + self.mox.UnsetStubs()
|
| + self.mox.ResetAll()
|
| +
|
| + def SetUpCreateUsers(self):
|
| + self.user_service.user_tbl.InsertRows(
|
| + self.cnxn,
|
| + ['user_id', 'email', 'obscure_email'],
|
| + [(3035911623, 'a@example.com', True),
|
| + (2996997680, 'b@example.com', True)]
|
| + ).AndReturn(None)
|
| +
|
| + def testCreateUsers(self):
|
| + self.SetUpCreateUsers()
|
| + self.mox.ReplayAll()
|
| + self.user_service._CreateUsers(
|
| + self.cnxn, ['a@example.com', 'b@example.com'])
|
| + self.mox.VerifyAll()
|
| +
|
| + def SetUpLookupUserEmails(self):
|
| + self.user_service.user_tbl.Select(
|
| + self.cnxn, cols=['user_id', 'email'], user_id=[222L]).AndReturn(
|
| + [(222L, 'b@example.com')])
|
| +
|
| + def testLookupUserEmails(self):
|
| + self.SetUpLookupUserEmails()
|
| + self.user_service.email_cache.CacheItem(
|
| + 111L, 'a@example.com')
|
| + self.mox.ReplayAll()
|
| + emails_dict = self.user_service.LookupUserEmails(
|
| + self.cnxn, [111L, 222L])
|
| + self.mox.VerifyAll()
|
| + self.assertEqual(
|
| + {111L: 'a@example.com', 222L: 'b@example.com'},
|
| + emails_dict)
|
| +
|
| + def testLookupUserEmail(self):
|
| + self.SetUpLookupUserEmails() # Same as testLookupUserEmails()
|
| + self.mox.ReplayAll()
|
| + email_addr = self.user_service.LookupUserEmail(self.cnxn, 222L)
|
| + self.mox.VerifyAll()
|
| + self.assertEqual('b@example.com', email_addr)
|
| +
|
| + def SetUpLookupUserIDs(self):
|
| + self.user_service.user_tbl.Select(
|
| + self.cnxn, cols=['email', 'user_id'],
|
| + email=['b@example.com']).AndReturn([('b@example.com', 222L)])
|
| +
|
| + def testLookupUserIDs(self):
|
| + self.SetUpLookupUserIDs()
|
| + self.user_service.user_id_cache.CacheItem(
|
| + 'a@example.com', 111L)
|
| + self.mox.ReplayAll()
|
| + user_id_dict = self.user_service.LookupUserIDs(
|
| + self.cnxn, ['a@example.com', 'b@example.com'])
|
| + self.mox.VerifyAll()
|
| + self.assertEqual(
|
| + {'a@example.com': 111L, 'b@example.com': 222L},
|
| + user_id_dict)
|
| +
|
| + def testLookupUserIDs_InvalidEmail(self):
|
| + self.user_service.user_tbl.Select(
|
| + self.cnxn, cols=['email', 'user_id'], email=['abc']).AndReturn([])
|
| + self.mox.ReplayAll()
|
| + user_id_dict = self.user_service.LookupUserIDs(
|
| + self.cnxn, ['abc'], autocreate=True)
|
| + self.mox.VerifyAll()
|
| + self.assertEqual({}, user_id_dict)
|
| +
|
| + def testLookupUserID(self):
|
| + self.SetUpLookupUserIDs() # Same as testLookupUserIDs()
|
| + self.user_service.user_id_cache.CacheItem('a@example.com', 111L)
|
| + self.mox.ReplayAll()
|
| + user_id = self.user_service.LookupUserID(self.cnxn, 'b@example.com')
|
| + self.mox.VerifyAll()
|
| + self.assertEqual(222, user_id)
|
| +
|
| + def testGetUsersByIDs(self):
|
| + SetUpGetUsers(self.user_service, self.cnxn)
|
| + user_a = user_pb2.User(email='a@example.com')
|
| + self.user_service.user_2lc.CacheItem(111L, user_a)
|
| + self.mox.ReplayAll()
|
| + user_dict = self.user_service.GetUsersByIDs(
|
| + self.cnxn, [111L, 333L])
|
| + self.mox.VerifyAll()
|
| + self.assertEqual(2, len(user_dict))
|
| + self.assertEqual('a@example.com', user_dict[111L].email)
|
| + self.assertFalse(user_dict[111L].is_site_admin)
|
| + self.assertFalse(user_dict[111L].banned)
|
| + self.assertTrue(user_dict[111L].notify_issue_change)
|
| + self.assertEqual('c@example.com', user_dict[333L].email)
|
| +
|
| + def testGetUser(self):
|
| + SetUpGetUsers(self.user_service, self.cnxn)
|
| + user_a = user_pb2.User(email='a@example.com')
|
| + self.user_service.user_2lc.CacheItem(111L, user_a)
|
| + self.mox.ReplayAll()
|
| + user = self.user_service.GetUser(self.cnxn, 333L)
|
| + self.mox.VerifyAll()
|
| + self.assertEqual('c@example.com', user.email)
|
| +
|
| + def SetUpUpdateUser(self):
|
| + delta = {
|
| + 'keep_people_perms_open': False,
|
| + 'preview_on_hover': True,
|
| + 'ignore_action_limits': False,
|
| + 'notify_issue_change': True,
|
| + 'after_issue_update': 'STAY_SAME_ISSUE',
|
| + 'notify_starred_issue_change': True,
|
| + 'is_site_admin': False,
|
| + 'banned': 'Turned spammer',
|
| + 'obscure_email': True,
|
| + }
|
| + self.user_service.user_tbl.Update(
|
| + self.cnxn, delta, user_id=111L, commit=False)
|
| +
|
| + self.user_service.actionlimit_tbl.Delete(
|
| + self.cnxn, user_id=111L, commit=False)
|
| + self.user_service.actionlimit_tbl.InsertRows(
|
| + self.cnxn, user_svc.ACTIONLIMIT_COLS, [], commit=False)
|
| +
|
| + self.user_service.dismissedcues_tbl.Delete(
|
| + self.cnxn, user_id=111L, commit=False)
|
| + self.user_service.dismissedcues_tbl.InsertRows(
|
| + self.cnxn, user_svc.DISMISSEDCUES_COLS, [], commit=False)
|
| +
|
| + def testUpdateUser(self):
|
| + self.SetUpUpdateUser()
|
| + user_a = user_pb2.User(
|
| + email='a@example.com', banned='Turned spammer')
|
| + self.mox.ReplayAll()
|
| + self.user_service.UpdateUser(self.cnxn, 111L, user_a)
|
| + self.mox.VerifyAll()
|
| + self.assertFalse(self.user_service.user_2lc.HasItem(111L))
|
| +
|
| + def testUpdateUserSettings(self):
|
| + self.SetUpUpdateUser()
|
| + user_a = user_pb2.User(email='a@example.com')
|
| + self.mox.ReplayAll()
|
| + self.user_service.UpdateUserSettings(
|
| + self.cnxn, 111L, user_a, is_banned=True,
|
| + banned_reason='Turned spammer')
|
| + self.mox.VerifyAll()
|
| +
|
| +
|
| +class UserServiceFunctionsTest(unittest.TestCase):
|
| +
|
| + def testActionLimitToRow(self):
|
| + al = user_pb2.ActionLimit(
|
| + recent_count=1, reset_timestamp=123456, lifetime_count=9,
|
| + lifetime_limit=10, period_soft_limit=2, period_hard_limit=5)
|
| + action_kind = 3
|
| + row = user_svc._ActionLimitToRow(
|
| + 111, action_kind, al)
|
| + self.assertEqual((111, action_kind, 1, 123456, 9, 10, 2, 5), row)
|
| +
|
| +
|
| +if __name__ == '__main__':
|
| + unittest.main()
|
|
|