def testUsersInvolvedInIssues_Normal(self):
   issue1 = tracker_pb2.Issue(
       reporter_id=111L, owner_id=222L, cc_ids=[222L, 333L])
   issue2 = tracker_pb2.Issue(
       reporter_id=333L, owner_id=444L, derived_cc_ids=[222L, 444L])
   issue2.field_values = [tracker_pb2.FieldValue(user_id=555L)]
   self.assertEqual(
       set([0L, 111L, 222L, 333L, 444L, 555L]),
       tracker_bizobj.UsersInvolvedInIssues([issue1, issue2]))
Exemplo n.º 2
0
    def setUp(self):
        self.cnxn = 'fake cnxn'
        self.services = service_manager.Services(
            config=fake.ConfigService(),
            issue=fake.IssueService(),
            user=fake.UserService(),
            usergroup=fake.UserGroupService(),
            project=fake.ProjectService())
        self.project = self.services.project.TestAddProject(
            'proj',
            project_id=987,
            process_inbound_email=True,
            contrib_ids=[111])
        self.project_addr = '*****@*****.**'

        self.issue = tracker_pb2.Issue()
        self.issue.project_id = 987
        self.issue.local_id = 100
        self.services.issue.TestAddIssue(self.issue)

        self.msg = testing_helpers.MakeMessage(testing_helpers.HEADER_LINES,
                                               'awesome!')

        request, _ = testing_helpers.GetRequestObjects()
        self.inbound = inboundemail.InboundEmail(request, None, self.services)
        self.mox = mox.Mox()
Exemplo n.º 3
0
def _Issue(project_name, local_id, summary, status):
    issue = tracker_pb2.Issue()
    issue.project_name = project_name
    issue.local_id = local_id
    issue.summary = summary
    issue.status = status
    return issue
Exemplo n.º 4
0
    def setUp(self):
        self.services = service_manager.Services(
            config=fake.ConfigService(),
            issue=fake.IssueService(),
            user=fake.UserService(),
            project=fake.ProjectService(),
        )

        self.project_name = 'proj'
        self.project_id = 987
        self.project = self.services.project.TestAddProject(
            self.project_name,
            project_id=self.project_id,
            process_inbound_email=True)

        self.issue_id = 11
        self.issue_local_id = 100
        self.issue = tracker_pb2.Issue()
        self.issue.issue_id = self.issue_id
        self.issue.project_id = self.project_id
        self.issue.local_id = self.issue_local_id
        self.services.issue.TestAddIssue(self.issue)

        self.comment_id = 123
        self.comment_timestamp = 120
        self.user_id = 2
        self.mr_after = 1234

        self.mox = mox.Mox()
Exemplo n.º 5
0
    def PresubmitIssue(self, mc, request):
        """Provide the UI with warnings and suggestions."""
        project, issue, config = self._GetProjectIssueAndConfig(
            mc, request.issue_ref, issue_required=False)

        with mc.profiler.Phase('making user views'):
            try:
                proposed_owner_id = converters.IngestUserRef(
                    mc.cnxn, request.issue_delta.owner_ref, self.services.user)
            except exceptions.NoSuchUserException:
                proposed_owner_id = 0

            users_by_id = framework_views.MakeAllUserViews(
                mc.cnxn, self.services.user, [proposed_owner_id])
            proposed_owner_view = users_by_id[proposed_owner_id]

        with mc.profiler.Phase('Applying IssueDelta'):
            if issue:
                proposed_issue = copy.deepcopy(issue)
            else:
                proposed_issue = tracker_pb2.Issue(
                    owner_id=framework_constants.NO_USER_SPECIFIED,
                    project_id=config.project_id)
            issue_delta = converters.IngestIssueDelta(
                mc.cnxn,
                self.services,
                request.issue_delta,
                config,
                None,
                ignore_missing_objects=True)
            tracker_bizobj.ApplyIssueDelta(mc.cnxn, self.services.issue,
                                           proposed_issue, issue_delta, config)

        with mc.profiler.Phase('applying rules'):
            _, traces = filterrules_helpers.ApplyFilterRules(
                mc.cnxn, self.services, proposed_issue, config)
            logging.info('proposed_issue is now: %r', proposed_issue)
            logging.info('traces are: %r', traces)

        with mc.profiler.Phase('making derived user views'):
            derived_users_by_id = framework_views.MakeAllUserViews(
                mc.cnxn, self.services.user, [proposed_issue.derived_owner_id],
                proposed_issue.derived_cc_ids)
            framework_views.RevealAllEmailsToMembers(mc.auth, project,
                                                     derived_users_by_id)

        with mc.profiler.Phase('pair derived values with rule explanations'):
            (derived_labels, derived_owners, derived_ccs, warnings,
             errors) = (tracker_helpers.PairDerivedValuesWithRuleExplanations(
                 proposed_issue, traces, derived_users_by_id))

        result = issues_pb2.PresubmitIssueResponse(
            owner_availability=proposed_owner_view.avail_message_short,
            owner_availability_state=proposed_owner_view.avail_state,
            derived_labels=converters.ConvertValueAndWhyList(derived_labels),
            derived_owners=converters.ConvertValueAndWhyList(derived_owners),
            derived_ccs=converters.ConvertValueAndWhyList(derived_ccs),
            warnings=converters.ConvertValueAndWhyList(warnings),
            errors=converters.ConvertValueAndWhyList(errors))
        return result
