#!/usr/bin/env nu # Integration test for syntaxis installation # Tests Phases 1-4: Config, Wrappers, Manifest, and Documentation def test_header [title: string] { print "" print "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" print $"🧪 ($title)" print "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" } def test_section [name: string] { print "" print $" 📝 ($name)" } def test_pass [message: string] { print $" ✅ ($message)" } def test_fail [message: string] { print $" ❌ ($message)" } def test_info [message: string] { print $" ℹ️ ($message)" } # Phase 1: Configuration Files def test_phase_1 [] { test_header "Phase 1: Configuration Files" test_section "Main config file" let template_main = "syntaxis/workspace-api-config.template.toml" if ($template_main | path exists) { test_pass "Found main config template" let size = (ls $template_main | get 0.size) test_info $"Size: ($size) bytes" } else { test_fail "Main config template not found" return false } test_section "Feature config files" let features_dir = "syntaxis/configs/features" if ($features_dir | path exists) { test_pass "Features directory exists" let templates = (ls $features_dir | where name ends-with ".template" | length) test_info $"Found ($templates) feature templates" if ($templates >= 4) { test_pass "All required feature configs present" } else { test_fail $"Expected 4+ feature configs, found ($templates)" return false } } else { test_fail "Features directory not found" return false } test_section "Config file syntax" # Validate TOML syntax (simple check) try { let main_content = (open $template_main) test_pass "Main config has valid TOML syntax" } catch { test_fail "Main config has invalid TOML syntax" return false } test_pass "✨ Phase 1 Complete: Configuration files ready" return true } # Phase 2: Wrapper Scripts def test_phase_2 [] { test_header "Phase 2: Wrapper Scripts" let home = $env.HOME let cargo_bin = $"($home)/.cargo/bin" test_section "Wrapper script for workspace" let workspace_wrapper = $"($cargo_bin)/workspace" if ($workspace_wrapper | path exists) { test_pass "workspace wrapper exists" # Check if it's a NuShell script let is_nushell = (open $workspace_wrapper | str starts-with "#!/usr/bin/env nu") if $is_nushell { test_pass "workspace wrapper is valid NuShell script" } else { test_fail "workspace wrapper is not a NuShell script" return false } # Check for config discovery logic let has_config_search = (open $workspace_wrapper | str contains "config_paths") if $has_config_search { test_pass "workspace wrapper has config discovery logic" } else { test_fail "workspace wrapper missing config discovery logic" return false } } else { test_info "workspace wrapper not yet installed (expected if not run install)" } test_section "Wrapper script for workspace-tui" let tui_wrapper = $"($cargo_bin)/workspace-tui" if ($tui_wrapper | path exists) { test_pass "workspace-tui wrapper exists" let is_nushell = (open $tui_wrapper | str starts-with "#!/usr/bin/env nu") if $is_nushell { test_pass "workspace-tui wrapper is valid NuShell script" } else { test_fail "workspace-tui wrapper is not a NuShell script" return false } } else { test_info "workspace-tui wrapper not yet installed" } test_section "Real binary renaming" let workspace_real = $"($cargo_bin)/workspace.real" if ($workspace_real | path exists) { test_pass "workspace.real binary exists" } else { test_info "workspace.real not yet installed" } test_pass "✨ Phase 2 Complete: Wrapper scripts ready" return true } # Phase 3: Installation Manifest def test_phase_3 [] { test_header "Phase 3: Installation Manifest" let manifest_path = ".syntaxis/manifest.toml" test_section "Manifest file" if ($manifest_path | path exists) { test_pass "Installation manifest exists" # Read manifest as string (not parsed TOML) let content = (cat $manifest_path) # Check required sections (accept both old and new formats) let has_installation = ($content | str contains "[installation]") let has_created_at = ($content | str contains "created_at") if ($has_installation or $has_created_at) { test_pass "Manifest contains installation metadata" } else { test_fail "Manifest missing installation metadata" return false } let has_binaries = ($content | str contains "[binaries") if $has_binaries { test_pass "Manifest contains [binaries] section" } else { test_fail "Manifest missing [binaries] section" return false } let has_configurations = ($content | str contains "[configurations") if $has_configurations { test_pass "Manifest contains [configurations] section" } else { test_fail "Manifest missing [configurations] section" return false } # Verification section is optional (only in new format) let has_verification = ($content | str contains "[verification]") if $has_verification { test_pass "Manifest contains [verification] section (enhanced format)" } else { test_info "Manifest uses basic format (will upgrade on next install)" } # Check for checksums (only in new format) let has_checksums = ($content | str contains "checksum") if $has_checksums { test_pass "Manifest includes integrity checksums (enhanced format)" } else { test_info "Manifest doesn't include checksums (will add on next install)" } } else { test_info "Installation manifest not yet created (expected if not run install)" } test_pass "✨ Phase 3 Complete: Manifest structure valid" return true } # Phase 4: Documentation def test_phase_4 [] { test_header "Phase 4: Documentation" test_section "INSTALLATION_GUIDE.md" if ("INSTALLATION_GUIDE.md" | path exists) { test_pass "INSTALLATION_GUIDE.md exists" let content = (open "INSTALLATION_GUIDE.md") # Check for key sections let has_quick_start = ($content | str contains "Quick Start") if $has_quick_start { test_pass "Contains Quick Start section" } else { test_fail "Missing Quick Start section" return false } let has_commands = ($content | str contains "Installation Commands") if $has_commands { test_pass "Contains Installation Commands section" } else { test_fail "Missing Installation Commands section" return false } let has_troubleshooting = ($content | str contains "Troubleshooting") if $has_troubleshooting { test_pass "Contains Troubleshooting section" } else { test_fail "Missing Troubleshooting section" return false } } else { test_fail "INSTALLATION_GUIDE.md not found" return false } test_section "CONFIGURATION_GUIDE.md" if ("CONFIGURATION_GUIDE.md" | path exists) { test_pass "CONFIGURATION_GUIDE.md exists" let content = (open "CONFIGURATION_GUIDE.md") let has_hierarchy = ($content | str contains "Configuration Hierarchy") if $has_hierarchy { test_pass "Contains Configuration Hierarchy section" } else { test_fail "Missing Configuration Hierarchy section" return false } let has_main_config = ($content | str contains "workspace-api.toml") if $has_main_config { test_pass "Documents main configuration file" } else { test_fail "Missing main configuration documentation" return false } let has_features = ($content | str contains "auth.toml") if $has_features { test_pass "Documents feature configurations" } else { test_fail "Missing feature configuration documentation" return false } } else { test_fail "CONFIGURATION_GUIDE.md not found" return false } test_section "WRAPPER_DESIGN.md" if ("WRAPPER_DESIGN.md" | path exists) { test_pass "WRAPPER_DESIGN.md exists" let content = (open "WRAPPER_DESIGN.md") let has_overview = ($content | str contains "Overview") if $has_overview { test_pass "Contains Overview section" } else { test_fail "Missing Overview section" return false } let has_discovery = ($content | str contains "Configuration Discovery") if $has_discovery { test_pass "Documents configuration discovery" } else { test_fail "Missing configuration discovery documentation" return false } let has_env = ($content | str contains "Environment Variables") if $has_env { test_pass "Documents environment variables" } else { test_fail "Missing environment variables documentation" return false } let has_debugging = ($content | str contains "Debugging") if $has_debugging { test_pass "Contains debugging guide" } else { test_fail "Missing debugging guide" return false } } else { test_fail "WRAPPER_DESIGN.md not found" return false } test_pass "✨ Phase 4 Complete: Documentation complete" return true } # End-to-end test: Verify all phases work together def test_integration [] { test_header "End-to-End Integration Test" test_section "Configuration discovery" let home = $env.HOME let config_dir = $"($home)/.config/syntaxis" if ($config_dir | path exists) { test_pass "Configuration directory exists" let main_config = $"($config_dir)/workspace-api.toml" if ($main_config | path exists) { test_pass "Main configuration deployed" } else { test_info "Main configuration not deployed (not yet installed)" } } else { test_info "Configuration directory not yet created" } test_section "Data directory" let data_dir = $"($home)/.local/share/syntaxis" if ($data_dir | path exists) { test_pass "Data directory exists and is ready" } else { test_info "Data directory not yet created (created on first run)" } test_section "Installation script" if ("scripts/install-cli.nu" | path exists) { test_pass "Installation script exists" let content = (open "scripts/install-cli.nu") let has_all_functions = ( ($content | str contains "def deploy_configurations") and ($content | str contains "def create_wrappers") and ($content | str contains "def register_installations") ) if $has_all_functions { test_pass "Installation script has all required functions" } else { test_fail "Installation script missing required functions" return false } } else { test_fail "Installation script not found" return false } test_pass "✨ Integration test complete: All systems ready" return true } # Main test runner def main [] { print "🧪 syntaxis Installation Integration Tests" print "Starting comprehensive test suite..." print "" let phase1_ok = (test_phase_1) let phase2_ok = (test_phase_2) let phase3_ok = (test_phase_3) let phase4_ok = (test_phase_4) let integration_ok = (test_integration) # Summary print "" print "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" print "📊 Test Summary" print "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" print "" let phase1_status = if $phase1_ok { "✅" } else { "❌" } let phase2_status = if $phase2_ok { "✅" } else { "❌" } let phase3_status = if $phase3_ok { "✅" } else { "❌" } let phase4_status = if $phase4_ok { "✅" } else { "❌" } let integration_status = if $integration_ok { "✅" } else { "❌" } print ("Phase 1 [Configs]: " + $phase1_status) print ("Phase 2 [Wrappers]: " + $phase2_status) print ("Phase 3 [Manifest]: " + $phase3_status) print ("Phase 4 [Documentation]: " + $phase4_status) print ("Integration Test: " + $integration_status) print "" let all_ok = ($phase1_ok and $phase2_ok and $phase3_ok and $phase4_ok and $integration_ok) if $all_ok { print "🎉 All tests passed! Installation system is ready." print "" print "Next steps:" print " 1. Run installation: just scripts-install all" print " 2. Check status: just scripts-install status" print " 3. Use binaries: syntaxis-cli --help" print "" exit 0 } else { print "⚠️ Some tests failed. Review output above." print "" exit 1 } }