zotero-addons-scraper/tests/unit/test_version.py
2025-12-23 16:22:54 +08:00

72 lines
2.2 KiB
Python

"""Unit tests for version utilities."""
import pytest
from zotero_scraper.utils.version import compare_versions, version_in_range
class TestCompareVersions:
"""Tests for compare_versions function."""
@pytest.mark.parametrize(
"v1,v2,expected",
[
# Equal versions
("1.0.0", "1.0.0", 0),
("2.0", "2.0", 0),
("1", "1", 0),
# v1 > v2
("2.0.0", "1.0.0", 1),
("1.1.0", "1.0.0", 1),
("1.0.1", "1.0.0", 1),
("10.0.0", "9.0.0", 1),
("1.0.0", "0.9.9", 1),
# v1 < v2
("1.0.0", "2.0.0", -1),
("1.0.0", "1.1.0", -1),
("1.0.0", "1.0.1", -1),
("9.0.0", "10.0.0", -1),
# Different length versions
("1.0", "1.0.0", 0),
("1.0.0", "1.0", 0),
("1.0.1", "1.0", 1),
# Pre-release versions (using - separator)
("1.0.0-beta", "1.0.0-alpha", 1),
("1.0.0-alpha", "1.0.0-beta", -1),
# Wildcard versions
("7.*", "6.*", 1),
("6.*", "7.*", -1),
("7.*", "7.*", 0),
],
)
def test_compare_versions(self, v1: str, v2: str, expected: int):
"""Test version comparison."""
assert compare_versions(v1, v2) == expected
def test_compare_versions_with_int(self):
"""Test version comparison with integer input."""
assert compare_versions(1, "1.0.0") == 0
assert compare_versions("1.0.0", 1) == 0
class TestVersionInRange:
"""Tests for version_in_range function."""
@pytest.mark.parametrize(
"version,min_ver,max_ver,expected",
[
("7.0", "6.0", "8.0", True),
("6.0", "6.0", "7.0", True),
("7.0", "6.0", "7.0", True),
("5.0", "6.0", "7.0", False),
("8.0", "6.0", "7.0", False),
("7.*", "6.*", "7.*", True),
("6.5", "6.*", "7.*", True),
],
)
def test_version_in_range(
self, version: str, min_ver: str, max_ver: str, expected: bool
):
"""Test version range checking."""
assert version_in_range(version, min_ver, max_ver) == expected