Exemplo n.º 6
0
    def setUp(self):
        self.cnxn = 'fake cnxn'
        self.services = service_manager.Services(
            issue=fake.IssueService(),
            user=fake.UserService(),
            usergroup=fake.UserGroupService(),
            project=fake.ProjectService(),
            config=fake.ConfigService())

        self.member = self.services.user.TestAddUser('*****@*****.**', 111)
        self.outsider = self.services.user.TestAddUser('*****@*****.**',
                                                       222)
        self.project = self.services.project.TestAddProject(
            'proj',
            project_id=987,
            process_inbound_email=True,
            committer_ids=[self.member.user_id])
        self.issue = tracker_pb2.Issue()
        self.issue.issue_id = 98701
        self.issue.project_id = 987
        self.issue.local_id = 1
        self.issue.owner_id = 0
        self.issue.summary = 'summary'
        self.issue.status = 'Assigned'
        self.services.issue.TestAddIssue(self.issue)

        self.uia = commitlogcommands.UpdateIssueAction(self.issue.local_id)
Exemplo n.º 7
0
def MakeTestIssue(local_id, issue_id, summary, status=None):
    issue = tracker_pb2.Issue()
    issue.local_id = local_id
    issue.issue_id = issue_id
    issue.summary = summary
    if status:
        issue.status = status
    return issue
Exemplo n.º 8
0
    def setUp(self):
        self.testbed = testbed.Testbed()
        self.testbed.activate()
        self.testbed.init_app_identity_stub()

        services = service_manager.Services(project=fake.ProjectService(),
                                            config=fake.ConfigService(),
                                            issue=fake.IssueService(),
                                            user=fake.UserService())
        self.project = services.project.TestAddProject('proj')
        self.servlet = issueattachmenttext.AttachmentText('req',
                                                          'res',
                                                          services=services)

        self.issue = tracker_pb2.Issue()
        self.issue.local_id = 1
        self.issue.issue_id = 1
        self.issue.summary = 'sum'
        self.issue.project_name = 'proj'
        self.issue.project_id = self.project.project_id
        services.issue.TestAddIssue(self.issue)

        self.comment0 = tracker_pb2.IssueComment()
        self.comment0.content = 'this is the description'
        self.comment1 = tracker_pb2.IssueComment()
        self.comment1.content = 'this is a comment'

        self.attach0 = tracker_pb2.Attachment(
            attachment_id=4567,
            filename='b.txt',
            mimetype='text/plain',
            gcs_object_id='/pid/attachments/abcd')
        self.comment0.attachments.append(self.attach0)

        self.attach1 = tracker_pb2.Attachment(
            attachment_id=1234,
            filename='a.txt',
            mimetype='text/plain',
            gcs_object_id='/pid/attachments/abcdefg')
        self.comment0.attachments.append(self.attach1)

        self.bin_attach = tracker_pb2.Attachment(
            attachment_id=2468,
            mimetype='application/octets',
            gcs_object_id='/pid/attachments/\0\0\0\0\0\1\2\3')
        self.comment1.attachments.append(self.bin_attach)

        self.comment0.project_id = self.project.project_id
        services.issue.TestAddComment(self.comment0, self.issue.local_id)
        self.comment1.project_id = self.project.project_id
        services.issue.TestAddComment(self.comment1, self.issue.local_id)
        services.issue.TestAddAttachment(self.attach0, self.comment0.id,
                                         self.issue.issue_id)
        services.issue.TestAddAttachment(self.attach1, self.comment1.id,
                                         self.issue.issue_id)
        # TODO(jrobbins): add tests for binary content
        self._old_gcs_open = cloudstorage.open
        cloudstorage.open = fake.gcs_open
 def testGetGrantedPerms_NothingGranted(self):
   config = tracker_bizobj.MakeDefaultProjectIssueConfig(789)
   fd = tracker_pb2.FieldDef(field_id=1)  # Nothing granted
   config.field_defs = [fd]
   fv = tracker_pb2.FieldValue(field_id=1, user_id=222L)
   issue = tracker_pb2.Issue(field_values=[fv])
   self.assertEqual(
       set(),
       tracker_bizobj.GetGrantedPerms(issue, {111L, 222L}, config))
