from pathlib import Path
from unittest.mock import patch

from aider_gitea import has_commits_on_branch


class TestHasCommitsOnBranch:
    def setup_method(self):
        self.cwd = Path('/tmp/test-repo')
        self.base_branch = 'main'
        self.current_branch = 'feature-branch'

    @patch('aider_gitea.get_commit_messages')
    def test_has_commits_true(self, mock_get_commit_messages):
        # Setup mock to return some commit messages
        mock_get_commit_messages.return_value = ['Commit 1', 'Commit 2']

        # Test function returns True when there are commits
        assert (
            has_commits_on_branch(self.cwd, self.base_branch, self.current_branch)
            is True
        )

        # Verify get_commit_messages was called with correct arguments
        mock_get_commit_messages.assert_called_once_with(
            self.cwd,
            self.base_branch,
            self.current_branch,
        )

    @patch('aider_gitea.get_commit_messages')
    def test_has_commits_false(self, mock_get_commit_messages):
        # Setup mock to return empty list
        mock_get_commit_messages.return_value = []

        # Test function returns False when there are no commits
        assert (
            has_commits_on_branch(self.cwd, self.base_branch, self.current_branch)
            is False
        )

        # Verify get_commit_messages was called with correct arguments
        mock_get_commit_messages.assert_called_once_with(
            self.cwd,
            self.base_branch,
            self.current_branch,
        )

    @patch('aider_gitea.get_commit_messages')
    def test_has_commits_exception(self, mock_get_commit_messages):
        # Setup mock to raise an exception
        mock_get_commit_messages.side_effect = Exception('Git command failed')

        # Test function returns False when an exception occurs
        assert (
            has_commits_on_branch(self.cwd, self.base_branch, self.current_branch)
            is False
        )