feat: add git pull subcommand
Some checks failed
checks / tests-10 (push) Failing after 2m56s
checks / pre-commit (push) Successful in 4m28s
checks / tests-11 (push) Failing after 4m8s
checks / tests-12 (push) Failing after 2m47s

This commit is contained in:
cătălin 2024-09-06 20:51:03 +02:00
commit 9dd2405c47
No known key found for this signature in database
10 changed files with 101 additions and 15 deletions

View file

@ -8,7 +8,7 @@ from halig.settings import Settings
@pytest.fixture
def command(settings: Settings):
return GitCommitCommand(settings)
return GitCommitCommand(settings=settings)
def test_repo_is_not_initialized(settings):
@ -16,7 +16,7 @@ def test_repo_is_not_initialized(settings):
initializes the repo upon instantiation"""
assert not (settings.notebooks_root_path / ".git").is_dir()
GitCommitCommand(settings)
GitCommitCommand(settings=settings)
assert (settings.notebooks_root_path / ".git").is_dir()
@ -27,7 +27,7 @@ def test_repo_is_initialized(settings):
p = subprocess.Popen(["git", "init"], cwd=settings.notebooks_root_path)
p.wait()
assert (settings.notebooks_root_path / ".git").is_dir()
GitCommitCommand(settings)
GitCommitCommand(settings=settings)
assert (settings.notebooks_root_path / ".git").is_dir()

View file

@ -0,0 +1,37 @@
import shutil
import pytest
from git import Repo
from halig.commands.git.pull import GitPullCommand
@pytest.fixture
def command(settings, faker):
"""Configure a local remote for testing located at settings.notebooks_root_path/../remote, push some .age files to
that remote
"""
command = GitPullCommand(settings=settings)
new_path = shutil.copytree(settings.notebooks_root_path, settings.notebooks_root_path / "../remote")
new_path = new_path.resolve()
command.repo.create_remote("origin", str(new_path))
remote_repo = Repo(new_path)
for _ in range(10):
random_age_file = new_path / f"{faker.word()}.age"
random_age_file.touch()
remote_repo.index.add([str(random_age_file)])
remote_repo.index.commit("Update notebooks")
return command
def test_pull_from_origin(command):
command.run()
def test_pull_from_custom_origin(settings, command):
remote_path = settings.notebooks_root_path / "../remote"
command.repo.create_remote("custom", str(remote_path.resolve()))
command.remotes = ["custom"]
command.run()

View file

@ -9,29 +9,30 @@ from halig.commands.git.push import GitPushCommand
@pytest.fixture
def command(settings, faker):
"""Configure a local remote for testing"""
commit_command = GitCommitCommand(settings)
new_path = shutil.copytree(settings.notebooks_root_path , settings.notebooks_root_path / "../remote")
commit_command = GitCommitCommand(settings=settings)
new_path = shutil.copytree(settings.notebooks_root_path, settings.notebooks_root_path / "../remote")
new_path = new_path.resolve()
for _ in range(10):
random_age_file = settings.notebooks_root_path / f"{faker.word()}.age"
random_age_file.touch()
commit_command.run()
push_command = GitPushCommand(settings)
push_command = GitPushCommand(settings=settings)
push_command.repo.create_remote("origin", str(new_path))
return push_command
def test_push_to_origin(settings, command):
def test_push_to_origin(command):
"""Test that the command pushes to the origin remote"""
command.run()
def test_push_to_custom_remote(settings, command):
"""Test that the command pushes to a custom remote"""
remote_path = settings.notebooks_root_path / "../remote"
command.repo.create_remote("custom", str(remote_path.resolve()))
command.run(remotes=["custom"])
command.remotes = ["custom"]
command.run()

View file

@ -6,7 +6,8 @@ from halig.settings import Settings, load_from_file
def test_settings_from_env(settings: Settings, notebooks_root_path_envvar):
from_env_settings = Settings(recipient_paths=settings.recipient_paths, identity_paths=settings.identity_paths) # type: ignore[call-arg]
from_env_settings = Settings(recipient_paths=settings.recipient_paths,
identity_paths=settings.identity_paths) # type: ignore[call-arg]
assert from_env_settings.notebooks_root_path == settings.notebooks_root_path
@ -29,3 +30,10 @@ def test_load_from_non_existing_file_path_raises_file_not_found_error(halig_conf
file = halig_config_path / "some_invalid_file.yml"
with pytest.raises(FileNotFoundError, match=f"File {file} does not exist"):
load_from_file(file)
def test_settings_identity_paths_is_not_list_is_converted(settings):
s = Settings(identity_paths=settings.identity_paths[0], recipient_paths=settings.recipient_paths[0],
notebooks_root_path=settings.notebooks_root_path)
assert s.identity_paths == [settings.identity_paths[0]]
assert s.recipient_paths == [settings.recipient_paths[0]]