def test_state_no_args(self) -> None: state = TrackerIssueState() self.assertFalse(state.changed) self.assertFalse(state.closed) self.assertIsNone(state.bugtracker_name) self.assertIsNone(state.downloaded_comments) state.closed = True state.bugtracker_name = 'my-tracker' state.add_downloaded_comment(comment_id='123') self.assertTrue(state.changed) self.assertTrue(state.closed) self.assertEqual('my-tracker', state.bugtracker_name) self.assertEqual(['123'], state.downloaded_comments)
def synchronize_report(self, ) -> SynchronizeReportResult: """ Synchronize a YesWeHack report and a tracker issue. Raises: SynchronizerError: if a synchronization error occur Returns: the result of the synchronization """ tracker_issue = self._get_tracker_issue_from_logs() is_existing_issue = tracker_issue is not None if not is_existing_issue: tracker_issue = self._create_tracker_issue() if not isinstance(tracker_issue, TrackerIssue): raise SynchronizerError( f'Unable to create new or get existing issue for #{self._report.report_id} in {self._tracker_name}', ) if self._report.tracking_status != 'T' or not is_existing_issue: self._update_tracking_status(tracker_issue=tracker_issue, ) tracker_issue_state = TrackerIssueState( closed=False, bugtracker_name=self._tracker_name, ) logs = self._report.logs if is_existing_issue: log_state = self._get_last_tracker_update_log() if log_state: last_tracker_update_log, tracker_issue_state = log_state if last_tracker_update_log: logs = self._report.get_logs_after( log=last_tracker_update_log, ) send_logs_result = self._send_synchronizable_logs( tracker_issue=tracker_issue, logs=logs, ) for added_comment in send_logs_result.added_comments: tracker_issue_state.add_downloaded_comment( added_comment.comment_id) download_comments_result = self._download_comments( tracker_issue=tracker_issue, exclude_comments=tracker_issue_state.downloaded_comments, ) for downloaded_comment in download_comments_result.downloaded_comments: tracker_issue_state.add_downloaded_comment(downloaded_comment) new_report_status = self._update_report_status( tracker_issue=tracker_issue, tracker_issue_state=tracker_issue_state, ) issue_status = self._get_issue_status_change( tracker_issue=tracker_issue, tracker_issue_state=tracker_issue_state, ) tracker_issue_state.closed = tracker_issue.closed self._post_report_tracker_update( tracker_issue=tracker_issue, tracker_issue_state=tracker_issue_state, send_logs_result=send_logs_result, download_comments_result=download_comments_result, new_report_status=new_report_status, issue_status=issue_status, ) return SynchronizeReportResult( is_existing_issue=is_existing_issue, new_report_status=new_report_status, send_logs_result=send_logs_result, download_comments_result=download_comments_result, )