80 lines
2.1 KiB
Python
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()
|