Exemple #1
0
    def setUp(self):
        self.default_cols = 'a b c'
        self.builtin_cols = 'a b x y z'
        self.config = tracker_bizobj.MakeDefaultProjectIssueConfig(789)

        self.art1 = fake.MakeTestIssue(
            789,
            1,
            'a summary',
            '',
            0,
            derived_owner_id=111,
            star_count=12,
            derived_labels='Priority-Medium Hot Mstone-1 Mstone-2',
            derived_status='Overdue')
        self.art2 = fake.MakeTestIssue(
            789,
            1,
            'a summary',
            'New',
            111,
            star_count=12,
            merged_into=200001,
            labels='Priority-Medium Type-DEFECT Hot Mstone-1 Mstone-2')
        self.users_by_id = {
            111: framework_views.StuffUserView(111, '*****@*****.**', True),
        }
Exemple #2
0
  def testIssuesCommentsInsert_MergeInto(self):
    """Insert comment that merges an issue into another issue."""

    self.services.project.TestAddProject(
        'test-project', owner_ids=[2], committer_ids=[1],
        project_id=12345)

    issue1 = fake.MakeTestIssue(
        12345, 1, 'Issue 1', 'New', 2, project_name='test-project')
    issue2 = fake.MakeTestIssue(
        12345, 2, 'Issue 2', 'New', 2, project_name='test-project')
    self.services.issue.TestAddIssue(issue1)
    self.services.issue.TestAddIssue(issue2)

    self.request['updates'] = {
        'summary': 'new summary',
        'status': 'Duplicate',
        'owner': '*****@*****.**',
        'cc': ['*****@*****.**'],
        'labels': ['add_label', '-remove_label'],
        'mergedInto': '2',
        }
    resp = self.call_api('issues_comments_insert', self.request).json_body
    self.assertEqual('*****@*****.**', resp['author']['name'])
    self.assertEqual('Updated', resp['updates']['status'])
    self.assertEqual(issue2.issue_id, issue1.merged_into)
    issue2_comments = self.services.issue.GetCommentsForIssue(
      'cnxn', issue2.issue_id)
    self.assertEqual(2, len(issue2_comments))  # description and merge
Exemple #3
0
    def testMakeLabelValuesDict(self):
        art = fake.MakeTestIssue(
            789,
            1,
            'a summary',
            '',
            0,
            derived_owner_id=111,
            star_count=12,
            labels=['Priority-Medium', 'Hot', 'Mstone-1', 'Mstone-2'])
        label_values = grid_view_helpers.MakeLabelValuesDict(art)
        self.assertEqual({
            'priority': ['Medium'],
            'mstone': ['1', '2']
        }, label_values)

        art = fake.MakeTestIssue(789,
                                 1,
                                 'a summary',
                                 '',
                                 0,
                                 derived_owner_id=111,
                                 star_count=12,
                                 labels='Priority-Medium Hot Mstone-1'.split(),
                                 derived_labels=['Mstone-2'])
        label_values = grid_view_helpers.MakeLabelValuesDict(art)
        self.assertEqual({
            'priority': ['Medium'],
            'mstone': ['1', '2']
        }, label_values)
Exemple #4
0
    def testPreprocessBlockingCond_WithMultipleProjectIDs_NoPrefix(self):
        blocking_field = BUILTIN_ISSUE_FIELDS['blocking']
        self.services.project.TestAddProject('Project1', project_id=1)
        self.services.project.TestAddProject('Project2', project_id=2)
        issue1 = fake.MakeTestIssue(project_id=1,
                                    local_id=1,
                                    summary='sum',
                                    status='new',
                                    owner_id=2,
                                    issue_id=101)
        issue2 = fake.MakeTestIssue(project_id=2,
                                    local_id=2,
                                    summary='sum',
                                    status='new',
                                    owner_id=2,
                                    issue_id=102)
        self.services.issue.TestAddIssue(issue1)
        self.services.issue.TestAddIssue(issue2)

        for local_ids in (['1'], ['1', '2'], ['3']):
            cond = ast_pb2.MakeCond(ast_pb2.QueryOp.TEXT_HAS, [blocking_field],
                                    local_ids, [])
            with self.assertRaises(ValueError) as cm:
                ast2ast._PreprocessBlockingCond(self.cnxn, cond, [1, 2],
                                                self.services, None, True)
            self.assertEquals(
                'Searching for issues accross multiple/all projects without '
                'project prefixes is ambiguous and is currently not supported.',
                cm.exception.message)
