from pathlib import Path from unittest.mock import MagicMock, patch from aider_gitea import push_changes class TestIssueCommentOnFailure: def setup_method(self): self.cwd = Path('/tmp/test-repo') self.branch_name = 'issue-123-test-branch' self.issue_number = '123' self.issue_title = 'Test Issue' self.base_branch = 'main' self.gitea_client = MagicMock() self.owner = 'test-owner' self.repo = 'test-repo' @patch('aider_gitea.has_commits_on_branch', return_value=True) @patch('aider_gitea.get_commit_messages', return_value=['Test commit']) @patch('aider_gitea.run_cmd') def test_comment_on_push_failure( self, mock_run_cmd, mock_get_commit_messages, mock_has_commits, ): # Setup run_cmd to fail on git push mock_run_cmd.return_value = False # Call push_changes result = push_changes( self.cwd, self.branch_name, self.issue_number, self.issue_title, self.base_branch, self.gitea_client, self.owner, self.repo, ) # Verify result is False assert result is False # Verify create_issue_comment was called with appropriate message self.gitea_client.create_issue_comment.assert_called_once() args, kwargs = self.gitea_client.create_issue_comment.call_args assert kwargs['owner'] == self.owner assert kwargs['repo'] == self.repo assert kwargs['issue_number'] == self.issue_number assert 'Failed to push branch' in kwargs['body'] assert '❌ **Automated Solution Failed**' in kwargs['body'] @patch('aider_gitea.has_commits_on_branch', return_value=True) @patch('aider_gitea.get_commit_messages', return_value=['Test commit']) @patch('aider_gitea.run_cmd') def test_comment_on_pr_creation_failure( self, mock_run_cmd, mock_get_commit_messages, mock_has_commits, ): # Setup run_cmd to succeed on git push mock_run_cmd.return_value = True # Setup create_pull_request to fail self.gitea_client.create_pull_request.side_effect = Exception( 'PR creation failed', ) # Call push_changes result = push_changes( self.cwd, self.branch_name, self.issue_number, self.issue_title, self.base_branch, self.gitea_client, self.owner, self.repo, ) # Verify result is False assert result is False # Verify create_issue_comment was called with appropriate message self.gitea_client.create_issue_comment.assert_called_once() args, kwargs = self.gitea_client.create_issue_comment.call_args assert kwargs['owner'] == self.owner assert kwargs['repo'] == self.repo assert kwargs['issue_number'] == self.issue_number assert 'Failed to create pull request' in kwargs['body'] assert '⚠️ **Partial Automation Success**' in kwargs['body'] assert self.branch_name in kwargs['body']