def testGetGroupSettings_SomeGroups(self): self.SetUpGetGroupSettings( [777, 888, 999], [(888, 'anyone', None, 0, 1, 0), (999, 'members', None, 0, 1, 0)]) self.mox.ReplayAll() actual_settings_dict = self.usergroup_service.GetAllGroupSettings( self.cnxn, [777, 888, 999]) self.mox.VerifyAll() self.assertEqual( {888: usergroup_pb2.MakeSettings('anyone'), 999: usergroup_pb2.MakeSettings('members')}, actual_settings_dict)
def GetAllUserGroupsInfo(self, cnxn): """Fetch (addr, member_count, usergroup_settings) for all user groups.""" group_rows = self.usergroupsettings_tbl.Select( cnxn, cols=['email'] + USERGROUPSETTINGS_COLS, left_joins=[('User ON UserGroupSettings.group_id = User.user_id', [])]) count_rows = self.usergroup_tbl.Select(cnxn, cols=['group_id', 'COUNT(*)'], group_by=['group_id']) count_dict = dict(count_rows) group_ids = [g[1] for g in group_rows] friends_dict = self.GetAllGroupFriendProjects(cnxn, group_ids) user_group_info_tuples = [ (email, count_dict.get(group_id, 0), usergroup_pb2.MakeSettings(visiblity, group_type, last_sync_time, friends_dict.get(group_id, []), bool(notify_members), bool(notify_group)), group_id) for (email, group_id, visiblity, group_type, last_sync_time, notify_members, notify_group) in group_rows ] return user_group_info_tuples
def GetAllUserGroupsInfo(self, cnxn): """Fetch (addr, member_count, usergroup_settings) for all user groups.""" group_rows = self.usergroupsettings_tbl.Select( cnxn, cols=[ 'group_id', 'email', 'who_can_view_members', 'external_group_type', 'last_sync_time' ], left_joins=[('User ON UserGroupSettings.group_id = User.user_id', [])]) count_rows = self.usergroup_tbl.Select(cnxn, cols=['group_id', 'COUNT(*)'], group_by=['group_id']) count_dict = dict(count_rows) group_ids = [g[0] for g in group_rows] friends_dict = self.GetAllGroupFriendProjects(cnxn, group_ids) user_group_info_tuples = [ (email, count_dict.get(group_id, 0), usergroup_pb2.MakeSettings(visiblity, group_type, last_sync_time, friends_dict.get(group_id, [])), group_id) for (group_id, email, visiblity, group_type, last_sync_time) in group_rows ] return user_group_info_tuples
def testMakeSettings_Defaults(self): usergroup = usergroup_pb2.MakeSettings('anyone') self.assertEqual(usergroup_pb2.MemberVisibility.ANYONE, usergroup.who_can_view_members) self.assertIsNone(usergroup.ext_group_type) self.assertEqual(0, usergroup.last_sync_time) self.assertEqual([], usergroup.friend_projects)
def testUpdateSettings_WithFriends(self): self.SetUpUpdateSettings(888L, 'anyone', friend_projects=[789]) self.mox.ReplayAll() self.usergroup_service.UpdateSettings( self.cnxn, 888L, usergroup_pb2.MakeSettings('anyone', friend_projects=[789])) self.mox.VerifyAll()
def testUpdateSettings_Import(self): self.SetUpUpdateSettings(888, 'owners', 'mdb') self.mox.ReplayAll() self.usergroup_service.UpdateSettings( self.cnxn, 888, usergroup_pb2.MakeSettings('owners', 'mdb')) self.mox.VerifyAll()
def testConstructor(self): group_settings = usergroup_pb2.MakeSettings('anyone') view = sitewide_views.GroupView('groupname', 123, group_settings, 999) self.assertEqual('groupname', view.name) self.assertEqual(123, view.num_members) self.assertEqual('ANYONE', view.who_can_view_members) self.assertEqual('/g/999/', view.detail_url)
def testConvertGroupSettings(self): """Test convert_group_settings.""" setting = usergroup_pb2.MakeSettings('owners', 'mdb', 0) result = api_pb2_v1_helpers.convert_group_settings('test-group', setting) self.assertEquals('test-group', result.groupName) self.assertEquals( setting.who_can_view_members, result.who_can_view_members) self.assertEquals(setting.ext_group_type, result.ext_group_type) self.assertEquals(setting.last_sync_time, result.last_sync_time)
def testMakeSettings_Everything(self): usergroup = usergroup_pb2.MakeSettings('Members', ext_group_type_str='mdb', last_sync_time=1234567890, friend_projects=[789]) self.assertEqual(usergroup_pb2.MemberVisibility.MEMBERS, usergroup.who_can_view_members) self.assertEqual(usergroup_pb2.GroupType.MDB, usergroup.ext_group_type) self.assertEqual(1234567890, usergroup.last_sync_time) self.assertEqual([789], usergroup.friend_projects)
def GetAllGroupSettings(self, cnxn, group_ids): """Fetch {group_id: group_settings} for the specified groups.""" # TODO(jrobbins): add settings to control who can join, etc. rows = self.usergroupsettings_tbl.Select(cnxn, cols=USERGROUPSETTINGS_COLS, group_id=group_ids) friends_dict = self.GetAllGroupFriendProjects(cnxn, group_ids) settings_dict = { group_id: usergroup_pb2.MakeSettings(vis, group_type, last_sync_time, friends_dict.get(group_id, [])) for group_id, vis, group_type, last_sync_time in rows } return settings_dict
def CreateGroup(self, cnxn, services, group_name, who_can_view_members, ext_group_type=None, friend_projects=None): """Create a new user group. Args: cnxn: connection to SQL database. services: connections to backend services. group_name: string email address of the group to create. who_can_view_members: 'owners', 'members', or 'anyone'. ext_group_type: The type of external group to import. friend_projects: The project ids declared as group friends to view its members. Returns: int group_id of the new group. """ friend_projects = friend_projects or [] assert who_can_view_members in ('owners', 'members', 'anyone') if ext_group_type: ext_group_type = str(ext_group_type).lower() assert ext_group_type in GROUP_TYPE_ENUM, ext_group_type assert who_can_view_members == 'owners' group_id = services.user.LookupUserID(cnxn, group_name.lower(), autocreate=True, allowgroups=True) group_settings = usergroup_pb2.MakeSettings(who_can_view_members, ext_group_type, 0, friend_projects) self.UpdateSettings(cnxn, group_id, group_settings) self.group_id_cache.InvalidateAll(cnxn) return group_id
def testUpdateSettings_Normal(self): self.SetUpUpdateSettings(888L, 'anyone') self.mox.ReplayAll() self.usergroup_service.UpdateSettings( self.cnxn, 888L, usergroup_pb2.MakeSettings('anyone')) self.mox.VerifyAll()