Пример #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 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)
Пример #3
0
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)
Пример #4
0
  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)