import subprocess
from unittest.mock import patch

import pytest
from snakeoil.cli.exceptions import UserException
from snakeoil.contexts import chdir
from pkgdev import git


class TestGitRun:

    def test_git_missing(self):
        with patch('subprocess.run') as git_run:
            git_run.side_effect = FileNotFoundError("no such file 'git'")
            with pytest.raises(UserException, match="no such file 'git'"):
                git.run('commit')

    def test_failed_run(self):
        with patch('subprocess.run') as git_run:
            git_run.side_effect = subprocess.CalledProcessError(1, 'git commit')
            with pytest.raises(git.GitError):
                git.run('commit')

    def test_successful_run(self, git_repo):
        with chdir(git_repo.path):
            p = git.run('rev-parse', '--abbrev-ref', 'HEAD', stdout=subprocess.PIPE)
        assert p.stdout.strip() == 'main'
