From 09985238fedd57758d6e896000f5463be6519d81 Mon Sep 17 00:00:00 2001 From: 7000pctAUTO Date: Fri, 30 Jan 2026 04:12:46 +0000 Subject: [PATCH] Add tests and example configuration --- tests/test_platform.py | 177 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 177 insertions(+) create mode 100644 tests/test_platform.py diff --git a/tests/test_platform.py b/tests/test_platform.py new file mode 100644 index 0000000..7a2d8f7 --- /dev/null +++ b/tests/test_platform.py @@ -0,0 +1,177 @@ +"""Unit tests for platform detection.""" + +import platform +from pathlib import Path +from unittest.mock import patch, MagicMock + +import pytest + +from dev_env_sync.core.platform import PlatformDetector, Platform, PlatformInfo + + +class TestPlatformDetector: + """Tests for PlatformDetector class.""" + + def test_detect_linux(self, mocker): + """Test detection of Linux platform.""" + mocker.patch('platform.system', return_value='Linux') + mocker.patch('platform.release', return_value='5.4.0-generic') + mocker.patch('platform.version', return_value='#1 SMP') + mocker.patch('platform.machine', return_value='x86_64') + mocker.patch('pathlib.Path.home', return_value=Path('/home/testuser')) + + info = PlatformDetector.detect() + + assert info.system == "Linux" + assert info.platform == Platform.LINUX + assert info.is_wsl == False + + def test_detect_macos(self, mocker): + """Test detection of macOS platform.""" + mocker.patch('platform.system', return_value='Darwin') + mocker.patch('platform.release', return_value='21.4.0') + mocker.patch('platform.version', return_value='Darwin Kernel Version 21.4.0') + mocker.patch('platform.machine', return_value='arm64') + mocker.patch('pathlib.Path.home', return_value=Path('/Users/testuser')) + + info = PlatformDetector.detect() + + assert info.system == "Darwin" + assert info.platform == Platform.MACOS + assert info.is_wsl == False + + def test_detect_wsl(self, mocker): + """Test detection of WSL platform.""" + mocker.patch('platform.system', return_value='Linux') + mocker.patch('platform.release', return_value='5.4.72-microsoft-standard-WSL2') + mocker.patch('platform.version', return_value='#1 SMP') + mocker.patch('platform.machine', return_value='x86_64') + mocker.patch('pathlib.Path.home', return_value=Path('/home/testuser')) + + wsl_path = Path('/proc/sys/kernel/osrelease') + wsl_path.parent.mkdir(parents=True, exist_ok=True) + wsl_path.write_text('5.4.72-microsoft-standard-WSL2') + + info = PlatformDetector.detect() + + assert info.system == "Linux" + assert info.platform == Platform.WSL + assert info.is_wsl == True + + def test_is_linux(self, mocker): + """Test is_linux method.""" + mocker.patch('platform.system', return_value='Linux') + mocker.patch('platform.release', return_value='5.4.0') + mocker.patch('platform.version', return_value='#1 SMP') + mocker.patch('platform.machine', return_value='x86_64') + mocker.patch('pathlib.Path.home', return_value=Path('/home/testuser')) + + assert PlatformDetector.is_linux() == True + + def test_is_macos(self, mocker): + """Test is_macos method.""" + mocker.patch('platform.system', return_value='Darwin') + mocker.patch('platform.release', return_value='21.4.0') + mocker.patch('platform.version', return_value='Darwin Kernel Version 21.4.0') + mocker.patch('platform.machine', return_value='arm64') + mocker.patch('pathlib.Path.home', return_value=Path('/Users/testuser')) + + assert PlatformDetector.is_macos() == True + + def test_is_wsl(self, mocker): + """Test is_wsl method.""" + mocker.patch('platform.system', return_value='Linux') + mocker.patch('platform.release', return_value='5.4.72-microsoft-standard-WSL2') + mocker.patch('platform.version', return_value='#1 SMP') + mocker.patch('platform.machine', return_value='x86_64') + mocker.patch('pathlib.Path.home', return_value=Path('/home/testuser')) + + wsl_path = Path('/proc/sys/kernel/osrelease') + wsl_path.parent.mkdir(parents=True, exist_ok=True) + wsl_path.write_text('5.4.72-microsoft-standard-WSL2') + + assert PlatformDetector.is_wsl() == True + + def test_get_home_dir(self, mocker): + """Test get_home_dir method.""" + home_path = Path('/home/testuser') + mocker.patch('pathlib.Path.home', return_value=home_path) + + result = PlatformDetector.get_home_dir() + + assert result == home_path + + def test_get_editor_config_dir_vscode_linux(self, mocker): + """Test getting VS Code config directory on Linux.""" + mocker.patch('platform.system', return_value='Linux') + mocker.patch('platform.release', return_value='5.4.0') + mocker.patch('platform.version', return_value='#1 SMP') + mocker.patch('platform.machine', return_value='x86_64') + mocker.patch('pathlib.Path.home', return_value=Path('/home/testuser')) + + result = PlatformDetector.get_editor_config_dir("vscode") + + assert str(result) == "/home/testuser/.config/Code/User" + + def test_get_editor_config_dir_neovim_linux(self, mocker): + """Test getting Neovim config directory on Linux.""" + mocker.patch('platform.system', return_value='Linux') + mocker.patch('platform.release', return_value='5.4.0') + mocker.patch('platform.version', return_value='#1 SMP') + mocker.patch('platform.machine', return_value='x86_64') + mocker.patch('pathlib.Path.home', return_value=Path('/home/testuser')) + + result = PlatformDetector.get_editor_config_dir("neovim") + + assert str(result) == "/home/testuser/.config/nvim" + + def test_get_package_manager_apt(self, mocker): + """Test getting package manager for apt-based system.""" + mocker.patch('platform.system', return_value='Linux') + mocker.patch('platform.release', return_value='5.4.0') + mocker.patch('platform.version', return_value='#1 SMP') + mocker.patch('platform.machine', return_value='x86_64') + mocker.patch('platform.mac_ver', return_value=('', '', '')) + + with patch('shutil.which', return_value='/usr/bin/apt'): + result = PlatformDetector.get_package_manager() + + assert result == "apt" + + def test_get_package_manager_brew(self, mocker): + """Test getting package manager for Homebrew on macOS.""" + mocker.patch('platform.system', return_value='Darwin') + mocker.patch('platform.release', return_value='21.4.0') + mocker.patch('platform.version', return_value='Darwin Kernel Version 21.4.0') + mocker.patch('platform.machine', return_value='arm64') + mocker.patch('pathlib.Path.home', return_value=Path('/Users/testuser')) + mocker.patch('platform.mac_ver', return_value=('11.4.0', '', '')) + + with patch('shutil.which', return_value='/usr/local/bin/brew'): + result = PlatformDetector.get_package_manager() + + assert result == "brew" + + def test_normalize_path_absolute(self, mocker): + """Test normalizing absolute path.""" + mocker.patch('platform.system', return_value='Linux') + mocker.patch('platform.release', return_value='5.4.0') + mocker.patch('platform.version', return_value='#1 SMP') + mocker.patch('platform.machine', return_value='x86_64') + mocker.patch('pathlib.Path.home', return_value=Path('/home/testuser')) + + result = PlatformDetector.normalize_path('/absolute/path') + + assert str(result) == '/absolute/path' + + def test_normalize_path_home(self, mocker): + """Test normalizing path with home directory expansion.""" + mocker.patch('platform.system', return_value='Linux') + mocker.patch('platform.release', return_value='5.4.0') + mocker.patch('platform.version', return_value='#1 SMP') + mocker.patch('platform.machine', return_value='x86_64') + mocker.patch('pathlib.Path.home', return_value=Path('/home/testuser')) + + result = PlatformDetector.normalize_path('~/config') + + assert str(result) == '/home/testuser/config'