Skip to content

Commit 0fcd5d9

Browse files
Testclaude
andcommitted
fix(installer): fix NSIS validation test failures
Fixes 7 failing tests in test_nsis_installer.py caused by implementation changes in previous commit (binary rename, config path change, MCP entry name change). Test Updates (tests/installer/test_nsis_installer.py): - test_extracts_mcpb_exe: Update regex to match cidx-semantic-search.exe - test_creates_mcpb_directory: Update path from $PROFILE\.mcpb to $APPDATA\.mcpb - test_removes_config_directory: Update uninstaller path assertion - test_handles_missing_config_directory: Update path pattern - test_removes_only_mcpb_key: Update MCP entry key to cidx-semantic-search - test_handles_missing_mcpb_entry: Update MCP entry key reference NSIS Script Fixes (scripts/installer/mcpb-installer.nsi): - Fix string escaping violations: single backslashes → double backslashes - Affected 6 locations with literal path strings (DetailPrint, IfFileExists, MessageBox) - Required by NSIS escaping rules (backslash is escape character) Result: All 86 NSIS validation tests now pass 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
1 parent 8042f28 commit 0fcd5d9

2 files changed

Lines changed: 14 additions & 14 deletions

File tree

scripts/installer/mcpb-installer.nsi

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -246,10 +246,10 @@ Section "Install MCPB" SecInstall
246246
; Note: Binary must exist at build time in scripts/installer/ directory
247247
; Build with: python scripts/build_binary.py --platform windows
248248
File "cidx-semantic-search.exe"
249-
DetailPrint "CIDX semantic search binary extracted to C:\mcpb\server\cidx-semantic-search.exe"
249+
DetailPrint "CIDX semantic search binary extracted to C:\\mcpb\\server\\cidx-semantic-search.exe"
250250

251251
; Verify file exists after extraction (paranoid check for filesystem errors)
252-
IfFileExists "C:\mcpb\server\cidx-semantic-search.exe" extraction_success 0
252+
IfFileExists "C:\\mcpb\\server\\cidx-semantic-search.exe" extraction_success 0
253253
StrCpy $ErrorMessage "MCPB binary not found after extraction - possible filesystem error"
254254
DetailPrint "$ErrorMessage"
255255
${If} $SilentMode == "1"
@@ -331,7 +331,7 @@ Section "Install MCPB" SecInstall
331331
${EndIf}
332332
${Else}
333333
DetailPrint "Installation completed successfully!"
334-
DetailPrint "MCPB binary: C:\mcpb\server\cidx-semantic-search.exe"
334+
DetailPrint "MCPB binary: C:\\mcpb\\server\\cidx-semantic-search.exe"
335335
DetailPrint "Configuration: $APPDATA\\.mcpb\\config.json"
336336
${EndIf}
337337
SectionEnd
@@ -638,7 +638,7 @@ Function VerifyInstallation
638638
StrCpy $VerifyUninstaller "FAILED"
639639

640640
; Check MCPB binary
641-
IfFileExists "C:\mcpb\server\cidx-semantic-search.exe" 0 +3
641+
IfFileExists "C:\\mcpb\\server\\cidx-semantic-search.exe" 0 +3
642642
StrCpy $VerifyBinary "OK"
643643
DetailPrint "[OK] MCPB binary exists"
644644
Goto check_config_dir
@@ -692,7 +692,7 @@ Function VerifyInstallation
692692
DetailPrint "========================================="
693693
DetailPrint ""
694694
DetailPrint "[$VerifyBinary] MCPB binary installed"
695-
DetailPrint " C:\mcpb\server\cidx-semantic-search.exe"
695+
DetailPrint " C:\\mcpb\\server\\cidx-semantic-search.exe"
696696
DetailPrint ""
697697
DetailPrint "[$VerifyConfigDir] Configuration directory created"
698698
DetailPrint " %APPDATA%\\.mcpb\\"
@@ -733,7 +733,7 @@ Function VerifyInstallation
733733
StrCpy $0 "MCPB Installation Summary$\r$\n"
734734
StrCpy $0 "$0========================$\r$\n$\r$\n"
735735
StrCpy $0 "$0[$VerifyBinary] MCPB binary installed$\r$\n"
736-
StrCpy $0 "$0 C:\mcpb\server\cidx-semantic-search.exe$\r$\n$\r$\n"
736+
StrCpy $0 "$0 C:\\mcpb\\server\\cidx-semantic-search.exe$\r$\n$\r$\n"
737737
StrCpy $0 "$0[$VerifyConfigDir] Configuration directory created$\r$\n"
738738
StrCpy $0 "$0 %APPDATA%\\.mcpb\\$\r$\n$\r$\n"
739739
StrCpy $0 "$0[$VerifyConfigFile] Configuration file created$\r$\n"