Exemplo n.º 10
0
 def testSplitBlockedOnRanks_BadTarget(self):
   issue = tracker_pb2.Issue()
   issue.blocked_on_iids = [78902, 78903, 78904]
   issue.blocked_on_ranks = [10, 20, 30]
   rank_rows = zip(issue.blocked_on_iids, issue.blocked_on_ranks)
   rank_rows.reverse()
   ret = tracker_bizobj.SplitBlockedOnRanks(
       issue, 78999, False, issue.blocked_on_iids)
   self.assertEqual(ret, (rank_rows, []))
Exemplo n.º 11
0
  def testGetStatus(self):
    issue = tracker_pb2.Issue()
    self.assertEquals(tracker_bizobj.GetStatus(issue), '')

    issue.derived_status = 'InReview'
    self.assertEquals(tracker_bizobj.GetStatus(issue), 'InReview')

    issue.status = 'Forgotten'
    self.assertEquals(tracker_bizobj.GetStatus(issue), 'Forgotten')
Exemplo n.º 12
0
  def testGetCcIds(self):
    issue = tracker_pb2.Issue()
    self.assertEquals(tracker_bizobj.GetCcIds(issue), [])

    issue.derived_cc_ids.extend([1, 2, 3])
    self.assertEquals(tracker_bizobj.GetCcIds(issue), [1, 2, 3])

    issue.cc_ids.extend([4, 5, 6])
    self.assertEquals(tracker_bizobj.GetCcIds(issue), [4, 5, 6, 1, 2, 3])
Exemplo n.º 13
0
def MakeTestIssue(project_id, local_id, owner_id, reporter_id, is_spam=False):
    issue = tracker_pb2.Issue()
    issue.project_id = project_id
    issue.local_id = local_id
    issue.issue_id = 1000 * project_id + local_id
    issue.owner_id = owner_id
    issue.reporter_id = reporter_id
    issue.is_spam = is_spam
    return issue
Exemplo n.º 14
0
 def testGetIssueComponentsAndAncestors_AffectsSomeComponents(self):
   config = tracker_bizobj.MakeDefaultProjectIssueConfig(789)
   cd = tracker_pb2.ComponentDef(component_id=1, path='UI')
   config.component_defs.append(cd)
   cd2 = tracker_pb2.ComponentDef(component_id=2, path='UI>Splash')
   config.component_defs.append(cd2)
   issue = tracker_pb2.Issue(component_ids=[2])
   actual = tracker_bizobj.GetIssueComponentsAndAncestors(issue, config)
   self.assertEqual([cd, cd2], actual)
Exemplo n.º 15
0
  def testGetOwnerId(self):
    issue = tracker_pb2.Issue()
    self.assertEquals(
        tracker_bizobj.GetOwnerId(issue), framework_constants.NO_USER_SPECIFIED)

    issue.derived_owner_id = 123
    self.assertEquals(tracker_bizobj.GetOwnerId(issue), 123)

    issue.owner_id = 456
    self.assertEquals(tracker_bizobj.GetOwnerId(issue), 456)
Exemplo n.º 16
0
  def testGetLabels(self):
    issue = tracker_pb2.Issue()
    self.assertEquals(tracker_bizobj.GetLabels(issue), [])

    issue.derived_labels.extend(['a', 'b', 'c'])
    self.assertEquals(tracker_bizobj.GetLabels(issue), ['a', 'b', 'c'])

    issue.labels.extend(['d', 'e', 'f'])
    self.assertEquals(tracker_bizobj.GetLabels(issue),
                      ['d', 'e', 'f', 'a', 'b', 'c'])
Exemplo n.º 17
0
    def testGetComponentCcIDs(self):
        issue = tracker_pb2.Issue()
        issues_components_cc_ids = component_helpers.GetComponentCcIDs(
            issue, self.config)
        self.assertEqual(set(), issues_components_cc_ids)

        issue.component_ids = [1, 2]
        issues_components_cc_ids = component_helpers.GetComponentCcIDs(
            issue, self.config)
        self.assertEqual({111, 222}, issues_components_cc_ids)