Exemple #5
0
  def testIssuesCommentsInsert_Amendments(self):
    """Insert comments with amendments."""

    self.services.project.TestAddProject(
        'test-project', owner_ids=[2],
        project_id=12345)

    issue1 = fake.MakeTestIssue(
        12345, 1, 'Issue 1', 'New', 2, project_name='test-project')
    issue2 = fake.MakeTestIssue(
        12345, 2, 'Issue 2', 'New', 2, project_name='test-project')
    issue3 = fake.MakeTestIssue(
        12345, 3, 'Issue 3', 'New', 2, project_name='test-project')
    self.services.issue.TestAddIssue(issue1)
    self.services.issue.TestAddIssue(issue2)
    self.services.issue.TestAddIssue(issue3)

    self.request['updates'] = {
        'summary': 'new summary',
        'status': 'Started',
        'owner': '*****@*****.**',
        'cc': ['*****@*****.**'],
        'labels': ['add_label', '-remove_label'],
        'blockedOn': ['2'],
        'blocking': ['3'],
        }
    resp = self.call_api('issues_comments_insert', self.request).json_body
    self.assertEqual('*****@*****.**', resp['author']['name'])
    self.assertEqual('Updated', resp['updates']['status'])
    self.assertEqual(0, issue1.merged_into)
    def testGetAdjacentIssue_NextIssue(self):
        cur_issue = fake.MakeTestIssue(789,
                                       2,
                                       'sum',
                                       'New',
                                       111,
                                       issue_id=78902)
        next_issue = fake.MakeTestIssue(789,
                                        3,
                                        'sum',
                                        'New',
                                        111,
                                        issue_id=78903)
        prev_issue = fake.MakeTestIssue(789,
                                        1,
                                        'sum',
                                        'New',
                                        111,
                                        issue_id=78901)
        self.services.issue.TestAddIssue(cur_issue)
        self.services.issue.TestAddIssue(next_issue)
        self.services.issue.TestAddIssue(prev_issue)

        with self.work_env as we:
            we.FindIssuePositionInSearch = mock.Mock(
                return_value=[78901, 1, 78903, 3])

            actual_issue = issuedetailezt.GetAdjacentIssue(we,
                                                           cur_issue,
                                                           next_issue=True)
            self.assertEqual(next_issue, actual_issue)
            we.FindIssuePositionInSearch.assert_called_once_with(cur_issue)
Exemple #7
0
    def testPreprocessBlockingCond_WithMultipleProjectIDs(self):
        blocking_field = BUILTIN_ISSUE_FIELDS['blocking']
        blocking_id_field = BUILTIN_ISSUE_FIELDS['blocking_id']
        self.services.project.TestAddProject('Project1', project_id=1)
        self.services.project.TestAddProject('Project2', project_id=2)
        issue1 = fake.MakeTestIssue(project_id=1,
                                    local_id=1,
                                    summary='sum',
                                    status='new',
                                    owner_id=2,
                                    issue_id=101)
        issue2 = fake.MakeTestIssue(project_id=2,
                                    local_id=2,
                                    summary='sum',
                                    status='new',
                                    owner_id=2,
                                    issue_id=102)
        self.services.issue.TestAddIssue(issue1)
        self.services.issue.TestAddIssue(issue2)

        for local_ids, expected in ((['Project1:1'], [101]),
                                    (['Project1:1', 'Project2:2'], [101,
                                                                    102])):
            cond = ast_pb2.MakeCond(ast_pb2.QueryOp.TEXT_HAS, [blocking_field],
                                    local_ids, [])
            new_cond = ast2ast._PreprocessBlockingCond(self.cnxn, cond, [1, 2],
                                                       self.services, None,
                                                       True)
            self.assertEqual(ast_pb2.QueryOp.EQ, new_cond.op)
            self.assertEqual([blocking_id_field], new_cond.field_defs)
            self.assertEqual(expected, new_cond.int_values)
            self.assertEqual([], new_cond.str_values)
Exemple #8
0
    def testPreprocessMergedIntoCond_WithSingleProjectID(self):
        field = BUILTIN_ISSUE_FIELDS['mergedinto']
        id_field = BUILTIN_ISSUE_FIELDS['mergedinto_id']
        self.services.project.TestAddProject('Project1', project_id=1)
        issue1 = fake.MakeTestIssue(project_id=1,
                                    local_id=1,
                                    summary='sum',
                                    status='new',
                                    owner_id=2,
                                    issue_id=101)
        issue2 = fake.MakeTestIssue(project_id=1,
                                    local_id=2,
                                    summary='sum',
                                    status='new',
                                    owner_id=2,
                                    issue_id=102)
        self.services.issue.TestAddIssue(issue1)
        self.services.issue.TestAddIssue(issue2)

        for local_ids, expected in (
            (['1'], [101]),  # One existing issue.
            (['Project1:1'], [101]),  # One existing issue with project prefix.
            (['1', '2'], [101, 102]),  # Two existing issues.
            (['3'], [])):  # Non-existant issue.
            cond = ast_pb2.MakeCond(ast_pb2.QueryOp.TEXT_HAS, [field],
                                    local_ids, [])
            new_cond = ast2ast._PreprocessMergedIntoCond(
                self.cnxn, cond, [1], self.services, None, True)
            self.assertEqual(ast_pb2.QueryOp.EQ, new_cond.op)
            self.assertEqual([id_field], new_cond.field_defs)
            self.assertEqual(expected, new_cond.int_values)
            self.assertEqual([], new_cond.str_values)
