blob: f2946061cb5acb6427d63d4ffb6ab9246f48ff3d [file] [log] [blame]
Copybara854996b2021-09-07 19:36:02 +00001# Copyright 2016 The Chromium Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style
3# license that can be found in the LICENSE file or at
4# https://developers.google.com/open-source/licenses/bsd
5
6"""Unit test for User Group Detail servlet."""
7from __future__ import print_function
8from __future__ import division
9from __future__ import absolute_import
10
11import unittest
12
13from framework import exceptions
14from framework import permissions
15from services import service_manager
16from sitewide import groupdetail
17from testing import fake
18from testing import testing_helpers
19
20
21class GroupDetailTest(unittest.TestCase):
22 """Tests for the GroupDetail servlet."""
23
24 def setUp(self):
25 self.services = service_manager.Services(
26 project=fake.ProjectService(),
27 user=fake.UserService(),
28 usergroup=fake.UserGroupService())
29 self.services.user.TestAddUser('a@example.com', 111)
30 self.services.user.TestAddUser('b@example.com', 222)
31 self.services.user.TestAddUser('c@example.com', 333)
32 self.services.user.TestAddUser('group@example.com', 888)
33 self.services.usergroup.TestAddGroupSettings(888, 'group@example.com')
Adrià Vilanova Martínez9f9ade52022-10-10 23:20:11 +020034 self.servlet = groupdetail.GroupDetail(services=self.services)
Copybara854996b2021-09-07 19:36:02 +000035 self.mr = testing_helpers.MakeMonorailRequest()
36 self.mr.viewed_username = 'group@example.com'
37 self.mr.viewed_user_auth.user_id = 888
38
39 def testAssertBasePermission(self):
40 mr = testing_helpers.MakeMonorailRequest(
41 perms=permissions.GetPermissions(None, {}, None))
42 mr.viewed_user_auth.user_id = 888
43 mr.auth.effective_ids = set([111])
44 self.assertRaises(
45 permissions.PermissionException,
46 self.servlet.AssertBasePermission, mr)
47 self.services.usergroup.TestAddMembers(888, [111], 'member')
48 self.servlet.AssertBasePermission(mr)
49
50 def testAssertBasePermission_IgnoreNoSuchGroup(self):
51 """The permission check does not crash for non-existent user groups."""
52 mr = testing_helpers.MakeMonorailRequest(
53 perms=permissions.GetPermissions(None, {}, None))
54 mr.viewed_user_auth.user_id = 404
55 mr.auth.effective_ids = set([111])
56 self.servlet.AssertBasePermission(mr)
57
58 def testAssertBasePermission_IndirectMembership(self):
59 self.services.usergroup.TestAddGroupSettings(999, 'subgroup@example.com')
60 mr = testing_helpers.MakeMonorailRequest(
61 perms=permissions.GetPermissions(None, {}, None))
62 mr.viewed_user_auth.user_id = 888
63 mr.auth.effective_ids = set([111])
64 self.assertRaises(
65 permissions.PermissionException,
66 self.servlet.AssertBasePermission, mr)
67 self.services.usergroup.TestAddMembers(888, [999], 'member')
68 self.services.usergroup.TestAddMembers(999, [111], 'member')
69 self.servlet.AssertBasePermission(mr)
70
71 def testGatherPagData_ZeroMembers(self):
72 page_data = self.servlet.GatherPageData(self.mr)
73 pagination = page_data['pagination']
74 self.assertEqual(0, len(pagination.visible_results))
75
76 def testGatherPagData_NonzeroMembers(self):
77 self.services.usergroup.TestAddMembers(888, [111, 222, 333])
78 page_data = self.servlet.GatherPageData(self.mr)
79 pagination = page_data['pagination']
80 self.assertEqual(3, len(pagination.visible_results))
81 self.assertEqual(3, pagination.total_count)
82 self.assertEqual(1, pagination.start)
83 self.assertEqual(3, pagination.last)
84 user_view_a, user_view_b, user_view_c = pagination.visible_results
85 self.assertEqual('a@example.com', user_view_a.email)
86 self.assertEqual('b@example.com', user_view_b.email)
87 self.assertEqual('c@example.com', user_view_c.email)
88
89 def testProcessAddMembers_NoneAdded(self):
90 post_data = fake.PostData(addmembers=[''], role=['member'])
91 url = self.servlet.ProcessAddMembers(self.mr, post_data)
92 self.assertIn('/g/group@example.com/?', url)
93 members_after, _ = self.services.usergroup.LookupMembers('cnxn', [888])
94 self.assertEqual(0, len(members_after[888]))
95
96 self.services.usergroup.TestAddMembers(888, [111, 222, 333])
97 url = self.servlet.ProcessAddMembers(self.mr, post_data)
98 self.assertIn('/g/group@example.com/?', url)
99 members_after, _ = self.services.usergroup.LookupMembers('cnxn', [888])
100 self.assertEqual(3, len(members_after[888]))
101
102 def testProcessAddMembers_SomeAdded(self):
103 self.services.usergroup.TestAddMembers(888, [111])
104 post_data = fake.PostData(
105 addmembers=['b@example.com, c@example.com'], role=['member'])
106 url = self.servlet.ProcessAddMembers(self.mr, post_data)
107 self.assertIn('/g/group@example.com/?', url)
108 members_after, _ = self.services.usergroup.LookupMembers('cnxn', [888])
109 self.assertEqual(3, len(members_after[888]))
110
111 def testProcessRemoveMembers_SomeRemoved(self):
112 self.services.usergroup.TestAddMembers(888, [111, 222, 333])
113 post_data = fake.PostData(remove=['b@example.com', 'c@example.com'])
114 url = self.servlet.ProcessRemoveMembers(self.mr, post_data)
115 self.assertIn('/g/group@example.com/?', url)
116 members_after, _ = self.services.usergroup.LookupMembers('cnxn', [888])
117 self.assertEqual(1, len(members_after[888]))
118
119 def testProcessFormData_NoPermission(self):
120 """Group members cannot edit group."""
121 self.services.usergroup.TestAddMembers(888, [111], 'member')
122 mr = testing_helpers.MakeMonorailRequest(
123 perms=permissions.GetPermissions(None, {}, None))
124 mr.viewed_user_auth.user_id = 888
125 mr.auth.effective_ids = set([111])
126 self.assertRaises(permissions.PermissionException,
127 self.servlet.ProcessFormData, mr, {})
128
129 def testProcessFormData_OwnerPermission(self):
130 """Group owners cannot edit group."""
131 self.services.usergroup.TestAddMembers(888, [111], 'owner')
132 mr = testing_helpers.MakeMonorailRequest(
133 perms=permissions.GetPermissions(None, {}, None))
134 mr.viewed_user_auth.user_id = 888
135 mr.auth.effective_ids = set([111])
136 self.servlet.ProcessFormData(mr, {})
137
138 def testGatherPagData_NoSuchUserGroup(self):
139 """If there is no such user group, raise an exception."""
140 self.mr.viewed_user_auth.user_id = 404
141 self.assertRaises(
142 exceptions.NoSuchGroupException,
143 self.servlet.GatherPageData, self.mr)