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]))
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()
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
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()
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
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)
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
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))
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, []))
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')
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])
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
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)
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)
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'])
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)
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))
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())
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()
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()
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
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)
def testGetGrantedPerms_Default(self): config = tracker_bizobj.MakeDefaultProjectIssueConfig(789) issue = tracker_pb2.Issue() self.assertEqual( set(), tracker_bizobj.GetGrantedPerms(issue, {111L}, config))
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
def testGetGrantedPerms_Empty(self): config = tracker_pb2.ProjectIssueConfig() issue = tracker_pb2.Issue() self.assertEqual( set(), tracker_bizobj.GetGrantedPerms(issue, {111L}, config))
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