def setUp(self): self.testbed = testbed.Testbed() self.testbed.activate() self.testbed.init_memcache_stub() self.mox = mox.Mox() self.cnxn = self.mox.CreateMock(sql.MonorailConnection) self.cache_manager = fake.CacheManager() self.config_service = self.mox.CreateMock(config_svc.ConfigService) self.project_service = MakeProjectService(self.cache_manager, self.mox) self.proj1 = fake.Project(project_name='proj1', project_id=123) self.proj2 = fake.Project(project_name='proj2', project_id=234)
def testGetStarredIssues_CrossProject(self): services = service_manager.Services( config=fake.ConfigService(), issue=fake.IssueService(), issue_star=fake.IssueStarService()) project = fake.Project(project_name='proj', project_id=789) mr = testing_helpers.MakeMonorailRequest( project=project, user_info={'user_id': 111L}) mr.query = 'project=proj,otherproj' # User has not starred anything yet. self.assertEqual(set(), issuelist._GetStarredIssues( mr.cnxn, mr.auth.user_id, services)) # User starred 2 issues in 1 project, and 1 in another project. # Other users have also starred stuff. cnxn = 'fake connection' config = services.config.GetProjectConfig(cnxn, project.project_id) services.issue_star.SetStar( cnxn, services, config, 100001, 111L, True) services.issue_star.SetStar( cnxn, services, config, 100002, 111L, True) services.issue_star.SetStar( cnxn, services, config, 100002, 999L, True) services.issue_star.SetStar( cnxn, services, config, 100099, 999L, True) services.issue_star.SetStar( cnxn, services, config, 200001, 111L, True) services.issue_star.SetStar( cnxn, services, config, 200001, 999L, True) services.issue_star.SetStar( cnxn, services, config, 200099, 999L, True) self.assertEqual( {100001, 100002, 200001}, issuelist._GetStarredIssues(mr.cnxn, mr.auth.user_id, services))
def testMaybeRedirectToBrandedDomain_AvoidRedirLoops(self): """Don't redirect for a branded project if already redirected.""" project = fake.Project(project_name='proj') request, _mr = testing_helpers.GetRequestObjects( path='/p/proj/path?redir=1', project=project) # No redirect happens. self.page_class._MaybeRedirectToBrandedDomain(request, 'proj')
def setUp(self): self.project = fake.Project(project_name='proj1') self.commenter_view = framework_views.StuffUserView( 111, '*****@*****.**', True) self.issue = fake.MakeTestIssue(self.project.project_id, 1234, 'summary', 'New', 111) self.detail_url = 'http://test-detail-url.com/id=1234'
def testQueryIssueSnapshots_InvalidGroupBy(self): """Make sure the `group_by` argument is checked.""" project = fake.Project(project_id=789) perms = permissions.USER_PERMISSIONSET search_helpers.GetPersonalAtRiskLabelIDs(self.cnxn, None, self.config_service, [10, 20], project, perms).AndReturn([91, 81]) self.services.chart._QueryToWhere(mox.IgnoreArg(), mox.IgnoreArg(), mox.IgnoreArg(), mox.IgnoreArg(), mox.IgnoreArg(), mox.IgnoreArg()).AndReturn( ([], [], [])) self.mox.ReplayAll() with self.assertRaises(ValueError): self.services.chart.QueryIssueSnapshots(self.cnxn, self.services, unixtime=1514764800, effective_ids=[10, 20], project=project, perms=perms, group_by='rutabaga', label_prefix='rutabaga') self.mox.VerifyAll()
def testQueryIssueSnapshots_LabelsNotLoggedInUser(self): """Tests fetching burndown snapshot counts grouped by labels for a user who is not logged in. Also no restricted labels are present. """ project = fake.Project(project_id=789) perms = permissions.READ_ONLY_PERMISSIONSET search_helpers.GetPersonalAtRiskLabelIDs(self.cnxn, None, self.config_service, set([]), project, perms).AndReturn([91, 81]) cols = [ 'Lab.label', 'IssueSnapshot.issue_id', ] left_joins = [ ('Issue ON IssueSnapshot.issue_id = Issue.id', []), ('Issue2Label AS Forbidden_label' ' ON Issue.id = Forbidden_label.issue_id' ' AND Forbidden_label.label_id IN (%s,%s)', [91, 81]), ('IssueSnapshot2Label AS Is2l' ' ON Is2l.issuesnapshot_id = IssueSnapshot.id', []), ('LabelDef AS Lab ON Lab.id = Is2l.label_id', []), ] where = [ ('IssueSnapshot.period_start <= %s', [1514764800]), ('IssueSnapshot.period_end > %s', [1514764800]), ('IssueSnapshot.project_id = %s', [789]), ('Issue.is_spam = %s', [False]), ('Issue.deleted = %s', [False]), ('Forbidden_label.label_id IS NULL', []), ('LOWER(Lab.label) LIKE %s', ['foo-%']), ] group_by = ['Lab.label'] stmt, stmt_args = self.services.chart._BuildSnapshotQuery(cols, where, left_joins, group_by, shard_id=0) self.services.chart._QueryToWhere(mox.IgnoreArg(), mox.IgnoreArg(), mox.IgnoreArg(), mox.IgnoreArg(), mox.IgnoreArg(), mox.IgnoreArg()).AndReturn( ([], [], [])) self.cnxn.Execute(stmt, stmt_args, shard_id=0).AndReturn([]) self._verifySQL(cols, left_joins, where, group_by) self.mox.ReplayAll() self.services.chart.QueryIssueSnapshots(self.cnxn, self.services, unixtime=1514764800, effective_ids=set([]), project=project, perms=perms, group_by='label', label_prefix='Foo') self.mox.VerifyAll()
def setUp(self): self.config = tracker_bizobj.MakeDefaultProjectIssueConfig(789) self.services = service_manager.Services(user=fake.UserService()) self.mr = testing_helpers.MakeMonorailRequest(project=fake.Project(), services=self.services) self.mr.cnxn = fake.MonorailConnection() self.errors = template_helpers.EZTError()
def testGatherHelpData_Normal(self): project = fake.Project(project_name='proj') _request, mr = testing_helpers.GetRequestObjects(path='/p/proj', project=project) help_data = self.page_class.GatherHelpData(mr, {}) self.assertEqual(None, help_data['cue']) self.assertEqual(None, help_data['account_cue'])
def setUp(self): self.services = service_manager.Services() self.servlet = redirects.SourceRedirect(webapp2.Request.blank('url'), webapp2.Response(), services=self.services) self.project = fake.Project() self.servlet.mr = testing_helpers.MakeMonorailRequest( project=self.project)
def testMaybeRedirectToBrandedDomain_AlreadyOnBrandedHost(self): """Don't redirect for a branded project if already on branded domain.""" project = fake.Project(project_name='proj') request, _mr = testing_helpers.GetRequestObjects(path='/p/proj/path', project=project) request.host = 'branded.example.com' # No redirect happens. self.page_class._MaybeRedirectToBrandedDomain(request, 'proj')
def testQueryIssueSnapshots_NoRestrictedLabels(self): """Test a label burndown query when the project has no restricted labels.""" project = fake.Project(project_id=789) perms = permissions.USER_PERMISSIONSET search_helpers.GetPersonalAtRiskLabelIDs(self.cnxn, None, self.config_service, [10, 20], project, perms).AndReturn([]) cols = [ 'Lab.label', 'IssueSnapshot.issue_id', ] left_joins = [ ('Issue ON IssueSnapshot.issue_id = Issue.id', []), ('Issue2Cc AS I2cc' ' ON Issue.id = I2cc.issue_id' ' AND I2cc.cc_id IN (%s,%s)', [10, 20]), ('IssueSnapshot2Label AS Is2l' ' ON Is2l.issuesnapshot_id = IssueSnapshot.id', []), ('LabelDef AS Lab ON Lab.id = Is2l.label_id', []), ] where = [ ('IssueSnapshot.period_start <= %s', [1514764800]), ('IssueSnapshot.period_end > %s', [1514764800]), ('IssueSnapshot.project_id = %s', [789]), ('Issue.is_spam = %s', [False]), ('Issue.deleted = %s', [False]), ('(Issue.reporter_id IN (%s,%s)' ' OR Issue.owner_id IN (%s,%s)' ' OR I2cc.cc_id IS NOT NULL)', [10, 20, 10, 20]), ('LOWER(Lab.label) LIKE %s', ['foo-%']), ] group_by = ['Lab.label'] stmt, stmt_args = self.services.chart._BuildSnapshotQuery(cols, where, left_joins, group_by, shard_id=0) self.services.chart._QueryToWhere(mox.IgnoreArg(), mox.IgnoreArg(), mox.IgnoreArg(), mox.IgnoreArg(), mox.IgnoreArg(), mox.IgnoreArg()).AndReturn( ([], [], [])) self.cnxn.Execute(stmt, stmt_args, shard_id=0).AndReturn([]) self._verifySQL(cols, left_joins, where, group_by) self.mox.ReplayAll() self.services.chart.QueryIssueSnapshots(self.cnxn, self.services, unixtime=1514764800, effective_ids=[10, 20], project=project, perms=perms, group_by='label', label_prefix='Foo') self.mox.VerifyAll()
def testCheckForMovedProject_NoRedirect(self): project = fake.Project(project_name='proj', state=project_pb2.ProjectState.LIVE) request, mr = testing_helpers.GetRequestObjects(path='/p/proj', project=project) self.page_class._CheckForMovedProject(mr, request) request, mr = testing_helpers.GetRequestObjects( path='/p/proj/source/browse/p/adminAdvanced', project=project) self.page_class._CheckForMovedProject(mr, request)
def testReplaceRevisionRef_CustomURL(self): """A project can override the URL used for revision links.""" project = fake.Project() project.revision_url_format = 'http://example.com/+/{revnum}' result = self.DoReplaceRevisionRef('This is a fix for r%s' % self.GIT_HASH_1, project=project) self.assertEquals('http://example.com/+/%s' % self.GIT_HASH_1, result[0].href) self.assertEquals('r%s' % self.GIT_HASH_1, result[0].content)
def testGatherHelpData_ChildAccount(self): """Display a warning when user is signed in to a child account.""" project = fake.Project(project_name='proj') _request, mr = testing_helpers.GetRequestObjects(path='/p/proj', project=project) mr.auth.user_pb.linked_parent_id = 111 help_data = self.page_class.GatherHelpData(mr, {}) self.assertEqual(None, help_data['cue']) self.assertEqual('switch_to_parent_account', help_data['account_cue']) self.assertEqual('*****@*****.**', help_data['parent_email'])
def testGatherHelpData_VacationReminder(self): project = fake.Project(project_name='proj') _request, mr = testing_helpers.GetRequestObjects(path='/p/proj', project=project) mr.auth.user_pb.vacation_message = 'Gone skiing' help_data = self.page_class.GatherHelpData(mr, {}) self.assertEqual('you_are_on_vacation', help_data['cue']) mr.auth.user_pb.dismissed_cues = ['you_are_on_vacation'] help_data = self.page_class.GatherHelpData(mr, {}) self.assertEqual(None, help_data['cue'])
def testGatherDebugData_Visibility(self): project = fake.Project(project_name='testtest', state=project_pb2.ProjectState.LIVE) _request, mr = testing_helpers.GetRequestObjects( path='/p/foo/servlet_path', project=project) debug_data = self.page_class.GatherDebugData(mr, {}) self.assertEqual('off', debug_data['dbg']) _request, mr = testing_helpers.GetRequestObjects( path='/p/foo/servlet_path?debug=1', project=project) debug_data = self.page_class.GatherDebugData(mr, {}) self.assertEqual('on', debug_data['dbg'])
def setUp(self): self.features = fake.FeaturesService() self.user = fake.UserService() self.services = service_manager.Services(features=self.features, user=self.user, issue=fake.IssueService()) self.project = fake.Project(project_name='proj') self.config = 'fake config' self.cnxn = 'fake cnxn' self.mox = mox.Mox() self.mock_task_queue = MockTaskQueue() self.mox.StubOutWithMock(taskqueue, 'add')
def testMaybeRedirectToBrandedDomain_Localhost(self): """Don't redirect for a branded project on localhost.""" project = fake.Project(project_name='proj') request, _mr = testing_helpers.GetRequestObjects(path='/p/proj/path', project=project) request.host = 'localhost:8080' # No redirect happens. self.page_class._MaybeRedirectToBrandedDomain(request, 'proj') request.host = '0.0.0.0:8080' # No redirect happens. self.page_class._MaybeRedirectToBrandedDomain(request, 'proj')
def testMaybeRedirectToBrandedDomain_NotBranded(self): """Don't redirect for a non-branded project.""" project = fake.Project(project_name='other') request, _mr = testing_helpers.GetRequestObjects( path='/p/other/path?query', project=project) request.host = 'branded.example.com' # But other project is unbranded. with self.assertRaises(webapp2.HTTPException) as cm: self.page_class._MaybeRedirectToBrandedDomain(request, 'other') self.assertEqual(302, cm.exception.code) # forms redirect on success self.assertEqual( 'https://bugs.chromium.org/p/other/path?query&redir=1', cm.exception.location)
def testGetPersonalAtRiskLabelIDs_Admin(self): """Test returns nothing for an admin (who can view everything).""" self.user.is_site_admin = True self.mox.ReplayAll() ids = search_helpers.GetPersonalAtRiskLabelIDs( self.cnxn, self.user, self.config_service, effective_ids=[10, 20], project=fake.Project(project_id=789), perms=permissions.ADMIN_PERMISSIONSET) self.mox.VerifyAll() self.assertEqual(ids, [])
def setUp(self): self.services = service_manager.Services( config=fake.ConfigService(), project=fake.ProjectService(), user=fake.UserService(), template=Mock(spec=TemplateService)) self.services.user.TestAddUser('*****@*****.**', 111) self.servlet = projectexport.ProjectExportJSON('req', 'res', services=self.services) self.project = fake.Project(project_id=789) self.mr = testing_helpers.MakeMonorailRequest( perms=permissions.OWNER_ACTIVE_PERMISSIONSET) self.mr.auth.user_pb.is_site_admin = True self.mr.project = self.project
def setUp(self): self.config = tracker_bizobj.MakeDefaultProjectIssueConfig(789) self.config.well_known_labels.append( tracker_pb2.LabelDef(label='OldLabel', label_docstring='Do not use any longer', deprecated=True)) self.services = service_manager.Services( usergroup=fake.UserGroupService(), config=fake.ConfigService(), user=fake.UserService()) self.mr = testing_helpers.MakeMonorailRequest(project=fake.Project(), services=self.services) self.mr.cnxn = fake.MonorailConnection() self.errors = template_helpers.EZTError()
def testGatherHelpData_YouAreBouncing(self): project = fake.Project(project_name='proj') _request, mr = testing_helpers.GetRequestObjects(path='/p/proj', project=project) mr.auth.user_id = 111 mr.auth.user_pb.email_bounce_timestamp = 1497647529 help_data = self.page_class.GatherHelpData(mr, {}) self.assertEqual('your_email_bounced', help_data['cue']) self.page_class.services.user.SetUserPrefs( 'cnxn', 111, [user_pb2.UserPrefValue(name='your_email_bounced', value='true')]) help_data = self.page_class.GatherHelpData(mr, {}) self.assertEqual(None, help_data['cue']) self.assertEqual(None, help_data['account_cue'])
def testGatherHelpData_VacationReminder(self): project = fake.Project(project_name='proj') _request, mr = testing_helpers.GetRequestObjects(path='/p/proj', project=project) mr.auth.user_id = 111 mr.auth.user_pb.vacation_message = 'Gone skiing' help_data = self.page_class.GatherHelpData(mr, {}) self.assertEqual('you_are_on_vacation', help_data['cue']) self.page_class.services.user.SetUserPrefs( 'cnxn', 111, [user_pb2.UserPrefValue(name='you_are_on_vacation', value='true')]) help_data = self.page_class.GatherHelpData(mr, {}) self.assertEqual(None, help_data['cue']) self.assertEqual(None, help_data['account_cue'])
def testCheckForMovedProject_AdminAdvanced(self): """We do not redirect away from the page that edits project state.""" project = fake.Project(project_name='proj', moved_to='http://example.com') request, mr = testing_helpers.GetRequestObjects( path='/p/proj/adminAdvanced', project=project) self.page_class._CheckForMovedProject(mr, request) request, mr = testing_helpers.GetRequestObjects( path='/p/proj/adminAdvanced?ts=123234', project=project) self.page_class._CheckForMovedProject(mr, request) request, mr = testing_helpers.GetRequestObjects( path='/p/proj/adminAdvanced.do', project=project) self.page_class._CheckForMovedProject(mr, request)
def testCheckForMovedProject_Redirect(self): project = fake.Project(project_name='proj', moved_to='http://example.com') request, mr = testing_helpers.GetRequestObjects(path='/p/proj', project=project) with self.assertRaises(webapp2.HTTPException) as cm: self.page_class._CheckForMovedProject(mr, request) self.assertEqual(302, cm.exception.code) # redirect because project moved request, mr = testing_helpers.GetRequestObjects( path='/p/proj/source/browse/p/adminAdvanced', project=project) with self.assertRaises(webapp2.HTTPException) as cm: self.page_class._CheckForMovedProject(mr, request) self.assertEqual(302, cm.exception.code) # redirect because project moved
def testQueryIssueSnapshots_Labels(self): """Test a burndown query from a regular user grouping by label.""" project = fake.Project(project_id=789) perms = permissions.PermissionSet(['BarPerm']) search_helpers.GetPersonalAtRiskLabelIDs(self.cnxn, None, self.config_service, [10, 20], project, perms).AndReturn([91, 81]) cols = [ 'Lab.label', 'IssueSnapshot.issue_id', ] left_joins = self.defaultLeftJoins + [ ('IssueSnapshot2Label AS Is2l' ' ON Is2l.issuesnapshot_id = IssueSnapshot.id', []), ('LabelDef AS Lab ON Lab.id = Is2l.label_id', []) ] where = self.defaultWheres + [ ('LOWER(Lab.label) LIKE %s', ['foo-%']), ] group_by = ['Lab.label'] stmt, stmt_args = self.services.chart._BuildSnapshotQuery(cols, where, left_joins, group_by, shard_id=0) self.services.chart._QueryToWhere(mox.IgnoreArg(), mox.IgnoreArg(), mox.IgnoreArg(), mox.IgnoreArg(), mox.IgnoreArg(), mox.IgnoreArg()).AndReturn( ([], [], [])) self.cnxn.Execute(stmt, stmt_args, shard_id=0).AndReturn([]) self._verifySQL(cols, left_joins, where, group_by) self.mox.ReplayAll() self.services.chart.QueryIssueSnapshots(self.cnxn, self.services, unixtime=1514764800, effective_ids=[10, 20], project=project, perms=perms, group_by='label', label_prefix='Foo') self.mox.VerifyAll()
def setUp(self): self.services = service_manager.Services(config=fake.ConfigService(), user=fake.UserService()) self.project = fake.Project(project_name='proj') self._ml_engine = FakeMLEngine(self) self._top_words = None self._components_by_index = None mock.patch('services.ml_helpers.setup_ml_engine', lambda: self._ml_engine).start() mock.patch('features.component_helpers._GetTopWords', lambda _: self._top_words).start() mock.patch('cloudstorage.open', self.cloudstorageOpen).start() mock.patch('settings.component_features', 5).start() self.addCleanup(mock.patch.stopall)
def setUp(self): self.project = fake.Project(project_name='proj1') self.project.process_inbound_email = True self.commenter_view = framework_views.StuffUserView( 111, '*****@*****.**', True) self.expected_html_footer = ( 'You received this message because:<br/> 1. reason<br/><br/>You may ' 'adjust your notification preferences at:<br/><a href="https://' 'example.com/hosting/settings">https://example.com/hosting/settings' '</a>') self.services = service_manager.Services(user=fake.UserService()) self.member = self.services.user.TestAddUser('*****@*****.**', 222) self.issue = fake.MakeTestIssue(self.project.project_id, 1234, 'summary', 'New', 111, project_name='proj1') self.detail_url = 'http://test-detail-url.com/id=1234'
def testMaybeRedirectToBrandedDomain_RedirBrandedProject(self): """We redirect for a branded project if the user typed a different host.""" project = fake.Project(project_name='proj') request, _mr = testing_helpers.GetRequestObjects(path='/p/proj/path', project=project) with self.assertRaises(webapp2.HTTPException) as cm: self.page_class._MaybeRedirectToBrandedDomain(request, 'proj') self.assertEqual(302, cm.exception.code) # forms redirect on success self.assertEqual('https://branded.example.com/p/proj/path?redir=1', cm.exception.location) request, _mr = testing_helpers.GetRequestObjects( path='/p/proj/path?query', project=project) with self.assertRaises(webapp2.HTTPException) as cm: self.page_class._MaybeRedirectToBrandedDomain(request, 'proj') self.assertEqual(302, cm.exception.code) # forms redirect on success self.assertEqual( 'https://branded.example.com/p/proj/path?query&redir=1', cm.exception.location)