Cloner tests: maybe finished

Signed-off-by: Václav Valíček <valicek1994@gmail.com>
This commit is contained in:
Václav Valíček 2022-08-02 23:54:36 +02:00
parent b6b5b8b8ca
commit 941a89b7dd
Signed by: valicek
GPG Key ID: FF05BDCA0C73BB31

View File

@ -1,5 +1,7 @@
import git import git
import pytest import pytest
import repo_cloner.lib.cloner
from repo_cloner.lib import gen_repo_hashed_name, DirNotFoundError, Cloner from repo_cloner.lib import gen_repo_hashed_name, DirNotFoundError, Cloner
from cloner_test_fixtures import * from cloner_test_fixtures import *
from pathlib import Path from pathlib import Path
@ -282,6 +284,70 @@ def test_sync_submodules_failed(cloner_dir_with_config, caplog):
assert caplog.records[1].message == "Repo fetch failed for Mocked Project" assert caplog.records[1].message == "Repo fetch failed for Mocked Project"
def my_check_submodules_repo(
repo_tool, cache_file: str,
submodule_list: list,
scan_depth = None):
if "namespace_whatever_" in cache_file:
submodule_list.append("https://git.hosting:namespace/submodule1.git")
submodule_list.append("https://git.hosting:namespace/submodule2.git")
if "/namespace_submodule1_" in cache_file:
submodule_list.append("https://git.hosting:namespace/submodule3.git")
return submodule_list
def test_submodules_sync_succeed(cloner_dir_with_config, caplog):
cloner_dir_with_config.joinpath("cache", "submodules").mkdir(parents = True)
cloner_dir_with_config.joinpath("cache", "submodules", "submodules.cache") \
.write_text("https://git.hosting:previous/submodule.git")
ds = MockDirStruct(cloner_dir_with_config)
ds.config.cloner_repo_url = "https://git.hosting:namespace/whatever.git"
ds.config.cloner_submodules = True
# mock almost everything
mocks = {
'initialized': PropertyMock(side_effect = [True, False, True, True, True]),
'fetch': MagicMock(return_value = True),
'clone': MagicMock(return_value = True),
}
with patch.multiple("repo_cloner.lib.cloner.RepoTool", **mocks):
Cloner.check_submodules_repo = my_check_submodules_repo
cl = Cloner(ds)
assert cl.sync()
assert repo_cloner.lib.cloner.RepoTool.fetch.call_count == 4
assert repo_cloner.lib.cloner.RepoTool.clone.call_count == 1
def test_submodules_sync_one_fail(cloner_dir_with_config, caplog):
cloner_dir_with_config.joinpath("cache", "submodules").mkdir(parents = True)
cloner_dir_with_config.joinpath("cache", "submodules", "submodules.cache") \
.write_text("https://git.hosting:previous/submodule.git")
ds = MockDirStruct(cloner_dir_with_config)
ds.config.cloner_repo_url = "https://git.hosting:namespace/whatever.git"
ds.config.cloner_submodules = True
# just to make coverage nicer
ds.config.cloner_submodule_depth = 0
# mock almost everything
mocks = {
'initialized': PropertyMock(return_value = True),
'fetch': MagicMock(side_effect = [True, True, True, False, True]),
'clone': MagicMock(return_value = True),
}
with patch.multiple("repo_cloner.lib.cloner.RepoTool", **mocks):
Cloner.check_submodules_repo = my_check_submodules_repo
cl = Cloner(ds)
assert not cl.sync()
assert repo_cloner.lib.cloner.RepoTool.fetch.call_count == 5
assert repo_cloner.lib.cloner.RepoTool.clone.call_count == 0
assert "Clone/fetch of submodule: https://git.hosting:namespace/submodule2.git failed" in caplog.text
def test_perform_check(cloner_dir_with_config, monkeypatch, caplog): def test_perform_check(cloner_dir_with_config, monkeypatch, caplog):
call_counter: int = 0 call_counter: int = 0