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, )