Exemple #9
0
    def testPreprocessMergedIntoCond_WithExternalIssues(self):
        blocking_field = BUILTIN_ISSUE_FIELDS['mergedinto']
        blocking_id_field = BUILTIN_ISSUE_FIELDS['mergedinto_id']
        self.services.project.TestAddProject('Project1', project_id=1)
        issue1 = fake.MakeTestIssue(project_id=1,
                                    local_id=1,
                                    summary='sum',
                                    status='new',
                                    owner_id=2,
                                    issue_id=101)
        issue2 = fake.MakeTestIssue(project_id=1,
                                    local_id=2,
                                    summary='sum',
                                    status='new',
                                    owner_id=2,
                                    issue_id=102)
        self.services.issue.TestAddIssue(issue1)
        self.services.issue.TestAddIssue(issue2)

        for local_ids, expected_issues, expected_ext_issues in (([
                'b/1234'
        ], [], ['b/1234']), (['Project1:1', 'b/1234'], [101],
                             ['b/1234'
                              ]), (['1', 'b/1234', 'b/1551',
                                    'Project1:2'], [101,
                                                    102], ['b/1234',
                                                           'b/1551'])):
            cond = ast_pb2.MakeCond(ast_pb2.QueryOp.TEXT_HAS, [blocking_field],
                                    local_ids, [])
            new_cond = ast2ast._PreprocessMergedIntoCond(
                self.cnxn, cond, [1], self.services, None, True)
            self.assertEqual(ast_pb2.QueryOp.EQ, new_cond.op)
            self.assertEqual([blocking_id_field], new_cond.field_defs)
            self.assertEqual(expected_issues, new_cond.int_values)
            self.assertEqual(expected_ext_issues, new_cond.str_values)
Exemple #10
0
  def testProcessFormData_NormalEditIssues(self):
    issue4 = fake.MakeTestIssue(
        1, 4, 'issue_summary4', 'New', 222, project_name='project-name')
    self.services.issue.TestAddIssue(issue4)
    issue5 = fake.MakeTestIssue(
        1, 5, 'issue_summary5', 'New', 222, project_name='project-name')
    self.services.issue.TestAddIssue(issue5)

    post_data = fake.PostData(remove=['false'],
                              add_local_ids=['project-name:4, project-name:5'])
    url = self.servlet.ProcessFormData(self.mr, post_data)
    self.assertTrue('u/222/hotlists/hotlist' in url)
    self.assertEqual(len(self.test_hotlist.items), 5)
    self.assertEqual(
        self.test_hotlist.items[3].issue_id, issue4.issue_id)
    self.assertEqual(
        self.test_hotlist.items[4].issue_id, issue5.issue_id)

    post_data = fake.PostData(remove=['true'], remove_local_ids=[
        'project-name:4, project-name:1, project-name:2'])
    url = self.servlet.ProcessFormData(self.mr, post_data)
    self.assertTrue('u/222/hotlists/hotlist' in url)
    self.assertTrue(len(self.test_hotlist.items), 2)
    issue_ids = [issue.issue_id for issue in self.test_hotlist.items]
    self.assertTrue(issue5.issue_id in issue_ids)
    self.assertTrue(self.issue3.issue_id in issue_ids)
Exemple #11
0
    def testStoreIssueSnapshots_AllFieldsChanged(self):
        """Test that StoreIssueSnapshots inserts and updates previous
    issue snapshots correctly. This tests that all relations (labels,
    CCs, and components) are updated."""

        now_1 = 1517599888
        now_2 = 1517599999

        issue_1 = fake.MakeTestIssue(issue_id=78901,
                                     project_id=789,
                                     local_id=1,
                                     reporter_id=111,
                                     owner_id=111,
                                     summary='sum',
                                     status='Status1',
                                     labels=['Type-Defect'],
                                     component_ids=[11, 12],
                                     assume_stale=False,
                                     opened_timestamp=123456789,
                                     modified_timestamp=123456789,
                                     star_count=12,
                                     cc_ids=[222, 333],
                                     derived_cc_ids=[888])

        issue_2 = fake.MakeTestIssue(issue_id=78901,
                                     project_id=123,
                                     local_id=1,
                                     reporter_id=111,
                                     owner_id=222,
                                     summary='sum',
                                     status='Status2',
                                     labels=['Type-Enhancement'],
                                     component_ids=[13],
                                     assume_stale=False,
                                     opened_timestamp=123456789,
                                     modified_timestamp=123456789,
                                     star_count=12,
                                     cc_ids=[222, 444],
                                     derived_cc_ids=[888, 999])

        # Snapshot #1
        cc_rows_1 = [(5678, 222), (5678, 333), (5678, 888)]
        self.SetUpStoreIssueSnapshots(replace_now=now_1,
                                      component_ids=[11, 12],
                                      cc_rows=cc_rows_1)

        # Snapshot #2
        cc_rows_2 = [(5678, 222), (5678, 444), (5678, 888), (5678, 999)]
        self.SetUpStoreIssueSnapshots(replace_now=now_2,
                                      project_id=123,
                                      owner_id=222,
                                      component_ids=[13],
                                      cc_rows=cc_rows_2)

        self.mox.ReplayAll()
        self.services.chart.StoreIssueSnapshots(self.cnxn, [issue_1],
                                                commit=False)
        self.services.chart.StoreIssueSnapshots(self.cnxn, [issue_2],
                                                commit=False)
        self.mox.VerifyAll()
