Add Arch-based Docker test setup, shallow clone mode support and pkgmgr tests (see ChatGPT conversation: https://chatgpt.com/share/693052a1-edd0-800f-a9d6-c154b8e7d8e0)
This commit is contained in:
168
tests/test_clone_repos.py
Normal file
168
tests/test_clone_repos.py
Normal file
@@ -0,0 +1,168 @@
|
||||
# tests/test_clone_repos.py
|
||||
import unittest
|
||||
from unittest.mock import patch, MagicMock
|
||||
|
||||
from pkgmgr.clone_repos import clone_repos
|
||||
|
||||
|
||||
class TestCloneRepos(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.repo = {
|
||||
"provider": "github.com",
|
||||
"account": "user",
|
||||
"repository": "repo",
|
||||
}
|
||||
self.selected = [self.repo]
|
||||
self.base_dir = "/tmp/repos"
|
||||
self.all_repos = self.selected
|
||||
|
||||
@patch("pkgmgr.clone_repos.verify_repository")
|
||||
@patch("pkgmgr.clone_repos.subprocess.run")
|
||||
@patch("pkgmgr.clone_repos.os.makedirs")
|
||||
@patch("pkgmgr.clone_repos.os.path.exists")
|
||||
@patch("pkgmgr.clone_repos.get_repo_dir")
|
||||
@patch("pkgmgr.clone_repos.get_repo_identifier")
|
||||
def test_clone_ssh_mode_uses_ssh_url(
|
||||
self,
|
||||
mock_get_repo_identifier,
|
||||
mock_get_repo_dir,
|
||||
mock_exists,
|
||||
mock_makedirs,
|
||||
mock_run,
|
||||
mock_verify,
|
||||
):
|
||||
mock_get_repo_identifier.return_value = "github.com/user/repo"
|
||||
mock_get_repo_dir.return_value = "/tmp/repos/user/repo"
|
||||
mock_exists.return_value = False
|
||||
mock_run.return_value = MagicMock(returncode=0)
|
||||
mock_verify.return_value = (True, [], "hash", "key")
|
||||
|
||||
clone_repos(
|
||||
self.selected,
|
||||
self.base_dir,
|
||||
self.all_repos,
|
||||
preview=False,
|
||||
no_verification=True,
|
||||
clone_mode="ssh",
|
||||
)
|
||||
|
||||
mock_run.assert_called_once()
|
||||
# subprocess.run wird mit positional args aufgerufen
|
||||
cmd = mock_run.call_args[0][0]
|
||||
cwd = mock_run.call_args[1]["cwd"]
|
||||
|
||||
self.assertIn("git clone", cmd)
|
||||
self.assertIn("git@github.com:user/repo.git", cmd)
|
||||
self.assertEqual(cwd, "/tmp/repos/user")
|
||||
|
||||
@patch("pkgmgr.clone_repos.verify_repository")
|
||||
@patch("pkgmgr.clone_repos.subprocess.run")
|
||||
@patch("pkgmgr.clone_repos.os.makedirs")
|
||||
@patch("pkgmgr.clone_repos.os.path.exists")
|
||||
@patch("pkgmgr.clone_repos.get_repo_dir")
|
||||
@patch("pkgmgr.clone_repos.get_repo_identifier")
|
||||
def test_clone_https_mode_uses_https_url(
|
||||
self,
|
||||
mock_get_repo_identifier,
|
||||
mock_get_repo_dir,
|
||||
mock_exists,
|
||||
mock_makedirs,
|
||||
mock_run,
|
||||
mock_verify,
|
||||
):
|
||||
mock_get_repo_identifier.return_value = "github.com/user/repo"
|
||||
mock_get_repo_dir.return_value = "/tmp/repos/user/repo"
|
||||
mock_exists.return_value = False
|
||||
mock_run.return_value = MagicMock(returncode=0)
|
||||
mock_verify.return_value = (True, [], "hash", "key")
|
||||
|
||||
clone_repos(
|
||||
self.selected,
|
||||
self.base_dir,
|
||||
self.all_repos,
|
||||
preview=False,
|
||||
no_verification=True,
|
||||
clone_mode="https",
|
||||
)
|
||||
|
||||
mock_run.assert_called_once()
|
||||
cmd = mock_run.call_args[0][0]
|
||||
cwd = mock_run.call_args[1]["cwd"]
|
||||
|
||||
self.assertIn("git clone", cmd)
|
||||
self.assertIn("https://github.com/user/repo.git", cmd)
|
||||
self.assertEqual(cwd, "/tmp/repos/user")
|
||||
|
||||
@patch("pkgmgr.clone_repos.verify_repository")
|
||||
@patch("pkgmgr.clone_repos.subprocess.run")
|
||||
@patch("pkgmgr.clone_repos.os.makedirs")
|
||||
@patch("pkgmgr.clone_repos.os.path.exists")
|
||||
@patch("pkgmgr.clone_repos.get_repo_dir")
|
||||
@patch("pkgmgr.clone_repos.get_repo_identifier")
|
||||
def test_clone_shallow_mode_uses_https_with_depth(
|
||||
self,
|
||||
mock_get_repo_identifier,
|
||||
mock_get_repo_dir,
|
||||
mock_exists,
|
||||
mock_makedirs,
|
||||
mock_run,
|
||||
mock_verify,
|
||||
):
|
||||
mock_get_repo_identifier.return_value = "github.com/user/repo"
|
||||
mock_get_repo_dir.return_value = "/tmp/repos/user/repo"
|
||||
mock_exists.return_value = False
|
||||
mock_run.return_value = MagicMock(returncode=0)
|
||||
mock_verify.return_value = (True, [], "hash", "key")
|
||||
|
||||
clone_repos(
|
||||
self.selected,
|
||||
self.base_dir,
|
||||
self.all_repos,
|
||||
preview=False,
|
||||
no_verification=True,
|
||||
clone_mode="shallow",
|
||||
)
|
||||
|
||||
mock_run.assert_called_once()
|
||||
cmd = mock_run.call_args[0][0]
|
||||
cwd = mock_run.call_args[1]["cwd"]
|
||||
|
||||
self.assertIn("git clone --depth 1 --single-branch", cmd)
|
||||
self.assertIn("https://github.com/user/repo.git", cmd)
|
||||
self.assertEqual(cwd, "/tmp/repos/user")
|
||||
|
||||
@patch("pkgmgr.clone_repos.verify_repository")
|
||||
@patch("pkgmgr.clone_repos.subprocess.run")
|
||||
@patch("pkgmgr.clone_repos.os.makedirs")
|
||||
@patch("pkgmgr.clone_repos.os.path.exists")
|
||||
@patch("pkgmgr.clone_repos.get_repo_dir")
|
||||
@patch("pkgmgr.clone_repos.get_repo_identifier")
|
||||
def test_preview_mode_does_not_call_subprocess_run(
|
||||
self,
|
||||
mock_get_repo_identifier,
|
||||
mock_get_repo_dir,
|
||||
mock_exists,
|
||||
mock_makedirs,
|
||||
mock_run,
|
||||
mock_verify,
|
||||
):
|
||||
mock_get_repo_identifier.return_value = "github.com/user/repo"
|
||||
mock_get_repo_dir.return_value = "/tmp/repos/user/repo"
|
||||
mock_exists.return_value = False
|
||||
mock_verify.return_value = (True, [], "hash", "key")
|
||||
|
||||
clone_repos(
|
||||
self.selected,
|
||||
self.base_dir,
|
||||
self.all_repos,
|
||||
preview=True,
|
||||
no_verification=True,
|
||||
clone_mode="shallow",
|
||||
)
|
||||
|
||||
# Im Preview-Modus sollte subprocess.run nicht aufgerufen werden
|
||||
mock_run.assert_not_called()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user