mirror of
https://github.com/langbot-app/LangBot.git
synced 2026-06-02 20:14:36 +00:00
137 lines
4.8 KiB
Python
137 lines
4.8 KiB
Python
"""
|
|
Unit tests for version utility functions.
|
|
|
|
Tests version comparison logic without network calls.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from unittest.mock import Mock
|
|
|
|
from langbot.pkg.utils.version import VersionManager
|
|
|
|
|
|
class TestVersionComparison:
|
|
"""Tests for version comparison functions."""
|
|
|
|
def _create_version_manager(self):
|
|
"""Create a VersionManager with mock app."""
|
|
mock_app = Mock()
|
|
mock_app.proxy_mgr = Mock()
|
|
mock_app.proxy_mgr.get_forward_providers = Mock(return_value={})
|
|
mock_app.logger = Mock()
|
|
return VersionManager(mock_app)
|
|
|
|
def test_is_newer_same_version(self):
|
|
"""is_newer returns False for same version."""
|
|
vm = self._create_version_manager()
|
|
result = vm.is_newer('v1.0.0', 'v1.0.0')
|
|
assert result is False
|
|
|
|
def test_is_newer_different_major_version(self):
|
|
"""is_newer returns False for different major version."""
|
|
# Note: is_newer ignores major version changes
|
|
vm = self._create_version_manager()
|
|
result = vm.is_newer('v2.0.0', 'v1.0.0')
|
|
assert result is False
|
|
|
|
def test_is_newer_minor_update(self):
|
|
"""is_newer returns True for minor update within same major."""
|
|
vm = self._create_version_manager()
|
|
result = vm.is_newer('v1.1.0', 'v1.0.0')
|
|
assert result is True
|
|
|
|
def test_is_newer_patch_update(self):
|
|
"""is_newer returns True for patch update within same major."""
|
|
vm = self._create_version_manager()
|
|
result = vm.is_newer('v1.0.1', 'v1.0.0')
|
|
assert result is True
|
|
|
|
def test_is_newer_with_fourth_segment(self):
|
|
"""is_newer ignores fourth version segment."""
|
|
# Both have same first 3 segments
|
|
vm = self._create_version_manager()
|
|
result = vm.is_newer('v1.0.0.1', 'v1.0.0.0')
|
|
assert result is False
|
|
|
|
def test_is_newer_short_version(self):
|
|
"""is_newer handles short version numbers."""
|
|
vm = self._create_version_manager()
|
|
result = vm.is_newer('v1.0', 'v1.0')
|
|
assert result is False
|
|
|
|
def test_is_newer_older_version(self):
|
|
"""is_newer returns True when new > old."""
|
|
vm = self._create_version_manager()
|
|
result = vm.is_newer('v1.2.0', 'v1.1.0')
|
|
assert result is True
|
|
|
|
|
|
class TestCompareVersionStr:
|
|
"""Tests for compare_version_str static method."""
|
|
|
|
def test_compare_equal_versions(self):
|
|
"""Equal versions return 0."""
|
|
result = VersionManager.compare_version_str('v1.0.0', 'v1.0.0')
|
|
assert result == 0
|
|
|
|
def test_compare_without_v_prefix(self):
|
|
"""Versions without v prefix work the same."""
|
|
result = VersionManager.compare_version_str('1.0.0', '1.0.0')
|
|
assert result == 0
|
|
|
|
def test_compare_mixed_prefix(self):
|
|
"""Mixed v prefix works correctly."""
|
|
result = VersionManager.compare_version_str('v1.0.0', '1.0.0')
|
|
assert result == 0
|
|
|
|
def test_compare_first_greater(self):
|
|
"""First version greater returns 1."""
|
|
result = VersionManager.compare_version_str('v1.1.0', 'v1.0.0')
|
|
assert result == 1
|
|
|
|
def test_compare_first_smaller(self):
|
|
"""First version smaller returns -1."""
|
|
result = VersionManager.compare_version_str('v1.0.0', 'v1.1.0')
|
|
assert result == -1
|
|
|
|
def test_compare_different_lengths(self):
|
|
"""Different length versions are padded with zeros."""
|
|
result = VersionManager.compare_version_str('v1.0', 'v1.0.0')
|
|
assert result == 0
|
|
|
|
def test_compare_shorter_greater(self):
|
|
"""Shorter version padded, first still greater."""
|
|
result = VersionManager.compare_version_str('v1.1', 'v1.0.0')
|
|
assert result == 1
|
|
|
|
def test_compare_longer_greater(self):
|
|
"""Longer version, first smaller."""
|
|
result = VersionManager.compare_version_str('v1.0', 'v1.0.1')
|
|
assert result == -1
|
|
|
|
def test_compare_major_version(self):
|
|
"""Major version comparison."""
|
|
result = VersionManager.compare_version_str('v2.0.0', 'v1.9.9')
|
|
assert result == 1
|
|
|
|
def test_compare_minor_version(self):
|
|
"""Minor version comparison."""
|
|
result = VersionManager.compare_version_str('v1.5.0', 'v1.4.9')
|
|
assert result == 1
|
|
|
|
def test_compare_patch_version(self):
|
|
"""Patch version comparison."""
|
|
result = VersionManager.compare_version_str('v1.0.1', 'v1.0.0')
|
|
assert result == 1
|
|
|
|
def test_compare_four_segments(self):
|
|
"""Four segment version comparison."""
|
|
result = VersionManager.compare_version_str('v1.0.0.1', 'v1.0.0.0')
|
|
assert result == 1
|
|
|
|
def test_compare_long_versions(self):
|
|
"""Long version strings work correctly."""
|
|
result = VersionManager.compare_version_str('v1.2.3.4.5', 'v1.2.3.4.4')
|
|
assert result == 1
|