import os from unittest.mock import patch, MagicMock from pathlib import Path import pytest from vrobbler.context_processors import version_info @pytest.fixture def mock_request(): return MagicMock() class TestVersionInfo: def test_returns_version_and_commit(self, mock_request): with ( patch("vrobbler.context_processors.get_version") as mock_get_version, patch( "vrobbler.context_processors.subprocess.check_output" ) as mock_check_output, ): mock_get_version.return_value = "1.0.0" mock_check_output.return_value = b"abc1234" result = version_info(mock_request) assert result["app_version"] == "1.0.0" assert result["git_commit"] == "abc1234" def test_uses_env_commit_if_set(self, mock_request): with ( patch.dict(os.environ, {"VROBBLER_COMMIT": "env_commit_hash"}), patch("vrobbler.context_processors.get_version") as mock_get_version, ): mock_get_version.return_value = "1.0.0" result = version_info(mock_request) assert result["git_commit"] == "env_commit_hash" def test_returns_unknown_when_version_fails(self, mock_request): with ( patch("vrobbler.context_processors.get_version") as mock_get_version, patch( "vrobbler.context_processors.subprocess.check_output" ) as mock_check_output, ): mock_get_version.side_effect = Exception("not found") mock_check_output.return_value = b"abc1234" result = version_info(mock_request) assert result["app_version"] == "unknown" def test_returns_unknown_when_git_fails(self, mock_request): import subprocess with ( patch("vrobbler.context_processors.get_version") as mock_get_version, patch( "vrobbler.context_processors.subprocess.check_output" ) as mock_check_output, ): mock_get_version.return_value = "1.0.0" mock_check_output.side_effect = subprocess.SubprocessError() result = version_info(mock_request) assert result["git_commit"] == "unknown" def test_returns_unknown_when_git_not_found(self, mock_request): import subprocess with ( patch("vrobbler.context_processors.get_version") as mock_get_version, patch( "vrobbler.context_processors.subprocess.check_output" ) as mock_check_output, ): mock_get_version.return_value = "1.0.0" mock_check_output.side_effect = FileNotFoundError() result = version_info(mock_request) assert result["git_commit"] == "unknown"