"""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_rdp_login_monitor_path(): script = _rdp_update_powershell_script("") assert "$ProgressPreference = 'SilentlyContinue'" in script assert "try {" in script assert "Write-Output ('ERROR: '" in script assert "RDP-login-monitor\\Deploy-LoginMonitor.ps1" in script def test_rdp_update_custom_script_uses_literal_path(): script = _rdp_update_powershell_script(r"C:\ProgramData\RDP-login-monitor\Deploy-LoginMonitor.ps1") assert r"C:\ProgramData\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) == ""