Exemple #12
0
 def __init__(self):
   issue1 = fake.MakeTestIssue(
       project_id=12345, local_id=1, owner_id=2, status='New', summary='sum')
   issue2 = fake.MakeTestIssue(
       project_id=12345, local_id=2, owner_id=2, status='New', summary='sum')
   self.allowed_results = [issue1, issue2]
   self.visible_results = [issue1]
   self.total_count = len(self.allowed_results)
   self.config = None
   self.projectId = 0
Exemple #13
0
    def setUp(self):
        self.services = service_manager.Services(
            issue=fake.IssueService(),
            features=fake.FeaturesService(),
            issue_star=fake.AbstractStarService(),
            config=fake.ConfigService(),
            project=fake.ProjectService(),
            user=fake.UserService(),
            cache_manager=fake.CacheManager())
        self.services.project.TestAddProject('ProjectName', project_id=1)

        self.services.user.TestAddUser('*****@*****.**', 111)
        self.services.user.TestAddUser('*****@*****.**', 222)
        issue1 = fake.MakeTestIssue(1,
                                    1,
                                    'issue_summary',
                                    'New',
                                    111,
                                    project_name='ProjectName')
        self.services.issue.TestAddIssue(issue1)
        issue2 = fake.MakeTestIssue(1,
                                    2,
                                    'issue_summary2',
                                    'New',
                                    111,
                                    project_name='ProjectName')
        self.services.issue.TestAddIssue(issue2)
        issue3 = fake.MakeTestIssue(1,
                                    3,
                                    'issue_summary3',
                                    'New',
                                    222,
                                    project_name='ProjectName')
        self.services.issue.TestAddIssue(issue3)
        issues = [issue1, issue2, issue3]
        hotlist_items = [(issue.issue_id, rank, 222, None, '')
                         for rank, issue in enumerate(issues)]

        self.hotlist_items_list = [
            features_pb2.MakeHotlistItem(issue_id,
                                         rank=rank,
                                         adder_id=adder_id,
                                         date_added=date,
                                         note=note)
            for (issue_id, rank, adder_id, date, note) in hotlist_items
        ]
        self.test_hotlist = self.services.features.TestAddHotlist(
            'hotlist',
            hotlist_id=123,
            owner_ids=[111],
            hotlist_item_fields=hotlist_items)
        sorting.InitializeArtValues(self.services)
        self.mr = None
    def setUp(self):
        self.services = service_manager.Services(
            config=fake.ConfigService(),
            features=fake.FeaturesService(),
            issue=fake.IssueService(),
            user=fake.UserService(),
            project=fake.ProjectService())
        self.project = self.services.project.TestAddProject(
            'proj', project_id=987, committer_ids=[111])
        self.next_servlet = issuedetailezt.FlipperNext('req',
                                                       'res',
                                                       services=self.services)
        self.prev_servlet = issuedetailezt.FlipperPrev('req',
                                                       'res',
                                                       services=self.services)
        self.list_servlet = issuedetailezt.FlipperList('req',
                                                       'res',
                                                       services=self.services)
        mr = testing_helpers.MakeMonorailRequest(project=self.project)
        mr.local_id = 123
        mr.me_user_id = 111

        self.next_servlet.mr = mr
        self.prev_servlet.mr = mr
        self.list_servlet.mr = mr

        self.fake_issue_1 = fake.MakeTestIssue(987,
                                               123,
                                               'summary',
                                               'New',
                                               111,
                                               project_name='rutabaga')
        self.services.issue.TestAddIssue(self.fake_issue_1)
        self.fake_issue_2 = fake.MakeTestIssue(987,
                                               456,
                                               'summary',
                                               'New',
                                               111,
                                               project_name='rutabaga')
        self.services.issue.TestAddIssue(self.fake_issue_2)
        self.fake_issue_3 = fake.MakeTestIssue(987,
                                               789,
                                               'summary',
                                               'New',
                                               111,
                                               project_name='potato')
        self.services.issue.TestAddIssue(self.fake_issue_3)

        self.next_servlet.redirect = mock.Mock()
        self.prev_servlet.redirect = mock.Mock()
        self.list_servlet.redirect = mock.Mock()
