22"""Tests for the colrev package manager"""
33
44from pathlib import Path
5+ from unittest .mock import MagicMock
56
67import pytest
78
9+ import colrev .package_manager .colrev_internal_packages
810import colrev .package_manager .init
911from colrev .constants import EndpointType
1012
@@ -28,6 +30,88 @@ def test_generate_method_signatures(endpoint_type: str, helpers) -> None: # typ
2830 ), "Generated module content does not match expected version!"
2931
3032
33+ def test_get_default_author_from_repo_config (monkeypatch : pytest .MonkeyPatch ) -> None :
34+ mock_reader = MagicMock ()
35+ mock_reader .has_option .side_effect = [True , True ]
36+ mock_reader .get_value .side_effect = ["Test User" , "test.user@example.org" ]
37+
38+ mock_repo = MagicMock ()
39+ mock_repo .config_reader .return_value = mock_reader
40+ monkeypatch .setattr (
41+ colrev .package_manager .init .git , "Repo" , MagicMock (return_value = mock_repo )
42+ )
43+
44+ author = colrev .package_manager .init ._get_default_author ()
45+
46+ assert author == {"name" : "Test User" , "email" : "test.user@example.org" }
47+
48+
49+ def test_get_default_author_falls_back_to_global_config (
50+ monkeypatch : pytest .MonkeyPatch ,
51+ ) -> None :
52+ monkeypatch .setattr (
53+ colrev .package_manager .init .git ,
54+ "Repo" ,
55+ MagicMock (
56+ side_effect = colrev .package_manager .init .git .exc .InvalidGitRepositoryError ()
57+ ),
58+ )
59+ mock_global_reader = MagicMock ()
60+ mock_global_reader .has_option .side_effect = [True , True ]
61+ mock_global_reader .get_value .side_effect = ["Global User" , "global@example.org" ]
62+ monkeypatch .setattr (
63+ colrev .package_manager .init .git ,
64+ "GitConfigParser" ,
65+ MagicMock (return_value = mock_global_reader ),
66+ )
67+
68+ author = colrev .package_manager .init ._get_default_author ()
69+
70+ assert author == {"name" : "Global User" , "email" : "global@example.org" }
71+
72+
73+ def test_get_default_author_returns_empty_dict_without_complete_author (
74+ monkeypatch : pytest .MonkeyPatch ,
75+ ) -> None :
76+ mock_reader = MagicMock ()
77+ mock_reader .has_option .side_effect = [True , False ]
78+ mock_repo = MagicMock ()
79+ mock_repo .config_reader .return_value = mock_reader
80+ monkeypatch .setattr (
81+ colrev .package_manager .init .git , "Repo" , MagicMock (return_value = mock_repo )
82+ )
83+
84+ author = colrev .package_manager .init ._get_default_author ()
85+
86+ assert author == {}
87+
88+
89+ def test_clone_colrev_repository_uses_gitpython (
90+ monkeypatch : pytest .MonkeyPatch ,
91+ ) -> None :
92+ temp_dir = "/tmp/test-colrev-clone"
93+ clone_from_mock = MagicMock ()
94+ monkeypatch .setattr (
95+ colrev .package_manager .colrev_internal_packages .tempfile ,
96+ "mkdtemp" ,
97+ MagicMock (return_value = temp_dir ),
98+ )
99+ monkeypatch .setattr (
100+ colrev .package_manager .colrev_internal_packages .git .Repo ,
101+ "clone_from" ,
102+ clone_from_mock ,
103+ )
104+
105+ result = colrev .package_manager .colrev_internal_packages ._clone_colrev_repository ()
106+
107+ clone_from_mock .assert_called_once_with (
108+ "https://github.com/CoLRev-Environment/colrev" ,
109+ temp_dir ,
110+ depth = 1 ,
111+ )
112+ assert result == Path (temp_dir )
113+
114+
31115# @pytest.fixture
32116# def settings() -> colrev.settings.Settings:
33117# """Fixture returning a settings object"""
0 commit comments