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), }
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
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)
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)
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)
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)
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)
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)
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)
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()
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
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()
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)
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()
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')
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()
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])
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)
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'])
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'])
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'])
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)