Exemple #15
0
    def testExtractUniqueValues_DerivedValues(self):
        cols = ['priority', 'milestone', 'owner', 'status']
        users_by_id = {
            111: framework_views.StuffUserView(111, '*****@*****.**', True),
            222: framework_views.StuffUserView(222, '*****@*****.**', True),
            333: framework_views.StuffUserView(333, '*****@*****.**', True),
        }
        search_results = [
            fake.MakeTestIssue(789,
                               1,
                               'sum 1',
                               '',
                               111,
                               labels='Priority-High Milestone-1.0',
                               derived_labels='Milestone-2.0 Foo',
                               derived_status='Started'),
            fake.MakeTestIssue(
                789,
                2,
                'sum 2',
                'New',
                111,
                labels='Priority-High Milestone-1.0',
                derived_owner_id=333),  # Not seen because of owner_id
            fake.MakeTestIssue(789,
                               3,
                               'sum 3',
                               'New',
                               0,
                               labels='Priority-Low Milestone-1.1',
                               derived_owner_id=222),
        ]

        column_values = table_view_helpers.ExtractUniqueValues(
            cols, search_results, users_by_id, self.config, {})
        self.assertEquals(4, len(column_values))

        self.assertEquals('priority', column_values[0].column_name)
        self.assertEquals(['High', 'Low'], column_values[0].filter_values)

        self.assertEquals('milestone', column_values[1].column_name)
        self.assertEquals(['1.0', '1.1', '2.0'],
                          column_values[1].filter_values)

        self.assertEquals('owner', column_values[2].column_name)
        self.assertEquals(['*****@*****.**', '*****@*****.**'],
                          column_values[2].filter_values)

        self.assertEquals('status', column_values[3].column_name)
        self.assertEquals(['New', 'Started'], column_values[3].filter_values)
Exemple #16
0
  def setUp(self):
    self.testbed = testbed.Testbed()
    self.testbed.activate()
    self.testbed.init_memcache_stub()
    self.testbed.init_datastore_v3_stub()
    self.services = service_manager.Services(
        issue_star=fake.IssueStarService(),
        config=fake.ConfigService(),
        user=fake.UserService(),
        issue=fake.IssueService(),
        project=fake.ProjectService(),
        features=fake.FeaturesService(),
        cache_manager=fake.CacheManager(),
        hotlist_star=fake.HotlistStarService())
    self.servlet = hotlistissues.HotlistIssues(
        'req', 'res', services=self.services)
    self.user1 = self.services.user.TestAddUser('*****@*****.**', 111)
    self.user2 = self.services.user.TestAddUser('*****@*****.**', 222, )
    self.services.project.TestAddProject('project-name', project_id=1)
    self.issue1 = fake.MakeTestIssue(
        1, 1, 'issue_summary', 'New', 111, project_name='project-name')
    self.services.issue.TestAddIssue(self.issue1)
    self.issue2 = fake.MakeTestIssue(
        1, 2, 'issue_summary2', 'New', 111, project_name='project-name')
    self.services.issue.TestAddIssue(self.issue2)
    self.issue3 = fake.MakeTestIssue(
        1, 3, 'issue_summary3', 'New', 222, project_name='project-name')
    self.services.issue.TestAddIssue(self.issue3)
    self.issues = [self.issue1, self.issue2, self.issue3]
    self.hotlist_item_fields = [
        (issue.issue_id, rank, 111, 1205079300, '') for
        rank, issue in enumerate(self.issues)]
    self.test_hotlist = self.services.features.TestAddHotlist(
        'hotlist', hotlist_id=123, owner_ids=[222], editor_ids=[111],
        hotlist_item_fields=self.hotlist_item_fields)
    self.hotlistissues = self.test_hotlist.items
    # Unless perms is specified,
    # MakeMonorailRequest will return an mr with admin permissions.
    self.mr = testing_helpers.MakeMonorailRequest(
        hotlist=self.test_hotlist, path='/u/222/hotlists/123',
        services=self.services, perms=permissions.EMPTY_PERMISSIONSET)
    self.mr.hotlist_id = self.test_hotlist.hotlist_id
    self.mr.auth.user_id = 111
    self.mr.auth.effective_ids = {111}
    self.mr.viewed_user_auth.user_id = 111
    sorting.InitializeArtValues(self.services)

    self.mox = mox.Mox()