Exemplo n.º 18
0
 def testGetGrantedPerms_Normal(self):
   config = tracker_bizobj.MakeDefaultProjectIssueConfig(789)
   fd = tracker_pb2.FieldDef(field_id=1, grants_perm='Highlight')
   config.field_defs = [fd]
   fv = tracker_pb2.FieldValue(field_id=1, user_id=222L)
   issue = tracker_pb2.Issue(field_values=[fv])
   self.assertEqual(
       set(),
       tracker_bizobj.GetGrantedPerms(issue, {111L}, config))
   self.assertEqual(
       set(['highlight']),
       tracker_bizobj.GetGrantedPerms(issue, {111L, 222L}, config))
Exemplo n.º 19
0
class GetAllProjectsOfIssuesTest(unittest.TestCase):

    issue_x_1 = tracker_pb2.Issue()
    issue_x_1.project_id = 789

    issue_x_2 = tracker_pb2.Issue()
    issue_x_2.project_id = 789

    issue_y_1 = tracker_pb2.Issue()
    issue_y_1.project_id = 678

    def testGetAllProjectsOfIssues_Normal(self):
        issues = [self.issue_x_1, self.issue_x_2]
        self.assertEqual(hotlist_helpers.GetAllProjectsOfIssues(issues),
                         set([789]))
        issues = [self.issue_x_1, self.issue_x_2, self.issue_y_1]
        self.assertEqual(hotlist_helpers.GetAllProjectsOfIssues(issues),
                         set([678, 789]))

    def testGetAllProjectsOfIssues_Empty(self):
        self.assertEqual(hotlist_helpers.GetAllProjectsOfIssues([]), set())
Exemplo n.º 20
0
  def testExtractUniqueValues_ColumnsRobustness(self):
    cols = ['reporter', 'cc', 'owner', 'status', 'attachments']
    search_results = [
        tracker_pb2.Issue(),
        ]
    column_values = table_view_helpers.ExtractUniqueValues(
        cols, search_results, {}, self.config, {})

    self.assertEquals(5, len(column_values))
    for col_val in column_values:
      if col_val.column_name == 'attachments':
        self.assertEquals([0], col_val.filter_values)
      else:
        self.assertEquals([], col_val.filter_values)
    def setUp(self):
        self.cnxn = 'fake cnxn'
        self.services = service_manager.Services(issue=fake.IssueService(),
                                                 project=fake.ProjectService(),
                                                 config=fake.ConfigService())

        self.project = self.services.project.TestAddProject(
            'proj', project_id=987, process_inbound_email=True)
        self.issue = tracker_pb2.Issue()
        self.issue.project_id = 987
        self.issue.summary = 'summary'
        self.issue.status = 'Assigned'
        self.services.issue.TestAddIssue(self.issue)

        self.uia = commitlogcommands.UpdateIssueAction(self.issue.local_id)
        self.mox = mox.Mox()
Exemplo n.º 22
0
    def setUp(self):
        # services
        self.services = service_manager.Services(
            config=fake.ConfigService(),
            issue=fake.IssueService(),
            user=fake.UserService(),
            usergroup=fake.UserGroupService(),
            project=fake.ProjectService())

        # project
        self.project = self.services.project.TestAddProject(
            self.project_name,
            project_id=self.project_id,
            process_inbound_email=True,
            contrib_ids=[self.user_id])

        # sender
        self.auth = authdata.AuthData(user_id=self.user_id,
                                      email=self.from_addr)

        # issue
        self.issue = tracker_pb2.Issue(
            project_id=self.project_id,
            local_id=self.test_issue_local_id,
            summary=self.msg_subject,
            reporter_id=self.user_id,
            component_ids=[self.component_id],
            status=self.alert_props['status'],
            labels=self.alert_props['labels'],
        )
        self.services.issue.TestAddIssue(self.issue)

        # Patch send_notifications functions.
        self.notification_patchers = [
            patch('features.send_notifications.%s' % func, spec=True)
            for func in [
                'PrepareAndSendIssueBlockingNotification',
                'PrepareAndSendIssueChangeNotification',
            ]
        ]
        self.blocking_notification = self.notification_patchers[0].start()
        self.blocking_notification = self.notification_patchers[1].start()

        self.mox = mox.Mox()
