"""WinRM command builder and CLIXML error parsing tests.""" from app.services.winrm_connect import ( _clixml_to_plain, _rdp_update_powershell_script, _winrm_failure_detail, ) def test_rdp_update_default_script_uses_netlogon_and_git_fallback(): script = _rdp_update_powershell_script("") assert "$ProgressPreference = 'SilentlyContinue'" in script assert "NETLOGON\\RDP-login-monitor" in script assert "Deploy-LoginMonitor.ps1" in script assert "_sac_git" in script assert "git.kalinamall.ru/PapaTramp/RDP-login-monitor.git" in script assert "ProgramData\\RDP-login-monitor\\Deploy-LoginMonitor.ps1" not in script def test_rdp_update_default_script_honors_sac_git_settings(): script = _rdp_update_powershell_script( "", repo_url="https://git.example.com/org/rdp.git", git_branch="release", ) assert "git.example.com/org/rdp.git" in script assert "$branch = 'release'" in script def test_rdp_update_custom_script_uses_literal_path(): script = _rdp_update_powershell_script(r"\\b26\NETLOGON\RDP-login-monitor\Deploy-LoginMonitor.ps1") assert r"\\b26\NETLOGON\RDP-login-monitor\Deploy-LoginMonitor.ps1" in script assert "Test-Path -LiteralPath" in script def test_rdp_update_custom_script_escapes_single_quotes(): script = _rdp_update_powershell_script(r"C:\Users\O'Brien\Deploy-LoginMonitor.ps1") assert "O''Brien" in script def test_winrm_failure_detail_extracts_message_from_clixml(): clixml = ( "#< CLIXML\n" 'Preparing modules for first use.' 'Deploy-LoginMonitor.ps1 not found on client PC' ) detail = _winrm_failure_detail("", clixml, 1) assert detail == "Deploy-LoginMonitor.ps1 not found on client PC" def test_winrm_failure_detail_prefers_plain_stderr(): detail = _winrm_failure_detail("", "Access is denied", 5) assert detail == "Access is denied" def test_winrm_failure_detail_never_returns_raw_clixml_progress(): clixml = ( "#< CLIXML " 'Preparing modules for first use.' ) detail = _winrm_failure_detail("", clixml, 1) assert "#< CLIXML" not in detail assert "exit code" in detail.lower() def test_clixml_to_plain_strips_progress_only_blob(): clixml = "#< CLIXML Preparing modules for first use." assert _clixml_to_plain(clixml) == ""