def background_issues_update(task): """Update linked IssueTracker issues for provided objects.""" # pylint: disable=too-many-locals try: from ggrc.integrations import issuetracker_bulk_sync comment_updater = issuetracker_bulk_sync.IssueTrackerCommentUpdater() bulk_updater = issuetracker_bulk_sync.IssueTrackerBulkUpdater() bulk_creator = issuetracker_bulk_sync.IssueTrackerBulkCreator() params = getattr(task, "parameters", {}) revision_ids = params.get("revision_ids") mail_data = params.get("mail_data") update_args = integration_utils.build_updated_objects_args( revision_ids, mail_data) update_errors = None if update_args.get("objects"): (_, update_errors) = bulk_updater.sync_issuetracker(update_args) create_args = integration_utils.build_created_objects_args( revision_ids, mail_data) create_errors = None if create_args.get("objects"): (_, create_errors) = bulk_creator.sync_issuetracker(create_args) comment_args = integration_utils.build_comments_args( revision_ids, mail_data) if comment_args.get("comments"): comment_updater.sync_issuetracker(comment_args) errors = _merge_errors(create_errors, update_errors) return bulk_creator.make_response(errors) except integrations_errors.Error as error: logger.error('Bulk issue update failed with error: %s', error.message) raise exceptions.BadRequest(error.message)
def test_get_issue_json(self, model): """Test get_issue_json method issue's update""" with factories.single_commit(): factory = factories.get_model_factory(model) obj = factory() factories.IssueTrackerIssueFactory( enabled=True, issue_tracked_obj=obj, title='title', component_id=111, hotlist_id=222, issue_type="PROCESS", issue_priority="P2", issue_severity="S2", ) expected_result = { 'component_id': 111, 'severity': u'S2', 'title': u'title', 'hotlist_ids': [222], 'priority': u'P2', 'type': u'PROCESS' } updater = issuetracker_bulk_sync.IssueTrackerBulkUpdater() # pylint: disable=protected-access result = updater._get_issue_json(obj) self.assertEqual(expected_result, result)
def run_issues_update(task): """Update linked IssueTracker issues for provided objects.""" try: from ggrc.integrations import issuetracker_bulk_sync bulk_updater = issuetracker_bulk_sync.IssueTrackerBulkUpdater() params = getattr(task, "parameters", {}) return bulk_updater.sync_issuetracker(params.get("objects")) except integrations_errors.Error as error: logger.error('Bulk issue update failed with error: %s', error.message) raise exceptions.BadRequest(error.message)
def test_exception_notification(self): """Test notification about failed bulk update.""" filename = "test.csv" updater = issuetracker_bulk_sync.IssueTrackerBulkUpdater() with mock.patch("ggrc.notifications.common.send_email") as send_mock: updater.send_notification(filename, "*****@*****.**", failed=True) self.assertEqual(send_mock.call_count, 1) (email, title, body), _ = send_mock.call_args_list[0] self.assertEqual(title, updater.ISSUETRACKER_SYNC_TITLE) self.assertEqual(email, "*****@*****.**") self.assertIn(updater.ERROR_TITLE.format(filename=filename), body) self.assertIn(updater.EXCEPTION_TEXT, body)