blob: 4700e12a3e377061fe8cb359f564f878d32ef631 [file] [log] [blame]
Adrià Vilanova Martínezf19ea432024-01-23 20:20:52 +01001# Copyright 2016 The Chromium Authors
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
Copybara854996b2021-09-07 19:36:02 +00004
5"""Unit tests for servlet base class helper functions."""
6from __future__ import print_function
7from __future__ import division
8from __future__ import absolute_import
9
10import unittest
Adrià Vilanova Martínezac4a6442022-05-15 19:05:13 +020011import settings
Copybara854996b2021-09-07 19:36:02 +000012
13from google.appengine.ext import testbed
Adrià Vilanova Martínezf19ea432024-01-23 20:20:52 +010014from six.moves import urllib
Copybara854996b2021-09-07 19:36:02 +000015
16from framework import permissions
17from framework import servlet_helpers
Adrià Vilanova Martínezf19ea432024-01-23 20:20:52 +010018from mrproto import project_pb2
19from mrproto import tracker_pb2
Copybara854996b2021-09-07 19:36:02 +000020from testing import testing_helpers
21
22
23class EztDataTest(unittest.TestCase):
24
25 def testGetBannerTime(self):
26 """Tests GetBannerTime method."""
27 timestamp = [2019, 6, 13, 18, 30]
28
29 banner_time = servlet_helpers.GetBannerTime(timestamp)
30 self.assertEqual(1560450600, banner_time)
31
32
33class AssertBasePermissionTest(unittest.TestCase):
34
35 def testAccessGranted(self):
36 _, mr = testing_helpers.GetRequestObjects(path='/hosting')
37 # No exceptions should be raised.
38 servlet_helpers.AssertBasePermission(mr)
39
40 mr.auth.user_id = 123
41 # No exceptions should be raised.
42 servlet_helpers.AssertBasePermission(mr)
43 servlet_helpers.AssertBasePermissionForUser(
44 mr.auth.user_pb, mr.auth.user_view)
45
46 def testBanned(self):
47 _, mr = testing_helpers.GetRequestObjects(path='/hosting')
48 mr.auth.user_pb.banned = 'spammer'
49 self.assertRaises(
50 permissions.BannedUserException,
51 servlet_helpers.AssertBasePermissionForUser,
52 mr.auth.user_pb, mr.auth.user_view)
53 self.assertRaises(
54 permissions.BannedUserException,
55 servlet_helpers.AssertBasePermission, mr)
56
57 def testPlusAddressAccount(self):
58 _, mr = testing_helpers.GetRequestObjects(path='/hosting')
59 mr.auth.user_pb.email = 'mailinglist+spammer@chromium.org'
60 self.assertRaises(
61 permissions.BannedUserException,
62 servlet_helpers.AssertBasePermissionForUser,
63 mr.auth.user_pb, mr.auth.user_view)
64 self.assertRaises(
65 permissions.BannedUserException,
66 servlet_helpers.AssertBasePermission, mr)
67
68 def testNoAccessToProject(self):
69 project = project_pb2.Project()
70 project.project_name = 'proj'
71 project.access = project_pb2.ProjectAccess.MEMBERS_ONLY
72 _, mr = testing_helpers.GetRequestObjects(path='/p/proj/', project=project)
73 mr.perms = permissions.EMPTY_PERMISSIONSET
74 self.assertRaises(
75 permissions.PermissionException,
76 servlet_helpers.AssertBasePermission, mr)
77
Adrià Vilanova Martínezac4a6442022-05-15 19:05:13 +020078 def testPermForProject(self):
79 project = project_pb2.Project()
80 project.project_name = 'proj'
81 project.access = project_pb2.ProjectAccess.MEMBERS_ONLY
82 _, mr = testing_helpers.GetRequestObjects(path='/p/proj/', project=project)
83 mr.auth.user_pb.email = settings.borg_service_account
84 project_perm = servlet_helpers.CheckPermForProject(
85 mr, permissions.CREATE_GROUP, project)
86 self.assertTrue(project_perm)
87
Copybara854996b2021-09-07 19:36:02 +000088
89FORM_URL = 'http://example.com/issues/form.php'
90
91
92class ComputeIssueEntryURLTest(unittest.TestCase):
93
94 def setUp(self):
95 self.project = project_pb2.Project()
96 self.project.project_name = 'proj'
97 self.config = tracker_pb2.ProjectIssueConfig()
98 self.testbed = testbed.Testbed()
99 self.testbed.activate()
100 self.testbed.init_user_stub()
101 self.testbed.init_memcache_stub()
102 self.testbed.init_datastore_v3_stub()
103
104 def tearDown(self):
105 self.testbed.deactivate()
106
107 def testComputeIssueEntryURL_Normal(self):
108 _request, mr = testing_helpers.GetRequestObjects(
109 path='/p/proj/issues/detail?id=123&q=term',
110 project=self.project)
111
Adrià Vilanova Martínezde942802022-07-15 14:06:55 +0200112 url = servlet_helpers.ComputeIssueEntryURL(mr)
Copybara854996b2021-09-07 19:36:02 +0000113 self.assertEqual('/p/proj/issues/entry', url)
114
Adrià Vilanova Martínezde942802022-07-15 14:06:55 +0200115 def testComputeIssueEntryURL_Chromium(self):
Copybara854996b2021-09-07 19:36:02 +0000116 _request, mr = testing_helpers.GetRequestObjects(
Adrià Vilanova Martínezde942802022-07-15 14:06:55 +0200117 path='/p/chromium/issues/detail?id=123&q=term', project=self.project)
Copybara854996b2021-09-07 19:36:02 +0000118
Adrià Vilanova Martínezde942802022-07-15 14:06:55 +0200119 url = servlet_helpers.ComputeIssueEntryURL(mr)
Adrià Vilanova Martínezac4a6442022-05-15 19:05:13 +0200120 self.assertIn('/issues/wizard', url)
Copybara854996b2021-09-07 19:36:02 +0000121
122class IssueListURLTest(unittest.TestCase):
123
124 def setUp(self):
125 self.project = project_pb2.Project()
126 self.project.project_name = 'proj'
127 self.project.owner_ids = [111]
128 self.config = tracker_pb2.ProjectIssueConfig()
129 self.testbed = testbed.Testbed()
130 self.testbed.activate()
131 self.testbed.init_user_stub()
132 self.testbed.init_memcache_stub()
133 self.testbed.init_datastore_v3_stub()
134
135 def tearDown(self):
136 self.testbed.deactivate()
137
138 def testIssueListURL_NotCustomized(self):
139 _request, mr = testing_helpers.GetRequestObjects(
140 path='/p/proj/issues', project=self.project)
141
142 url = servlet_helpers.IssueListURL(mr, self.config)
143 self.assertEqual('/p/proj/issues/list', url)
144
145 def testIssueListURL_Customized_Nonmember(self):
146 _request, mr = testing_helpers.GetRequestObjects(
147 path='/p/proj/issues', project=self.project)
148 self.config.member_default_query = 'owner:me'
149
150 url = servlet_helpers.IssueListURL(mr, self.config)
151 self.assertEqual('/p/proj/issues/list', url)
152
153 def testIssueListURL_Customized_Member(self):
154 _request, mr = testing_helpers.GetRequestObjects(
155 path='/p/proj/issues', project=self.project,
156 user_info={'effective_ids': {111}})
157 self.config.member_default_query = 'owner:me'
158
159 url = servlet_helpers.IssueListURL(mr, self.config)
160 self.assertEqual('/p/proj/issues/list?q=owner%3Ame', url)
161
162 def testIssueListURL_Customized_RetainQS(self):
163 _request, mr = testing_helpers.GetRequestObjects(
164 path='/p/proj/issues', project=self.project,
165 user_info={'effective_ids': {111}})
166 self.config.member_default_query = 'owner:me'
167
168 url = servlet_helpers.IssueListURL(mr, self.config, query_string='')
169 self.assertEqual('/p/proj/issues/list?q=owner%3Ame', url)
170
171 url = servlet_helpers.IssueListURL(mr, self.config, query_string='q=Pri=1')
172 self.assertEqual('/p/proj/issues/list?q=Pri=1', url)
Adrià Vilanova Martínezac4a6442022-05-15 19:05:13 +0200173
174class ProjectIsRestrictedTest(unittest.TestCase):
175
176 def setUp(self):
177 self.project = project_pb2.Project()
178 self.project.project_name = 'proj'
179 self.config = tracker_pb2.ProjectIssueConfig()
180 self.testbed = testbed.Testbed()
181 self.testbed.activate()
182 self.testbed.init_user_stub()
183 self.testbed.init_memcache_stub()
184 self.testbed.init_datastore_v3_stub()
185
186 def tearDown(self):
187 self.testbed.deactivate()
188
189 def testProjectIsRestricted(self):
190 self.project.access = project_pb2.ProjectAccess.MEMBERS_ONLY
191 _request, mr = testing_helpers.GetRequestObjects(
192 path='/p/proj/issues/detail?id=123&q=term', project=self.project)
193 isRestrict = servlet_helpers.ProjectIsRestricted(mr)
194 self.assertTrue(isRestrict)
195
196 def testProjectIsNotRestricted(self):
197 self.project.access = project_pb2.ProjectAccess.ANYONE
198 _request, mr = testing_helpers.GetRequestObjects(
199 path='/p/proj/issues/detail?id=123&q=term', project=self.project)
200 isRestrict = servlet_helpers.ProjectIsRestricted(mr)
201 self.assertFalse(isRestrict)
202
203
204class ComputerCreateUrl(unittest.TestCase):
205
206 def setUp(self):
207 self.project = project_pb2.Project()
208 self.project.project_name = 'proj'
209 self.config = tracker_pb2.ProjectIssueConfig()
210 self.testbed = testbed.Testbed()
211 self.testbed.activate()
212 self.testbed.init_user_stub()
213 self.testbed.init_memcache_stub()
214 self.testbed.init_datastore_v3_stub()
215
216 def tearDown(self):
217 self.testbed.deactivate()
218
Adrià Vilanova Martínezde942802022-07-15 14:06:55 +0200219 def testCreateEscapedLoginUrlFromMR(self):
220 _, mr = testing_helpers.GetRequestObjects(
221 path='/p/proj/issues/detail?id=123&q=term', project=self.project)
222 mr.current_page_url_encoded = (
223 'https%3A%2F%2Fbugs.chromium.org'
Adrià Vilanova Martínezf19ea432024-01-23 20:20:52 +0100224 '%2Fp%2Fchromium%2Fissues%2Fentry%3F'
225 'template%3DBuild%2520Infrastructure%26'
226 'labels%3DRestrict-View-Google%2CInfra-Troopers')
Adrià Vilanova Martínezde942802022-07-15 14:06:55 +0200227 url = servlet_helpers.SafeCreateLoginURL(mr)
Adrià Vilanova Martínezf19ea432024-01-23 20:20:52 +0100228 double_encoded_query = (
229 'https%253A%252F%252Fbugs.chromium.org'
230 '%252Fp%252Fchromium%252Fissues%252Fentry%253F'
231 'template%253DBuild%252520Infrastructure%2526'
232 'labels%253DRestrict-View-Google%252CInfra-Troopers')
233 self.assertIn(double_encoded_query, url)
Adrià Vilanova Martínezac4a6442022-05-15 19:05:13 +0200234
235 def testCreateLogoutUrl(self):
236 _, mr = testing_helpers.GetRequestObjects(
237 path='/p/proj/issues/detail?id=123&q=term', project=self.project)
238 url = servlet_helpers.SafeCreateLogoutURL(mr)
239 self.assertIn('/Logout', url)