41 lines
1.4 KiB
Python
41 lines
1.4 KiB
Python
from pathlib import Path
|
|
|
|
import pytest
|
|
|
|
from llm_trade_bot.prompts import PromptError, PromptStore
|
|
|
|
|
|
def test_loads_named_markdown_sections(tmp_path: Path):
|
|
path = tmp_path / "prompts.md"
|
|
path.write_text(
|
|
"# Prompts\n\n## master_prompt\nMaster text.\n\n### Nested heading\nMore.\n\n## run_prompt\nRun text.\n",
|
|
encoding="utf-8",
|
|
)
|
|
prompts = PromptStore(path).load()
|
|
assert prompts.master_prompt == "Master text.\n\n### Nested heading\nMore."
|
|
assert prompts.run_prompt == "Run text."
|
|
|
|
|
|
def test_reloads_file_for_each_snapshot(tmp_path: Path):
|
|
path = tmp_path / "prompts.md"
|
|
path.write_text("## master_prompt\nFirst\n## run_prompt\nRun", encoding="utf-8")
|
|
store = PromptStore(path)
|
|
assert store.load().master_prompt == "First"
|
|
path.write_text("## master_prompt\nSecond\n## run_prompt\nRun", encoding="utf-8")
|
|
assert store.load().master_prompt == "Second"
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"content, message",
|
|
[
|
|
("# no sections", "level-two sections"),
|
|
("## master_prompt\nMaster", "run_prompt"),
|
|
("## master_prompt\nOne\n## master_prompt\nTwo\n## run_prompt\nRun", "Duplicate"),
|
|
],
|
|
)
|
|
def test_rejects_invalid_prompt_files(tmp_path: Path, content: str, message: str):
|
|
path = tmp_path / "prompts.md"
|
|
path.write_text(content, encoding="utf-8")
|
|
with pytest.raises(PromptError, match=message):
|
|
PromptStore(path).load()
|