Exemple #17
0
    def testUnflagIssue_underThreshNoManualOverride(self):
        issue = fake.MakeTestIssue(project_id=789,
                                   local_id=1,
                                   reporter_id=111,
                                   owner_id=456,
                                   summary='sum',
                                   status='Live',
                                   issue_id=78901,
                                   is_spam=True)
        self.mock_report_tbl.Delete(self.cnxn,
                                    issue_id=[issue.issue_id],
                                    comment_id=None,
                                    user_id=111)
        self.mock_report_tbl.Select(self.cnxn,
                                    cols=['issue_id', 'COUNT(*)'],
                                    group_by=['issue_id'],
                                    issue_id=[78901]).AndReturn([
                                        (78901, settings.spam_flag_thresh - 1)
                                    ])

        self.mock_verdict_tbl.Select(
            self.cnxn,
            cols=['issue_id', 'reason', 'MAX(created)'],
            group_by=['issue_id'],
            comment_id=None,
            issue_id=[78901]).AndReturn([(78901, 'manual', '')])

        self.mox.ReplayAll()
        self.spam_service.FlagIssues(self.cnxn, self.issue_service, [issue],
                                     111, False)
        self.mox.VerifyAll()

        self.assertNotIn(issue, self.issue_service.updated_issues)
        self.assertEqual(True, issue.is_spam)
 def testConvertApprovalComment(self):
   """Test convert_approval_comment."""
   mar = mock.Mock()
   mar.cnxn = None
   mar.perms = permissions.PermissionSet([])
   issue = fake.MakeTestIssue(project_id=12345, local_id=1, summary='sum',
                              status='New', owner_id=1001)
   comment = tracker_pb2.IssueComment(
       user_id=111,
       content='test content',
       sequence=1,
       deleted_by=111,
       timestamp=1437700000,
   )
   result = api_pb2_v1_helpers.convert_approval_comment(
       issue, comment, mar, self.services, None)
   self.assertEquals('*****@*****.**', result.author.name)
   self.assertEquals(comment.content, result.content)
   self.assertEquals('*****@*****.**', result.deletedBy.name)
   self.assertEquals(1, result.id)
   # Ensure that the published timestamp falls in a timestamp range to account
   # for the test being run in different timezones.
   # Using "Fri, 23 Jul 2015 00:00:00" and "Fri, 25 Jul 2015 00:00:00".
   self.assertTrue(
       datetime.datetime(2015, 7, 23, 0, 0, 0) <= result.published <=
       datetime.datetime(2015, 7, 25, 0, 0, 0))
   self.assertEqual(result.kind, 'monorail#approvalComment')
Exemple #19
0
    def testMakeEmailTasks_Owner(self):
        """The issue owner gets pinged and the email has expected content."""
        issue = fake.MakeTestIssue(789,
                                   1,
                                   'summary',
                                   'New',
                                   self.owner.user_id,
                                   issue_id=78901)
        self.services.issue.TestAddIssue(issue)
        now = int(time.time())
        self.SetUpFieldValues(issue, now)
        issue.project_name = 'proj'
        comment = self.MakePingComment()
        next_action_field_def = self.config.field_defs[0]
        pings = [(next_action_field_def, now)]
        users_by_id = framework_views.MakeAllUserViews(
            'fake cnxn', self.services.user,
            [self.owner.user_id, self.date_action_user.user_id])

        tasks = self.servlet._MakeEmailTasks('fake cnxn', issue, self.project,
                                             self.config, comment, [],
                                             'example-app.appspot.com',
                                             users_by_id, pings)
        self.assertEqual(1, len(tasks))
        notify_owner_task = tasks[0]
        self.assertEqual('*****@*****.**', notify_owner_task['to'])
        self.assertEqual('Follow up on issue 1 in proj: summary',
                         notify_owner_task['subject'])
        body = notify_owner_task['body']
        self.assertIn(comment.content, body)
        self.assertIn(next_action_field_def.docstring, body)
    def testMakeTableData_GroupBy(self):
        issue = fake.MakeTestIssue(789,
                                   1,
                                   'summary',
                                   'New',
                                   0,
                                   labels=['Type-Defect', 'Priority-Medium'])
        visible_results = [issue]

        # 2 columns -> 2 cells with 1 value in each cell, row is part of a 1-row
        # group of issues with type=defect.
        lower_columns = ['type', 'priority']
        table_data = issuelist._MakeTableData(visible_results, [],
                                              lower_columns, ['type'], {},
                                              CELL_FACTORIES, {}, self.config)
        self.assertEqual(1, len(table_data))
        row = table_data[0]
        self.assertEqual(len(lower_columns), len(row.cells))
        self.assertEqual(0, row.cells[0].col_index)
        self.assertEqual(1, len(row.cells[0].values))
        self.assertEqual('Defect', row.cells[0].values[0].item)
        self.assertEqual(1, row.cells[1].col_index)
        self.assertEqual(1, len(row.cells[1].values))
        self.assertEqual('Medium', row.cells[1].values[0].item)
        self.assertEqual(1, len(row.group.cells))
        self.assertEqual('Defect', row.group.cells[0].values[0].item)
    def setUp(self):
        self.services = service_manager.Services(
            project=fake.ProjectService(),
            config=fake.ConfigService(),
            usergroup=fake.UserGroupService(),
            issue=fake.IssueService(),
            issue_star=fake.IssueStarService(),
            cache_manager=fake.CacheManager(),
            features=fake.FeaturesService(),
            user=fake.UserService())
        self.servlet = issuelist.IssueList('req',
                                           'res',
                                           services=self.services)
        self.project = self.services.project.TestAddProject('proj')
        self.issue1 = fake.MakeTestIssue(1,
                                         1,
                                         'issue_summary',
                                         'New',
                                         111,
                                         project_name='proj')
        self.services.issue.TestAddIssue(self.issue1)
        self.mr = testing_helpers.MakeMonorailRequest(project=self.project)
        self.mr.project_name = self.project.project_name
        self.mr.auth.effective_ids = {111}
        self.mr.me_user_id = 111

        self.testbed = testbed.Testbed()
        self.testbed.activate()
        self.testbed.init_memcache_stub()
        self.testbed.init_datastore_v3_stub()
