Пример #1
0
    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)
Пример #2
0
  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))
Пример #3
0
 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')
Пример #4
0
 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'
Пример #5
0
    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()
Пример #6
0
    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()
Пример #7
0
 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()
Пример #8
0
 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'])
Пример #9
0
 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)
Пример #10
0
 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')
Пример #11
0
    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()
Пример #12
0
    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)
Пример #13
0
 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)
Пример #14
0
 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'])
Пример #15
0
    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'])
Пример #16
0
    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')
Пример #18
0
    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')
Пример #19
0
    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)
Пример #20
0
  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, [])
Пример #21
0
 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
Пример #22
0
    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()
Пример #23
0
    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'])
Пример #24
0
    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'])
Пример #25
0
    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)
Пример #26
0
    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
Пример #27
0
    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()
Пример #28
0
    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)
Пример #29
0
 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'
Пример #30
0
    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)