Exemplo n.º 23
0
    def _ParseIssue(self, cnxn, project_id, user_id_dict, issue_json,
                    event_log):
        issue = tracker_pb2.Issue(
            project_id=project_id,
            local_id=issue_json['local_id'],
            reporter_id=user_id_dict[issue_json['reporter']],
            summary=issue_json['summary'],
            opened_timestamp=issue_json['opened'],
            modified_timestamp=issue_json['modified'],
            cc_ids=[
                user_id_dict[cc_email]
                for cc_email in issue_json.get('cc', [])
                if cc_email in user_id_dict
            ],
            status=issue_json.get('status', ''),
            labels=issue_json.get('labels', []),
            field_values=[
                self._ParseFieldValue(cnxn, project_id, user_id_dict, field)
                for field in issue_json.get('fields', [])
            ])
        if issue_json.get('owner'):
            issue.owner_id = user_id_dict[issue_json['owner']]
        if issue_json.get('closed'):
            issue.closed_timestamp = issue_json['closed']
        comments = [
            self._ParseComment(project_id, user_id_dict, comment_json,
                               event_log)
            for comment_json in issue_json.get('comments', [])
        ]

        starrers = [
            user_id_dict[starrer] for starrer in issue_json['starrers']
        ]

        relations = []
        relations.extend([(i, 'blockedon')
                          for i in issue_json.get('blocked_on', [])])
        relations.extend([(i, 'blocking')
                          for i in issue_json.get('blocking', [])])
        if 'merged_into' in issue_json:
            relations.append((issue_json['merged_into'], 'mergedinto'))

        return issue, comments, starrers, relations
Exemplo n.º 24
0
    def VerifyParseQuickEditCommmand(self,
                                     cmd,
                                     exp_summary='sum',
                                     exp_status='New',
                                     exp_owner_id=111,
                                     exp_cc_ids=None,
                                     exp_labels=None):

        issue = tracker_pb2.Issue()
        issue.project_name = 'proj'
        issue.local_id = 1
        issue.summary = 'sum'
        issue.status = 'New'
        issue.owner_id = 111
        issue.cc_ids.extend([222, 333])
        issue.labels.extend(['Type-Defect', 'Priority-Medium', 'Hot'])

        if exp_cc_ids is None:
            exp_cc_ids = [222, 333]
        if exp_labels is None:
            exp_labels = ['Type-Defect', 'Priority-Medium', 'Hot']

        config = tracker_bizobj.MakeDefaultProjectIssueConfig(789)
        logged_in_user_id = 999
        services = service_manager.Services(config=fake.ConfigService(),
                                            issue=fake.IssueService(),
                                            user=fake.UserService())
        services.user.TestAddUser('jrobbins', 333)
        services.user.TestAddUser('*****@*****.**', 888)

        cnxn = 'fake cnxn'
        (summary, status, owner_id, cc_ids,
         labels) = commands.ParseQuickEditCommand(cnxn, cmd, issue, config,
                                                  logged_in_user_id, services)
        self.assertEqual(exp_summary, summary)
        self.assertEqual(exp_status, status)
        self.assertEqual(exp_owner_id, owner_id)
        self.assertListEqual(exp_cc_ids, cc_ids)
        self.assertListEqual(exp_labels, labels)
Exemplo n.º 25
0
 def testGetGrantedPerms_Default(self):
   config = tracker_bizobj.MakeDefaultProjectIssueConfig(789)
   issue = tracker_pb2.Issue()
   self.assertEqual(
       set(), tracker_bizobj.GetGrantedPerms(issue, {111L}, config))
Exemplo n.º 26
0
def MakeTestIssue(local_id, issue_id, summary):
  issue = tracker_pb2.Issue()
  issue.local_id = local_id
  issue.issue_id = issue_id
  issue.summary = summary
  return issue
Exemplo n.º 27
0
 def testGetGrantedPerms_Empty(self):
   config = tracker_pb2.ProjectIssueConfig()
   issue = tracker_pb2.Issue()
   self.assertEqual(
       set(), tracker_bizobj.GetGrantedPerms(issue, {111L}, config))
Exemplo n.º 28
0
from services import service_manager
from testing import fake
from tracker import tracker_bizobj
from tracker import tracker_constants


class CommandsTest(unittest.TestCase):
    def VerifyParseQuickEditCommmand(self,
                                     cmd,
                                     exp_summary='sum',
                                     exp_status='New',
                                     exp_owner_id=111L,
                                     exp_cc_ids=None,
                                     exp_labels=None):

        issue = tracker_pb2.Issue()
        issue.project_name = 'proj'
        issue.local_id = 1
        issue.summary = 'sum'
        issue.status = 'New'
        issue.owner_id = 111L
        issue.cc_ids.extend([222L, 333L])
        issue.labels.extend(['Type-Defect', 'Priority-Medium', 'Hot'])

        if exp_cc_ids is None:
            exp_cc_ids = [222L, 333L]
        if exp_labels is None:
            exp_labels = ['Type-Defect', 'Priority-Medium', 'Hot']

        config = tracker_bizobj.MakeDefaultProjectIssueConfig(789)
        logged_in_user_id = 999L