50 lines
1.5 KiB
Python
50 lines
1.5 KiB
Python
from pathlib import Path
|
|
|
|
import pytest
|
|
from typer.testing import CliRunner
|
|
|
|
from takopi import cli
|
|
from takopi.config import ConfigError, parse_projects_config
|
|
|
|
|
|
def test_parse_projects_rejects_engine_alias() -> None:
|
|
config = {"projects": {"codex": {"path": "/tmp/repo"}}}
|
|
with pytest.raises(ConfigError, match="aliases must not match engine ids"):
|
|
parse_projects_config(
|
|
config,
|
|
config_path=Path("takopi.toml"),
|
|
engine_ids=["codex"],
|
|
reserved=("cancel",),
|
|
)
|
|
|
|
|
|
def test_parse_projects_default_project_must_exist() -> None:
|
|
config = {"default_project": "z80", "projects": {}}
|
|
with pytest.raises(ConfigError, match="default_project"):
|
|
parse_projects_config(
|
|
config,
|
|
config_path=Path("takopi.toml"),
|
|
engine_ids=["codex"],
|
|
reserved=("cancel",),
|
|
)
|
|
|
|
|
|
def test_init_writes_project(monkeypatch, tmp_path) -> None:
|
|
config_path = tmp_path / "takopi.toml"
|
|
monkeypatch.setattr("takopi.config.HOME_CONFIG_PATH", config_path)
|
|
monkeypatch.setattr(cli, "resolve_default_base", lambda _: "main")
|
|
|
|
repo_path = tmp_path / "repo"
|
|
repo_path.mkdir()
|
|
monkeypatch.chdir(repo_path)
|
|
|
|
runner = CliRunner()
|
|
result = runner.invoke(cli.app, ["init", "z80"])
|
|
assert result.exit_code == 0
|
|
|
|
saved = config_path.read_text(encoding="utf-8")
|
|
assert "[projects.z80]" in saved
|
|
assert 'worktrees_dir = ".worktrees"' in saved
|
|
assert 'default_engine = "codex"' in saved
|
|
assert 'worktree_base = "main"' in saved
|