from pathlib import Path from typing import List from typing import Optional from unittest.mock import Mock from unittest.mock import patch from pytest import mark from libkeyringctl import git @mark.parametrize( "git_path, base, paths", [ (None, None, None), (Path("git_path"), None, None), (Path("git_path"), "base", None), (Path("git_path"), "base", [Path("foo"), Path("bar")]), ], ) @patch("libkeyringctl.git.system") def test_git_changed_files( system_mock: Mock, git_path: Optional[Path], base: Optional[str], paths: Optional[List[Path]], ) -> None: system_mock.return_value = "create some thing foo\n" "delete some thing bar\n" "some thing baz\n" assert git.git_changed_files(git_path=git_path, base=base, paths=paths) == ( [Path("foo")], [Path("bar")], [Path("baz")], ) name, args, kwargs = system_mock.mock_calls[0] if git_path: assert "-C" in args[0] assert str(git_path) in args[0] if base: assert base in args[0] if paths: assert "--" in args[0] for path in paths: assert str(path) in args[0]