ai-content-maker/.venv/Lib/site-packages/weasel/tests/cli/test_remote.py

80 lines
2.1 KiB
Python

from pathlib import Path
import pytest
from typer.testing import CliRunner
from weasel import app
from .test_cli_app import has_git
runner = CliRunner()
@pytest.fixture
def project_dir(tmp_path_factory: pytest.TempPathFactory):
# a working directory for the session
base = tmp_path_factory.mktemp("project")
return base / "project"
@pytest.fixture
def remote_url(tmp_path_factory: pytest.TempPathFactory):
# a "remote" for testing
base = tmp_path_factory.mktemp("remote")
return base / "remote"
@pytest.fixture
def clone(project_dir: Path):
"""Cloning shouldn't fail"""
repo = "https://github.com/explosion/weasel"
branch = "main"
result = runner.invoke(
app,
[
"clone",
"--repo",
repo,
"--branch",
branch,
"weasel/tests/demo_project",
str(project_dir),
],
)
assert result.exit_code == 0
assert (project_dir / "project.yml").exists()
@pytest.fixture(autouse=True)
def assets(clone, project_dir: Path):
result = runner.invoke(app, ["assets", str(project_dir)])
print(result.stdout)
assert result.exit_code == 0
assert (project_dir / "assets/README.md").exists()
@pytest.mark.skipif(not has_git(), reason="git not installed")
def test_remote(project_dir: Path, remote_url: Path):
result = runner.invoke(app, ["assets", str(project_dir)])
assert result.exit_code == 0
assert (project_dir / "assets/README.md").exists()
result = runner.invoke(app, ["run", "prep", str(project_dir)])
assert result.exit_code == 0
# append remote to the file
with open(project_dir / "project.yml", "a") as project_file:
project_file.write(f"\nremotes:\n default: {remote_url}\n")
result = runner.invoke(app, ["push", "default", str(project_dir)])
assert result.exit_code == 0
# delete a file, and make sure pull restores it
(project_dir / "corpus/stuff.txt").unlink()
result = runner.invoke(app, ["pull", "default", str(project_dir)])
assert result.exit_code == 0
assert (project_dir / "corpus/stuff.txt").exists()