"""Tests for core/types.py — enums and ABC.""" import pytest from core.types import BackendName, AgentId, LLMBackend from agents.definitions import AgentDef class TestEnums: def test_backend_names(self): assert BackendName.MOCK == "mock" assert BackendName.ANTHROPIC == "anthropic" assert BackendName.OPENAI == "openai" assert BackendName.GEMINI == "gemini" def test_agent_ids(self): assert AgentId.DESIGN == "design" assert AgentId.ENGINEERING == "engineering" assert AgentId.CNC == "cnc" assert AgentId.CAD == "cad" def test_backend_name_is_string(self): assert isinstance(BackendName.MOCK, str) assert BackendName.MOCK in {"mock", "anthropic"} class TestAgentDefModel: def test_create(self): ad = AgentDef(id="design", name="Design", role="Designer", color="#fff", avatar="D", goal="g", backstory="b") assert ad.id == "design" assert ad.name == "Design" def test_model_dump(self): ad = AgentDef(id="cad", name="CAD", role="Coder", color="#000", avatar="C", goal="g", backstory="b") d = ad.model_dump() assert d["id"] == "cad" assert "role" in d class TestLLMBackendABC: def test_cannot_instantiate(self): with pytest.raises(TypeError): LLMBackend() def test_subclass_must_implement_generate(self): class Incomplete(LLMBackend): pass with pytest.raises(TypeError): Incomplete() def test_subclass_with_generate(self): class Complete(LLMBackend): def generate(self, messages): return "ok" b = Complete() assert b.generate([]) == "ok" def test_split_system_message(self): msgs = [ {"role": "system", "content": "You are a bot"}, {"role": "user", "content": "hello"}, ] system, rest = LLMBackend.split_system_message(msgs) assert system == "You are a bot" assert len(rest) == 1 assert rest[0]["role"] == "user" def test_split_system_message_no_system(self): msgs = [{"role": "user", "content": "hello"}] system, rest = LLMBackend.split_system_message(msgs) assert system == "" assert len(rest) == 1