test: 6 parallel agents — +40 test files across core, agent, translate, services, API routes, dataset_review. core 100%, agent 100%, services 100%, translate plugin mostly done. Pending: ~10 minor failures to fix
This commit is contained in:
106
backend/tests/test_models_edge.py
Normal file
106
backend/tests/test_models_edge.py
Normal file
@@ -0,0 +1,106 @@
|
||||
# #region Test.Models.Edge [C:1] [TYPE Module] [SEMANTICS test,models,agent,api_key,edge]
|
||||
# @BRIEF Edge-case coverage for model files — agent.py _uuid(), api_key.py __repr__.
|
||||
# @RELATION BINDS_TO -> [Models.Agent]
|
||||
# @RELATION BINDS_TO -> [APIKeyModel]
|
||||
|
||||
import pytest
|
||||
|
||||
|
||||
class TestAgentModelEdge:
|
||||
"""Cover _uuid() function in agent.py (line 14)."""
|
||||
|
||||
def test_uuid_generates_string(self):
|
||||
from src.models.agent import _uuid
|
||||
|
||||
uid = _uuid()
|
||||
assert isinstance(uid, str)
|
||||
assert len(uid) > 20 # UUID4 is 36 chars
|
||||
assert uid.count("-") == 4 # Standard UUID format
|
||||
|
||||
def test_uuid_unique(self):
|
||||
from src.models.agent import _uuid
|
||||
|
||||
uids = {_uuid() for _ in range(100)}
|
||||
assert len(uids) == 100 # All unique
|
||||
|
||||
def test_agent_conversation_defaults(self):
|
||||
"""AgentConversation creates with defaults."""
|
||||
from src.models.agent import AgentConversation
|
||||
|
||||
conv = AgentConversation(user_id="user-1")
|
||||
assert conv.user_id == "user-1"
|
||||
# id defaults to uuid4 string
|
||||
assert isinstance(conv.id, str) or conv.id is None
|
||||
|
||||
def test_agent_message_repr(self):
|
||||
"""AgentMessage creates with defaults."""
|
||||
from src.models.agent import AgentMessage
|
||||
|
||||
msg = AgentMessage(
|
||||
conversation_id="conv-1",
|
||||
role="user",
|
||||
text="Hello",
|
||||
state="sent",
|
||||
)
|
||||
assert msg.role == "user"
|
||||
assert msg.text == "Hello"
|
||||
assert msg.state == "sent"
|
||||
|
||||
|
||||
class TestApiKeyModelEdge:
|
||||
"""Cover __repr__ in api_key.py (line 33)."""
|
||||
|
||||
def test_repr(self):
|
||||
from src.models.api_key import APIKey
|
||||
|
||||
key = APIKey(
|
||||
key_hash="a" * 64,
|
||||
prefix="ssk_abc1234",
|
||||
name="Test Key",
|
||||
permissions=["maintenance:start"],
|
||||
)
|
||||
rep = repr(key)
|
||||
assert "ssk_abc1234" in rep
|
||||
assert "Test Key" in rep
|
||||
assert "APIKey" in rep
|
||||
|
||||
def test_repr_in_db(self, clean_db):
|
||||
from src.models.api_key import APIKey
|
||||
|
||||
key = APIKey(
|
||||
key_hash="b" * 64,
|
||||
prefix="ssk_xyz7890",
|
||||
name="DB Key",
|
||||
permissions=[],
|
||||
)
|
||||
clean_db.add(key)
|
||||
clean_db.commit()
|
||||
clean_db.refresh(key)
|
||||
|
||||
rep = repr(key)
|
||||
assert "ssk_xyz7890" in rep
|
||||
assert "DB Key" in rep
|
||||
|
||||
|
||||
# ── Shared fixture ───────────────────────────────────────────────
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def clean_db():
|
||||
from sqlalchemy import create_engine
|
||||
from sqlalchemy.orm import sessionmaker
|
||||
from sqlalchemy.pool import StaticPool
|
||||
|
||||
from src.models.mapping import Base
|
||||
|
||||
engine = create_engine(
|
||||
"sqlite:///:memory:",
|
||||
poolclass=StaticPool,
|
||||
connect_args={"check_same_thread": False},
|
||||
)
|
||||
Base.metadata.create_all(engine)
|
||||
Session = sessionmaker(bind=engine)
|
||||
session = Session()
|
||||
yield session
|
||||
session.close()
|
||||
# #endregion Test.Models.Edge
|
||||
Reference in New Issue
Block a user