65 lines
1.7 KiB
Python
65 lines
1.7 KiB
Python
from pathlib import Path
|
|
|
|
import pytest
|
|
|
|
from llm_chat.bot import Bot, BotConfig, BotDoesNotExist, BotExists
|
|
|
|
|
|
def test_create_load_remove_bot(tmp_path: Path) -> None:
|
|
bot_name = "Test Bot"
|
|
bot_id = "test-bot"
|
|
|
|
with (tmp_path / "context.md").open("w") as f:
|
|
f.write("Hello, world!")
|
|
|
|
assert not (tmp_path / bot_id).exists()
|
|
|
|
Bot.create(
|
|
name=bot_name,
|
|
bot_dir=tmp_path,
|
|
context_files=[tmp_path / "context.md"],
|
|
)
|
|
|
|
assert (tmp_path / bot_id).exists()
|
|
assert (tmp_path / bot_id / "context").exists()
|
|
assert (tmp_path / bot_id / "context" / "context.md").exists()
|
|
assert (tmp_path / bot_id / f"{bot_id}.json").exists()
|
|
|
|
with (tmp_path / bot_id / f"{bot_id}.json").open() as f:
|
|
config = BotConfig.model_validate_json(f.read(), strict=True)
|
|
assert config.name == bot_name
|
|
assert config.bot_id == bot_id
|
|
assert config.context_files == ["context.md"]
|
|
|
|
with (tmp_path / bot_id / "context" / "context.md").open() as f:
|
|
assert f.read() == "Hello, world!"
|
|
|
|
bot = Bot.load(name=bot_name, bot_dir=tmp_path)
|
|
assert bot.config == config
|
|
assert bot.id == bot_id
|
|
assert bot.name == bot_name
|
|
|
|
Bot.remove(name=bot_name, bot_dir=tmp_path)
|
|
|
|
assert not (tmp_path / bot_id).exists()
|
|
|
|
|
|
def test_bot_does_not_exist(tmp_path: Path) -> None:
|
|
with pytest.raises(BotDoesNotExist):
|
|
Bot.load(name="Test Bot", bot_dir=tmp_path)
|
|
|
|
|
|
def test_bot_already_exists(tmp_path: Path) -> None:
|
|
bot_name = "Test Bot"
|
|
|
|
Bot.create(
|
|
name=bot_name,
|
|
bot_dir=tmp_path,
|
|
)
|
|
|
|
with pytest.raises(BotExists):
|
|
Bot.create(
|
|
name="Test Bot",
|
|
bot_dir=tmp_path,
|
|
)
|