Exemple #22
0
    def testMakeEmailTasks_Starrer(self):
        """Users who starred the issue are notified iff they opt in."""
        issue = fake.MakeTestIssue(789, 1, 'summary', 'New', 0, issue_id=78901)
        self.services.issue.TestAddIssue(issue)
        now = int(time.time())
        self.SetUpFieldValues(issue, now)
        issue.project_name = 'proj'
        comment = self.MakePingComment()
        next_action_field_def = self.config.field_defs[0]
        pings = [(next_action_field_def, now)]

        starrer_333 = self.services.user.TestAddUser('*****@*****.**',
                                                     333)
        starrer_333.notify_starred_ping = True
        self.services.user.TestAddUser('*****@*****.**', 444)
        starrer_ids = [333, 444]
        users_by_id = framework_views.MakeAllUserViews(
            'fake cnxn', self.services.user,
            [self.owner.user_id, self.date_action_user.user_id], starrer_ids)

        tasks = self.servlet._MakeEmailTasks('fake cnxn', issue, self.project,
                                             self.config, comment, starrer_ids,
                                             'example-app.appspot.com',
                                             users_by_id, pings)
        self.assertEqual(1, len(tasks))
        notify_owner_task = tasks[0]
        self.assertEqual('*****@*****.**', notify_owner_task['to'])
    def setUp(self):
        self.mox = mox.Mox()
        self.mock_index = self.mox.CreateMockAnything()
        self.mox.StubOutWithMock(search, 'Index')
        self.docs = None
        self.cnxn = 'fake connection'
        self.user_service = fake.UserService()
        self.user_service.TestAddUser('*****@*****.**', 111)
        self.issue_service = fake.IssueService()
        self.config_service = fake.ConfigService()

        self.issue = fake.MakeTestIssue(123, 1, 'test summary', 'New', 111)
        self.issue_service.TestAddIssue(self.issue)
        self.comment = tracker_pb2.IssueComment(
            project_id=789,
            issue_id=self.issue.issue_id,
            user_id=111,
            content='comment content',
            attachments=[
                tracker_pb2.Attachment(filename='hello.c'),
                tracker_pb2.Attachment(filename='hello.h')
            ])
        self.issue_service.TestAddComment(self.comment, 1)
        self.users_by_id = framework_views.MakeAllUserViews(
            self.cnxn, self.user_service, [111])
