예제 #1
0
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)
예제 #2
0
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)
예제 #4
0
 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)
예제 #5
0
  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()