Test-BookmarkBackupTool.ps1
|
# ===================================================================================== # BookmarkBackupTool Module - Test Suite # ===================================================================================== # This script validates that the module is working correctly # Run this after installation to ensure everything is functioning properly #Requires -Version 5.1 [CmdletBinding()] param( [Parameter(Mandatory = $false)] [switch]$Detailed ) $ErrorActionPreference = 'Continue' $testResults = @() $testCount = 0 $passCount = 0 $failCount = 0 function Write-TestResult { param( [string]$TestName, [bool]$Passed, [string]$Message = "" ) $script:testCount++ if ($Passed) { $script:passCount++ Write-Host " [PASS] $TestName" -ForegroundColor Green } else { $script:failCount++ Write-Host " [FAIL] $TestName" -ForegroundColor Red if ($Message) { Write-Host " $Message" -ForegroundColor Yellow } } $script:testResults += @{ Name = $TestName Passed = $Passed Message = $Message } } Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "BookmarkBackupTool Module Test Suite" -ForegroundColor Cyan Write-Host "========================================`n" -ForegroundColor Cyan # ===================================================================================== # Test 1: Module Loading # ===================================================================================== Write-Host "[Test 1] Module Loading Tests" -ForegroundColor Yellow try { Import-Module BookmarkBackupTool -Force -ErrorAction Stop Write-TestResult "Module Import" $true } catch { Write-TestResult "Module Import" $false $_.Exception.Message Write-Host "`nCRITICAL: Module cannot be loaded. Stopping tests." -ForegroundColor Red exit 1 } $module = Get-Module BookmarkBackupTool Write-TestResult "Module Loaded in Session" ($null -ne $module) if ($module) { Write-TestResult "Module Version Check" ($module.Version -eq '5.0.0') if ($Detailed) { Write-Host " Module Path: $($module.Path)" -ForegroundColor Gray Write-Host " Module Version: $($module.Version)" -ForegroundColor Gray } } # ===================================================================================== # Test 2: Function Exports # ===================================================================================== Write-Host "`n[Test 2] Function Export Tests" -ForegroundColor Yellow $requiredFunctions = @( 'Export-Bookmarks', 'Import-Bookmarks', 'Show-BookmarkGUI', 'Get-HomeSharePath', 'Test-BrowserInstalled', 'Test-BrowserRunning', 'Get-BrowserProfiles', 'Backup-ExistingBookmarks', 'New-BookmarkScheduledTask', 'Remove-BookmarkScheduledTask', 'Get-BookmarkConfiguration', 'Set-BookmarkConfiguration', 'Test-BookmarkPrerequisites' ) foreach ($func in $requiredFunctions) { $exists = Get-Command $func -Module BookmarkBackupTool -ErrorAction SilentlyContinue Write-TestResult "Function: $func" ($null -ne $exists) } # ===================================================================================== # Test 3: Alias Exports # ===================================================================================== Write-Host "`n[Test 3] Alias Export Tests" -ForegroundColor Yellow $requiredAliases = @( 'Export-BrowserBookmarks', 'Import-BrowserBookmarks', 'Backup-Bookmarks', 'Restore-Bookmarks' ) foreach ($alias in $requiredAliases) { $exists = Get-Alias $alias -ErrorAction SilentlyContinue Write-TestResult "Alias: $alias" ($null -ne $exists) } # ===================================================================================== # Test 4: Help System # ===================================================================================== Write-Host "`n[Test 4] Help System Tests" -ForegroundColor Yellow $helpTest = Get-Help Export-Bookmarks Write-TestResult "Export-Bookmarks Help" ($null -ne $helpTest -and $helpTest.Synopsis) $helpTest = Get-Help Import-Bookmarks Write-TestResult "Import-Bookmarks Help" ($null -ne $helpTest -and $helpTest.Synopsis) $helpTest = Get-Help Show-BookmarkGUI Write-TestResult "Show-BookmarkGUI Help" ($null -ne $helpTest -and $helpTest.Synopsis) # ===================================================================================== # Test 5: Configuration System # ===================================================================================== Write-Host "`n[Test 5] Configuration System Tests" -ForegroundColor Yellow try { $config = Get-BookmarkConfiguration -ErrorAction Stop Write-TestResult "Get Configuration" ($null -ne $config) if ($config) { Write-TestResult "Config Has Version" ($config.Version -eq '5.0') Write-TestResult "Config Has Default Browsers" ($config.DefaultBrowsers.Count -gt 0) Write-TestResult "Config Has Logging Setting" ($null -ne $config.LoggingEnabled) } } catch { Write-TestResult "Get Configuration" $false $_.Exception.Message } # ===================================================================================== # Test 6: Utility Functions # ===================================================================================== Write-Host "`n[Test 6] Utility Function Tests" -ForegroundColor Yellow try { $path = Get-HomeSharePath -ErrorAction Stop Write-TestResult "Get-HomeSharePath" ($null -ne $path -and $path.Length -gt 0) if ($Detailed -and $path) { Write-Host " Detected Path: $path" -ForegroundColor Gray } } catch { Write-TestResult "Get-HomeSharePath" $false $_.Exception.Message } try { $result = Test-BookmarkPrerequisites -ErrorAction Stop Write-TestResult "Test-BookmarkPrerequisites" $true } catch { Write-TestResult "Test-BookmarkPrerequisites" $false $_.Exception.Message } # ===================================================================================== # Test 7: Browser Detection # ===================================================================================== Write-Host "`n[Test 7] Browser Detection Tests" -ForegroundColor Yellow $browsers = @('Chrome', 'Edge', 'Firefox') foreach ($browser in $browsers) { try { $installed = Test-BrowserInstalled -BrowserName $browser -ErrorAction Stop Write-TestResult "$browser Detection" $true if ($Detailed) { Write-Host " $browser Installed: $installed" -ForegroundColor Gray if ($installed) { $running = Test-BrowserRunning -BrowserName $browser Write-Host " $browser Running: $running" -ForegroundColor Gray } } } catch { Write-TestResult "$browser Detection" $false $_.Exception.Message } } # ===================================================================================== # Test 8: Parameter Validation # ===================================================================================== Write-Host "`n[Test 8] Parameter Validation Tests" -ForegroundColor Yellow try { # Test with invalid browser (should fail gracefully) $params = (Get-Command Test-BrowserInstalled).Parameters['BrowserName'] $validValues = $params.Attributes | Where-Object {$_ -is [System.Management.Automation.ValidateSetAttribute]} Write-TestResult "Browser Parameter Validation" ($validValues.ValidValues.Count -eq 3) } catch { Write-TestResult "Browser Parameter Validation" $false $_.Exception.Message } try { # Test WhatIf support $cmd = Get-Command Export-Bookmarks $supportsWhatIf = $cmd.Parameters.ContainsKey('WhatIf') Write-TestResult "Export-Bookmarks WhatIf Support" $supportsWhatIf } catch { Write-TestResult "Export-Bookmarks WhatIf Support" $false $_.Exception.Message } try { # Test Confirm support $cmd = Get-Command Import-Bookmarks $supportsConfirm = $cmd.Parameters.ContainsKey('Confirm') Write-TestResult "Import-Bookmarks Confirm Support" $supportsConfirm } catch { Write-TestResult "Import-Bookmarks Confirm Support" $false $_.Exception.Message } # ===================================================================================== # Test 9: File System Tests (Safe) # ===================================================================================== Write-Host "`n[Test 9] File System Tests" -ForegroundColor Yellow $testPath = Join-Path $env:TEMP "BookmarkToolTest_$(Get-Random)" try { # Test path creation New-Item -ItemType Directory -Path $testPath -Force | Out-Null Write-TestResult "Create Test Directory" (Test-Path $testPath) # Test configuration directory $configDir = "$env:USERPROFILE\.bookmarktool" if (Test-Path $configDir) { Write-TestResult "Configuration Directory Exists" $true } else { Write-TestResult "Configuration Directory" $false "Directory not created yet (normal for first run)" } # Cleanup if (Test-Path $testPath) { Remove-Item $testPath -Force -Recurse } } catch { Write-TestResult "File System Operations" $false $_.Exception.Message } # ===================================================================================== # Test 10: Advanced Features # ===================================================================================== Write-Host "`n[Test 10] Advanced Feature Tests" -ForegroundColor Yellow try { # Check if GUI components are available Add-Type -AssemblyName System.Windows.Forms -ErrorAction Stop Write-TestResult "Windows Forms Available" $true } catch { Write-TestResult "Windows Forms Available" $false "GUI may not work" } try { # Test scheduled task functions exist $taskCmd = Get-Command New-BookmarkScheduledTask -ErrorAction Stop Write-TestResult "Scheduled Task Functions" ($null -ne $taskCmd) } catch { Write-TestResult "Scheduled Task Functions" $false $_.Exception.Message } # ===================================================================================== # Test Summary # ===================================================================================== Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "Test Summary" -ForegroundColor Cyan Write-Host "========================================" -ForegroundColor Cyan $passRate = if ($testCount -gt 0) { [math]::Round(($passCount / $testCount) * 100, 1) } else { 0 } Write-Host "Total Tests: $testCount" -ForegroundColor White Write-Host "Passed: $passCount" -ForegroundColor Green Write-Host "Failed: $failCount" -ForegroundColor $(if($failCount -gt 0){'Red'}else{'Gray'}) Write-Host "Pass Rate: $passRate%" -ForegroundColor $(if($passRate -ge 90){'Green'}elseif($passRate -ge 70){'Yellow'}else{'Red'}) if ($failCount -eq 0) { Write-Host "`n[PASS] All tests passed! Module is working correctly." -ForegroundColor Green Write-Host " You can now use the module with confidence." -ForegroundColor Cyan } elseif ($failCount -le 2) { Write-Host "`n[WARNING] Most tests passed, but some issues detected." -ForegroundColor Yellow Write-Host " Module should work, but review failures above." -ForegroundColor Yellow } else { Write-Host "`n[FAIL] Multiple test failures detected." -ForegroundColor Red Write-Host " Please review the failures and reinstall if needed." -ForegroundColor Red } # ===================================================================================== # Detailed Results (Optional) # ===================================================================================== if ($Detailed) { Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "Detailed Test Results" -ForegroundColor Cyan Write-Host "========================================`n" -ForegroundColor Cyan foreach ($result in $testResults) { $status = if ($result.Passed) { "[PASS]" } else { "[FAIL]" } $color = if ($result.Passed) { "Green" } else { "Red" } Write-Host "$status $($result.Name)" -ForegroundColor $color if ($result.Message) { Write-Host " -> $($result.Message)" -ForegroundColor Yellow } } } Write-Host "`n========================================`n" -ForegroundColor Cyan # Exit with appropriate code if ($failCount -eq 0) { exit 0 } else { exit 1 } |