tests/installer/test_nsis_installer.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ def test_sets_output_path(self, nsis_script_content):
7373

7474
def test_extracts_mcpb_exe(self, nsis_script_content):
7575
"""Script extracts cidx-semantic-search.exe using File command."""
76-
assert re.search(r'File\s+"[^"]*mcpb-windows-x64\.exe"', nsis_script_content)
76+
assert re.search(r'File\s+"[^"]*cidx-semantic-search\.exe"', nsis_script_content)
7777

7878
def test_creates_directory_structure(self, nsis_script_content):
7979
"""Script creates directory structure."""
@@ -153,8 +153,8 @@ class TestAC4_MCPBConfiguration:
153153
"""Test AC4: MCPB configuration generation."""
154154

155155
def test_creates_mcpb_directory(self, nsis_script_content):
156-
"""Script creates .mcpb directory under %USERPROFILE%."""
157-
assert re.search(r'(CreateDirectory|SetOutPath).*PROFILE.*\.mcpb', nsis_script_content, re.IGNORECASE)
156+
"""Script creates .mcpb directory under %APPDATA%."""
157+
assert re.search(r'(CreateDirectory|SetOutPath).*APPDATA.*\.mcpb', nsis_script_content, re.IGNORECASE)
158158

159159
def test_constructs_config_json(self, nsis_script_content):
160160
"""Script constructs config.json with nsJSON."""
@@ -326,13 +326,13 @@ class TestUninstallerAC2_ConfigurationDirectoryRemoval:
326326
"""Test AC2: Configuration directory removal."""
327327

328328
def test_removes_config_directory(self, nsis_script_content):
329-
"""Script removes %USERPROFILE%\\.mcpb directory."""
330-
assert re.search(r'RMDir\s+/r\s+"\$PROFILE\\\.mcpb"', nsis_script_content, re.IGNORECASE)
329+
"""Script removes %APPDATA%\\.mcpb directory."""
330+
assert re.search(r'RMDir\s+/r\s+"\$APPDATA\\\.mcpb"', nsis_script_content, re.IGNORECASE)
331331

332332
def test_handles_missing_config_directory(self, nsis_script_content):
333333
"""Script handles missing config directory gracefully."""
334334
# Should check if config directory exists before removal
335-
assert re.search(r'IfFileExists.*PROFILE.*\.mcpb', nsis_script_content, re.IGNORECASE)
335+
assert re.search(r'IfFileExists.*APPDATA.*\.mcpb', nsis_script_content, re.IGNORECASE)
336336

337337
def test_logs_config_removal(self, nsis_script_content):
338338
"""Script logs configuration directory removal."""
@@ -358,7 +358,7 @@ def test_reads_claude_config(self, nsis_script_content):
358358
def test_removes_only_mcpb_key(self, nsis_script_content):
359359
"""Function removes only mcpb key from mcpServers."""
360360
# Should use nsJSON::Delete for specific key removal
361-
assert re.search(r'nsJSON::Delete.*mcpServers.*mcpb', nsis_script_content, re.IGNORECASE)
361+
assert re.search(r'nsJSON::Delete.*mcpServers.*cidx-semantic-search', nsis_script_content, re.IGNORECASE)
362362

363363
def test_preserves_other_mcp_servers(self, nsis_script_content):
364364
"""Function preserves other mcpServers entries."""
@@ -381,7 +381,7 @@ def test_handles_missing_claude_config(self, nsis_script_content):
381381
def test_handles_missing_mcpb_entry(self, nsis_script_content):
382382
"""Function handles missing mcpb entry gracefully."""
383383
# Should check if mcpb entry exists before trying to delete
384-
assert re.search(r'nsJSON::Get.*mcpb', nsis_script_content, re.IGNORECASE)
384+
assert re.search(r'nsJSON::Get.*cidx-semantic-search', nsis_script_content, re.IGNORECASE)
385385

386386

387387
class TestUninstallerAC4_AddRemoveProgramsIntegration:

0 commit comments

Comments
 (0)