"""Unit tests for PyPI proxy functionality.""" import pytest from app.pypi_proxy import _parse_requires_dist class TestParseRequiresDist: """Tests for _parse_requires_dist function.""" def test_simple_package(self): """Test parsing a simple package name.""" name, version = _parse_requires_dist("numpy") assert name == "numpy" assert version is None def test_package_with_version(self): """Test parsing package with version constraint.""" name, version = _parse_requires_dist("numpy>=1.21.0") assert name == "numpy" assert version == ">=1.21.0" def test_package_with_parenthesized_version(self): """Test parsing package with parenthesized version.""" name, version = _parse_requires_dist("requests (>=2.25.0)") assert name == "requests" assert version == ">=2.25.0" def test_package_with_python_version_marker(self): """Test that python_version markers are preserved but marker stripped.""" name, version = _parse_requires_dist("typing-extensions; python_version < '3.8'") assert name == "typing-extensions" assert version is None def test_filters_extra_dependencies(self): """Test that extra dependencies are filtered out.""" # Extra dependencies should return (None, None) name, version = _parse_requires_dist("pytest; extra == 'test'") assert name is None assert version is None name, version = _parse_requires_dist("sphinx; extra == 'docs'") assert name is None assert version is None def test_filters_platform_specific_darwin(self): """Test that macOS-specific dependencies are filtered out.""" name, version = _parse_requires_dist("pyobjc; sys_platform == 'darwin'") assert name is None assert version is None def test_filters_platform_specific_win32(self): """Test that Windows-specific dependencies are filtered out.""" name, version = _parse_requires_dist("pywin32; sys_platform == 'win32'") assert name is None assert version is None def test_filters_platform_system_marker(self): """Test that platform_system markers are filtered out.""" name, version = _parse_requires_dist("jaraco-windows; platform_system == 'Windows'") assert name is None assert version is None def test_normalizes_package_name(self): """Test that package names are normalized (PEP 503).""" name, version = _parse_requires_dist("Typing_Extensions>=3.7.4") assert name == "typing-extensions" assert version == ">=3.7.4" def test_complex_version_constraint(self): """Test parsing complex version constraints.""" name, version = _parse_requires_dist("gast!=0.5.0,!=0.5.1,!=0.5.2,>=0.2.1") assert name == "gast" assert version == "!=0.5.0,!=0.5.1,!=0.5.2,>=0.2.1" def test_version_range(self): """Test parsing version range constraints.""" name, version = _parse_requires_dist("grpcio<2.0,>=1.24.3") assert name == "grpcio" assert version == "<2.0,>=1.24.3" def test_tilde_version(self): """Test parsing tilde version constraints.""" name, version = _parse_requires_dist("tensorboard~=2.20.0") assert name == "tensorboard" assert version == "~=2.20.0"