Exemple #24
0
    def testConvertComment(self):
        """Test convert_comment."""

        svcs = service_manager.Services()
        svcs.user = fake.UserService()
        svcs.user.TestAddUser('*****@*****.**', 1)
        mar = mock.Mock()
        mar.cnxn = None
        issue = fake.MakeTestIssue(project_id=12345,
                                   local_id=1,
                                   summary='sum',
                                   status='New',
                                   owner_id=1001)

        comment = tracker_pb2.IssueComment(
            user_id=1,
            content='test content',
            sequence=1,
            deleted_by=1,
            timestamp=1437700000,
        )
        result = api_pb2_v1_helpers.convert_comment(issue, comment, mar, svcs,
                                                    None)
        self.assertEquals('*****@*****.**', result.author.name)
        self.assertEquals(comment.content, result.content)
        self.assertEquals('*****@*****.**', result.deletedBy.name)
        self.assertEquals(1, result.id)
        # Ensure that the published timestamp falls in a timestamp range to account
        # for the test being run in different timezones.
        # Using "Fri, 23 Jul 2015 00:00:00" and "Fri, 25 Jul 2015 00:00:00".
        self.assertTrue(
            datetime.datetime(2015, 7, 23, 0, 0, 0) <= result.published <=
            datetime.datetime(2015, 7, 25, 0, 0, 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'
 def setUp(self):
   self.testbed = testbed.Testbed()
   self.testbed.activate()
   self.testbed.init_memcache_stub()
   self.testbed.init_datastore_v3_stub()
   self.services = service_manager.Services(
       issue_star=fake.IssueStarService(),
       config=fake.ConfigService(),
       user=fake.UserService(),
       issue=fake.IssueService(),
       project=fake.ProjectService(),
       cache_manager=fake.CacheManager(),
       features=fake.FeaturesService())
   self.servlet = hotlistissuescsv.HotlistIssuesCsv(
       'req', webapp2.Response(), services=self.services)
   self.user1 = self.services.user.TestAddUser('*****@*****.**', 111)
   self.user2 = self.services.user.TestAddUser('*****@*****.**', 222)
   self.services.project.TestAddProject('project-name', project_id=1)
   self.issue1 = fake.MakeTestIssue(
       1, 1, 'issue_summary', 'New', 111, project_name='project-name')
   self.services.issue.TestAddIssue(self.issue1)
   self.issues = [self.issue1]
   self.hotlist_item_fields = [
       (issue.issue_id, rank, 111, 1205079300, '') for
       rank, issue in enumerate(self.issues)]
   self.hotlist = self.services.features.TestAddHotlist(
       'MyHotlist', hotlist_id=123, owner_ids=[222], editor_ids=[111],
       hotlist_item_fields=self.hotlist_item_fields)
   self._MakeMR('/u/222/hotlists/MyHotlist')
   sorting.InitializeArtValues(self.services)
Exemple #27
0
  def testIssuesGet_GetIssue(self):
    """Get the requested issue."""

    self.services.project.TestAddProject(
        'test-project', owner_ids=[2],
        project_id=12345)
    self.SetUpComponents(12345, 1, 'API')
    self.SetUpFieldDefs(1, 12345, 'Field1', tracker_pb2.FieldTypes.INT_TYPE)

    fv = tracker_pb2.FieldValue(
        field_id=1,
        int_value=11)
    issue1 = fake.MakeTestIssue(
        project_id=12345, local_id=1, owner_id=2, reporter_id=1, status='New',
        summary='sum', component_ids=[1], field_values=[fv])
    self.services.issue.TestAddIssue(issue1)

    resp = self.call_api('issues_get', self.request).json_body
    self.assertEqual(1, resp['id'])
    self.assertEqual('New', resp['status'])
    self.assertEqual('open', resp['state'])
    self.assertFalse(resp['canEdit'])
    self.assertTrue(resp['canComment'])
    self.assertEqual('*****@*****.**', resp['author']['name'])
    self.assertEqual('*****@*****.**', resp['owner']['name'])
    self.assertEqual('API', resp['components'][0])
    self.assertEqual('Field1', resp['fieldValues'][0]['fieldName'])
    self.assertEqual('11', resp['fieldValues'][0]['fieldValue'])
Exemple #28
0
  def testIssuesCommentsList_GetComments(self):
    """Get comments of requested issue."""

    self.services.project.TestAddProject(
        'test-project', owner_ids=[2],
        project_id=12345)

    issue1 = fake.MakeTestIssue(
        project_id=12345, local_id=1, summary='test summary', status='New',
        issue_id=10001, owner_id=2, reporter_id=1)
    self.services.issue.TestAddIssue(issue1)

    comment = tracker_pb2.IssueComment(
        id=123, issue_id=10001,
        project_id=12345, user_id=2,
        content='this is a comment',
        timestamp=1437700000)
    self.services.issue.TestAddComment(comment, 1)

    resp = self.call_api('issues_comments_list', self.request).json_body
    self.assertEqual(2, resp['totalResults'])
    comment1 = resp['items'][0]
    comment2 = resp['items'][1]
    self.assertEqual('*****@*****.**', comment1['author']['name'])
    self.assertEqual('test summary', comment1['content'])
    self.assertEqual('*****@*****.**', comment2['author']['name'])
    self.assertEqual('this is a comment', comment2['content'])
Exemple #29
0
    def testClassifyIssue_spam(self):
        issue = fake.MakeTestIssue(project_id=789,
                                   local_id=1,
                                   reporter_id=111,
                                   owner_id=456,
                                   summary='sum',
                                   status='Live',
                                   issue_id=78901,
                                   is_spam=True)
        self.spam_service._predict = lambda body: 1.0

        # Prevent missing service inits to fail the test.
        self.spam_service.ml_engine = True

        comment_pb = tracker_pb2.IssueComment()
        comment_pb.content = "this is spam"
        reporter = user_pb2.MakeUser(111, email='*****@*****.**')
        res = self.spam_service.ClassifyIssue(issue, comment_pb, reporter,
                                              False)
        self.assertEqual(1.0, res['confidence_is_spam'])

        reporter.email = '*****@*****.**'
        res = self.spam_service.ClassifyIssue(issue, comment_pb, reporter,
                                              False)
        self.assertEqual(1.0, res['confidence_is_spam'])

        reporter.email = '*****@*****.**'
        res = self.spam_service.ClassifyIssue(issue, comment_pb, reporter,
                                              False)
        self.assertEqual(1.0, res['confidence_is_spam'])
Exemple #30
0
    def testFlagIssues_underThresh(self):
        issue = fake.MakeTestIssue(project_id=789,
                                   local_id=1,
                                   reporter_id=111,
                                   owner_id=456,
                                   summary='sum',
                                   status='Live',
                                   issue_id=78901)

        self.mock_report_tbl.InsertRows(
            self.cnxn, ['issue_id', 'reported_user_id', 'user_id'],
            [(78901, 111, 111)],
            ignore=True)

        self.mock_report_tbl.Select(self.cnxn,
                                    cols=['issue_id', 'COUNT(*)'],
                                    group_by=['issue_id'],
                                    issue_id=[78901]).AndReturn([
                                        (78901, settings.spam_flag_thresh - 1)
                                    ])

        self.mock_verdict_tbl.Select(
            self.cnxn,
            cols=['issue_id', 'reason', 'MAX(created)'],
            group_by=['issue_id'],
            issue_id=[78901],
            comment_id=None).AndReturn([])

        self.mox.ReplayAll()
        self.spam_service.FlagIssues(self.cnxn, self.issue_service, [issue],
                                     111, True)
        self.mox.VerifyAll()

        self.assertNotIn(issue, self.issue_service.updated_issues)