Files
voidea/tests/unit/agents/test_base.py
T

131 lines
3.8 KiB
Python

"""Tests for BaseAgent versioning methods."""
import hashlib
from pathlib import Path
import pytest
from app.agents.base import BaseAgent
class SimpleTestAgent(BaseAgent):
"""Minimal agent for testing base methods."""
name = "test_agent"
version = "1.0.0"
description = "Test agent"
async def run(self, context=None):
return await super().run(context) # pragma: no cover
async def health_check(self):
return True
@pytest.fixture
def agent():
return SimpleTestAgent()
@pytest.fixture
def cleanup_changelog():
yield
path = Path("CHANGELOG") / "agents" / "test_agent.md"
if path.exists():
path.unlink()
@pytest.mark.asyncio
async def test_agent_initialization(agent):
"""Test agent initializes with default version."""
assert agent.name == "test_agent"
assert agent.version == "1.0.0"
def test_compute_checksum(agent):
"""Test compute_checksum returns valid SHA256."""
checksum = agent.compute_checksum()
assert len(checksum) == 64
assert all(c in "0123456789abcdef" for c in checksum)
def test_compute_checksum_is_deterministic(agent):
"""Test checksum is deterministic for same file."""
assert agent.compute_checksum() == agent.compute_checksum()
def test_bump_version_patch(agent):
"""Test bump_version patch increments patch."""
new_version = agent.bump_version("patch")
assert new_version == "1.0.1"
assert agent.version == "1.0.1"
def test_bump_version_minor(agent):
"""Test bump_version minor increments minor, resets patch."""
agent.version = "1.0.5"
new_version = agent.bump_version("minor")
assert new_version == "1.1.0"
assert agent.version == "1.1.0"
def test_bump_version_major(agent):
"""Test bump_version major increments major, resets minor and patch."""
agent.version = "1.2.3"
new_version = agent.bump_version("major")
assert new_version == "2.0.0"
assert agent.version == "2.0.0"
def test_bump_version_default_is_patch(agent):
"""Test bump_version defaults to patch."""
agent.version = "2.0.0"
new_version = agent.bump_version()
assert new_version == "2.0.1"
@pytest.mark.asyncio
async def test_write_changelog_entry_creates_file(agent, cleanup_changelog):
"""Test _write_changelog_entry creates a new changelog file."""
agent._write_changelog_entry("1.0.0", ["Initial version"])
path = Path("CHANGELOG") / "agents" / "test_agent.md"
assert path.exists()
content = path.read_text(encoding="utf-8")
assert "# test_agent Changelog" in content
assert "## 1.0.0" in content
assert "- Initial version" in content
@pytest.mark.asyncio
async def test_write_changelog_entry_appends(agent, cleanup_changelog):
"""Test _write_changelog_entry appends to existing file."""
agent._write_changelog_entry("1.0.0", ["Initial version"])
agent._write_changelog_entry("1.0.1", ["Bugfix"])
path = Path("CHANGELOG") / "agents" / "test_agent.md"
content = path.read_text(encoding="utf-8")
assert "## 1.0.0" in content
assert "## 1.0.1" in content
assert "- Bugfix" in content
@pytest.mark.asyncio
async def test_check_version_no_changelog(agent, cleanup_changelog):
"""Test _check_version creates initial changelog on first run."""
result = await agent._check_version(["Initial version"])
assert result is not None
path = Path("CHANGELOG") / "agents" / "test_agent.md"
assert path.exists()
@pytest.mark.asyncio
async def test_check_version_unchanged(agent, cleanup_changelog):
"""Test _check_version returns None when nothing changed."""
agent._write_changelog_entry("1.0.0", ["Initial version"])
result = await agent._check_version()
assert result is None
def test_changelog_dir_default(agent):
"""Test changelog_dir attribute."""
assert str(agent.changelog_dir) == "CHANGELOG\\agents"