agentops/tests/unit/helpers/test_version.py

109 lines
4.8 KiB
Python

from unittest.mock import Mock, patch
from importlib.metadata import PackageNotFoundError
from agentops.helpers.version import get_agentops_version, check_agentops_update
class TestGetAgentopsVersion:
def test_get_agentops_version_success(self):
"""Test successful version retrieval."""
with patch("agentops.helpers.version.version") as mock_version:
mock_version.return_value = "1.2.3"
result = get_agentops_version()
assert result == "1.2.3"
mock_version.assert_called_once_with("agentops")
def test_get_agentops_version_exception(self):
"""Test version retrieval when an exception occurs."""
test_exception = Exception("Test error")
with patch("agentops.helpers.version.version") as mock_version:
mock_version.side_effect = test_exception
with patch("agentops.helpers.version.logger") as mock_logger:
result = get_agentops_version()
assert result is None
mock_logger.warning.assert_called_once_with("Error reading package version: %s", test_exception)
class TestCheckAgentopsUpdate:
def test_check_agentops_update_outdated(self):
"""Test update check when a newer version is available."""
mock_response = Mock()
mock_response.status_code = 200
mock_response.json.return_value = {"info": {"version": "2.0.0"}}
with patch("agentops.helpers.version.requests.get", return_value=mock_response):
with patch("agentops.helpers.version.version", return_value="1.0.0"):
with patch("agentops.helpers.version.logger") as mock_logger:
check_agentops_update()
mock_logger.warning.assert_called_once_with(
" WARNING: agentops is out of date. Please update with the command: 'pip install --upgrade agentops'"
)
def test_check_agentops_update_current(self):
"""Test update check when current version is up to date."""
mock_response = Mock()
mock_response.status_code = 200
mock_response.json.return_value = {"info": {"version": "1.0.0"}}
with patch("agentops.helpers.version.requests.get", return_value=mock_response):
with patch("agentops.helpers.version.version", return_value="1.0.0"):
with patch("agentops.helpers.version.logger") as mock_logger:
check_agentops_update()
# Should not log any warning when versions match
mock_logger.warning.assert_not_called()
def test_check_agentops_update_package_not_found(self):
"""Test update check when package is not found."""
mock_response = Mock()
mock_response.status_code = 200
mock_response.json.return_value = {"info": {"version": "2.0.0"}}
with patch("agentops.helpers.version.requests.get", return_value=mock_response):
with patch("agentops.helpers.version.version", side_effect=PackageNotFoundError("agentops")):
with patch("agentops.helpers.version.logger") as mock_logger:
result = check_agentops_update()
assert result is None
mock_logger.warning.assert_not_called()
def test_check_agentops_update_request_failure(self):
"""Test update check when the HTTP request fails."""
with patch("agentops.helpers.version.requests.get", side_effect=Exception("Network error")):
with patch("agentops.helpers.version.logger") as mock_logger:
result = check_agentops_update()
assert result is None
mock_logger.debug.assert_called_once_with("Failed to check for updates: Network error")
def test_check_agentops_update_non_200_status(self):
"""Test update check when the HTTP response is not 200."""
mock_response = Mock()
mock_response.status_code = 404
with patch("agentops.helpers.version.requests.get", return_value=mock_response):
with patch("agentops.helpers.version.logger") as mock_logger:
check_agentops_update()
# Should not log any warning when status is not 200
mock_logger.warning.assert_not_called()
def test_check_agentops_update_json_error(self):
"""Test update check when JSON parsing fails."""
mock_response = Mock()
mock_response.status_code = 200
mock_response.json.side_effect = Exception("JSON error")
with patch("agentops.helpers.version.requests.get", return_value=mock_response):
with patch("agentops.helpers.version.logger") as mock_logger:
result = check_agentops_update()
assert result is None
mock_logger.debug.assert_called_once_with("Failed to check for updates: JSON error")