09fe2dda3c
On Windows with non-UTF-8 locale (e.g. GBK), Path.read_text() defaults to platform encoding, breaking onboarding tests and any source code that reads JSON/markdown with non-ASCII content. 5 files, 8 call sites fixed.
46 lines
1.6 KiB
Python
46 lines
1.6 KiB
Python
"""Tests for mempalace.instructions_cli — instruction text output."""
|
|
|
|
from unittest.mock import patch
|
|
|
|
import pytest
|
|
|
|
from mempalace.instructions_cli import AVAILABLE, INSTRUCTIONS_DIR, run_instructions
|
|
|
|
|
|
def test_run_instructions_valid_name(capsys):
|
|
"""Valid name prints the .md file content."""
|
|
name = "init"
|
|
expected = (INSTRUCTIONS_DIR / f"{name}.md").read_text(encoding="utf-8")
|
|
run_instructions(name)
|
|
captured = capsys.readouterr()
|
|
assert captured.out.strip() == expected.strip()
|
|
|
|
|
|
def test_run_instructions_all_available(capsys):
|
|
"""Every name in AVAILABLE should succeed without error."""
|
|
for name in AVAILABLE:
|
|
run_instructions(name)
|
|
out = capsys.readouterr().out
|
|
assert len(out) > 0
|
|
|
|
|
|
def test_run_instructions_invalid_name(capsys):
|
|
"""Invalid name should sys.exit(1) and print error to stderr."""
|
|
with pytest.raises(SystemExit) as exc_info:
|
|
run_instructions("nonexistent")
|
|
assert exc_info.value.code == 1
|
|
captured = capsys.readouterr()
|
|
assert "Unknown instructions: nonexistent" in captured.err
|
|
assert "Available:" in captured.err
|
|
|
|
|
|
def test_run_instructions_missing_md_file(capsys, tmp_path):
|
|
"""If the .md file is missing on disk, should sys.exit(1)."""
|
|
with patch("mempalace.instructions_cli.INSTRUCTIONS_DIR", tmp_path):
|
|
with patch("mempalace.instructions_cli.AVAILABLE", ["fakecmd"]):
|
|
with pytest.raises(SystemExit) as exc_info:
|
|
run_instructions("fakecmd")
|
|
assert exc_info.value.code == 1
|
|
captured = capsys.readouterr()
|
|
assert "Instructions file not found" in captured.err
|