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 run_issues_generation(task): """Generate linked IssueTracker issues for provided objects.""" try: from ggrc.integrations import issuetracker_bulk_sync bulk_creator = issuetracker_bulk_sync.IssueTrackerBulkCreator() params = getattr(task, "parameters", {}) return bulk_creator.sync_issuetracker(params.get("objects")) except integrations_errors.Error as error: logger.error('Bulk issue generation failed with error: %s', error.message) raise exceptions.BadRequest(error.message)
def test_succeeded_notification(self): """Test notification about succeeded bulk generation.""" creator = issuetracker_bulk_sync.IssueTrackerBulkCreator() filename = "test_file.csv" recipient = "*****@*****.**" with mock.patch("ggrc.notifications.common.send_email") as send_mock: creator.send_notification(filename, recipient) self.assertEqual(send_mock.call_count, 1) (email, _, body), _ = send_mock.call_args_list[0] self.assertEqual(email, recipient) self.assertIn(creator.SUCCESS_TITLE.format(filename=filename), body) self.assertIn(creator.SUCCESS_TEXT, body)
def test_integration_disabled_on_bulk_create_error(self, model): """Test if {} integration was disabled if bulk creation failed""" user = all_models.Person.query.first() with factories.single_commit(): obj = factories.get_model_factory(model)(modified_by=user) iti = factories.IssueTrackerIssueFactory( issue_tracked_obj=obj, enabled=True, issue_id=None, ) bulk_creator = issuetracker_bulk_sync.IssueTrackerBulkCreator() objects = [issuetracker_bulk_sync.IssuetrackedObjInfo(obj)] with mock.patch.object(bulk_creator, "sync_issue") as sync_mock: sync_mock.side_effect = integrations_errors.HttpError("error") bulk_creator.handle_issuetracker_sync(objects) sync_mock.assert_called_once() self.assertFalse(iti.enabled)
def test_error_notification(self): """Test notification about bulk generation with errors""" creator = issuetracker_bulk_sync.IssueTrackerBulkCreator() filename = "test_file.csv" recipient = "*****@*****.**" assmt = factories.AssessmentFactory() with mock.patch("ggrc.notifications.common.send_email") as send_mock: creator.send_notification(filename, recipient, errors=[(assmt, "")]) self.assertEqual(send_mock.call_count, 1) (email, title, body), _ = send_mock.call_args_list[0] self.assertEqual(title, creator.ISSUETRACKER_SYNC_TITLE) self.assertEqual(email, recipient) self.assertIn(creator.ERROR_TITLE.format(filename=filename), body) self.assertIn(assmt.slug, body) self.assertIn(assmt.title, body) self.assertIn(data_handlers.get_object_url(assmt), body)
def setUp(self): self.creator = issuetracker_bulk_sync.IssueTrackerBulkCreator()