"""Tests for install module just commands. These tests verify that installation commands work correctly. Note: Some tests may modify local installations. """ from __future__ import annotations from typing import TYPE_CHECKING, ClassVar import pytest if TYPE_CHECKING: from tests.just_commands.conftest import JustRunner class TestInstallSyntax: """Syntax validation tests for install commands.""" INSTALL_COMMANDS: ClassVar[list[str]] = [ "install::mcp-server", "install::mcp-server-clean", "install::uninstall-mcp-server", "install::mcp-bridge-workbench", "install::uninstall-mcp-bridge-workbench", "install::macro-cut", "install::uninstall-macro-cut", "install::macro-export", "install::uninstall-macro-export", "install::macro-all", "install::uninstall-macro-all", "install::status", ] @pytest.mark.just_syntax @pytest.mark.parametrize("command", INSTALL_COMMANDS) def test_install_command_syntax(self, just: JustRunner, command: str) -> None: """Install command should have valid syntax.""" result = just.dry_run(command) assert result.success, f"Syntax error in '{command}': {result.stderr}" class TestInstallRuntime: """Runtime tests for install commands.""" @pytest.mark.just_runtime def test_status_runs(self, just: JustRunner) -> None: """Status command should run and show installation status.""" result = just.run("install::status", timeout=60) assert result.success, f"Status failed: {result.stderr}" # Should contain some expected output assert "Installation Status" in result.stdout @pytest.mark.just_runtime def test_freecad_dirs_helper_runs(self, just: JustRunner) -> None: """Private _freecad-dirs helper should work.""" result = just.run("install::_freecad-dirs", timeout=10) assert result.success, f"_freecad-dirs failed: {result.stderr}" # Should output shell code to set directories assert "MOD_DIR" in result.stdout assert "MACRO_DIR" in result.stdout @pytest.mark.just_runtime @pytest.mark.slow def test_mcp_server_install_uninstall(self, just: JustRunner) -> None: """MCP server install and uninstall should work.""" # Install result = just.run("install::mcp-server", timeout=300) assert result.success, f"MCP server install failed: {result.stderr}" # Verify installation status_result = just.run("install::status", timeout=60) assert "Robust MCP Server" in status_result.stdout # Uninstall uninstall_result = just.run("install::uninstall-mcp-server", timeout=60) assert uninstall_result.success, ( f"MCP server uninstall failed: {uninstall_result.stderr}" )