131 lines
3.8 KiB
Python
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"
|