import subprocess import tempfile from pathlib import Path from unittest.mock import MagicMock, patch import pytest from aider_gitea import solve_issue_in_repository class TestSolveIssueInRepository: def setup_method(self): self.args = MagicMock() self.args.gitea_url = "https://gitea.example.com" self.args.owner = "test-owner" self.args.repo = "test-repo" self.args.base_branch = "main" self.gitea_client = MagicMock() self.tmpdirname = Path("/tmp/test-repo") self.branch_name = "issue-123-test-branch" self.issue_title = "Test Issue" self.issue_description = "This is a test issue" self.issue_number = "123" @patch('aider_gitea.run_cmd') @patch('aider_gitea.push_changes') @patch('subprocess.run') def test_solve_issue_with_aider_changes(self, mock_subprocess_run, mock_push_changes, mock_run_cmd): # Setup mocks mock_run_cmd.return_value = True mock_push_changes.return_value = True # Mock subprocess.run to return different commit hashes and file changes mock_subprocess_run.side_effect = [ MagicMock(stdout="abc123\n", returncode=0), # First git rev-parse MagicMock(stdout="file1.py\nfile2.py\n", returncode=0), # git diff with changes ] # Call the function result = solve_issue_in_repository( self.args, self.tmpdirname, self.branch_name, self.issue_title, self.issue_description, self.issue_number, self.gitea_client ) # Verify results assert result is True assert mock_run_cmd.call_count >= 8 # Verify all expected commands were run mock_push_changes.assert_called_once() @patch('aider_gitea.run_cmd') @patch('aider_gitea.push_changes') @patch('subprocess.run') def test_solve_issue_without_aider_changes(self, mock_subprocess_run, mock_push_changes, mock_run_cmd): # Setup mocks mock_run_cmd.return_value = True # Mock subprocess.run to return same commit hash and no file changes mock_subprocess_run.side_effect = [ MagicMock(stdout="abc123\n", returncode=0), # First git rev-parse MagicMock(stdout="", returncode=0), # git diff with no changes ] # Call the function result = solve_issue_in_repository( self.args, self.tmpdirname, self.branch_name, self.issue_title, self.issue_description, self.issue_number, self.gitea_client ) # Verify results assert result is False assert mock_push_changes.call_count == 0 # push_changes should not be called