mirror of
https://github.com/tiennm99/ccs.git
synced 2026-07-15 22:21:20 +00:00
- Copy Unix and Windows tests to native/ directories - Update Unix tests to source shared helpers - Remove Section 10 (npm tests) from native tests - Update final results to use shared helper functions
273 lines
9.2 KiB
PowerShell
273 lines
9.2 KiB
PowerShell
#!/usr/bin/env pwsh
|
|
|
|
<#
|
|
.SYNOPSIS
|
|
Test suite for CCS --install functionality (Windows PowerShell)
|
|
|
|
.DESCRIPTION
|
|
Tests the --install flag for CCS executable on Windows PowerShell.
|
|
Tests against actual system installation for simplicity.
|
|
|
|
.NOTES
|
|
Author: CCS Test Suite
|
|
Version: 1.0
|
|
Based on: edge-cases.ps1 patterns
|
|
#>
|
|
|
|
#Requires -Version 5.1
|
|
|
|
# Don't exit on errors, we're testing
|
|
$ErrorActionPreference = "Continue"
|
|
|
|
# Test statistics
|
|
$Script:TotalTests = 0
|
|
$Script:PassedTests = 0
|
|
$Script:FailedTests = 0
|
|
|
|
# Colors
|
|
$Colors = @{
|
|
Red = "Red"
|
|
Green = "Green"
|
|
Yellow = "Yellow"
|
|
Cyan = "Cyan"
|
|
White = "White"
|
|
}
|
|
|
|
function Write-ColorOutput {
|
|
param([string]$Message, [string]$Color = "White")
|
|
Write-Host $Message -ForegroundColor $Colors[$Color]
|
|
}
|
|
|
|
function Test-Case {
|
|
param(
|
|
[string]$Name,
|
|
[string]$Description,
|
|
[scriptblock]$TestCode
|
|
)
|
|
|
|
$Script:TotalTests++
|
|
Write-Host ""
|
|
Write-ColorOutput "[$Script:TotalTests] $Name" "Cyan"
|
|
Write-ColorOutput " Expected: $Description" "White"
|
|
|
|
try {
|
|
if (& $TestCode) {
|
|
Write-ColorOutput " Result: PASS" "Green"
|
|
$Script:PassedTests++
|
|
return $true
|
|
} else {
|
|
Write-ColorOutput " Result: FAIL" "Red"
|
|
$Script:FailedTests++
|
|
return $false
|
|
}
|
|
}
|
|
catch {
|
|
Write-ColorOutput " Result: FAIL" "Red"
|
|
Write-ColorOutput " Error: $($_.Exception.Message)" "Red"
|
|
$Script:FailedTests++
|
|
return $false
|
|
}
|
|
}
|
|
|
|
Write-ColorOutput "========================================" "Yellow"
|
|
Write-ColorOutput "CCS --INSTALL FUNCTIONALITY TESTING" "Yellow"
|
|
Write-ColorOutput "========================================" "Yellow"
|
|
Write-Host ""
|
|
|
|
# Get script paths
|
|
$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
|
|
$CcsRoot = Split-Path -Parent $ScriptDir
|
|
$CcsPath = Join-Path $CcsRoot "ccs.ps1"
|
|
|
|
# Backup existing .claude directory
|
|
Write-ColorOutput "Safety: Backing up existing ~/.claude/..." "Cyan"
|
|
$BackupDir = Join-Path $env:TEMP "ccs-test-backup-$(Get-Date -Format 'yyyyMMddHHmmss')"
|
|
if (Test-Path $env:USERPROFILE\.claude) {
|
|
Write-Host " Found existing ~/.claude/, creating backup at $BackupDir"
|
|
Copy-Item -Path $env:USERPROFILE\.claude -Destination $BackupDir -Recurse -Force
|
|
Write-ColorOutput " Backup created successfully" "Green"
|
|
} else {
|
|
Write-ColorOutput " No existing ~/.claude/ found" "Yellow"
|
|
}
|
|
Write-Host ""
|
|
|
|
# ============================================================================
|
|
# PRE-CHECKS
|
|
# ============================================================================
|
|
Write-ColorOutput "===== PRE-CHECKS =====" "Yellow"
|
|
|
|
Test-Case "CCS executable exists" "ccs.ps1 script found" {
|
|
Test-Path $CcsPath
|
|
}
|
|
|
|
Test-Case "Source .claude directory exists" ".claude/ in CCS repo" {
|
|
Test-Path (Join-Path $CcsRoot ".claude")
|
|
}
|
|
|
|
Test-Case "Source commands exist" "ccs.md command file exists" {
|
|
Test-Path (Join-Path $CcsRoot ".claude\commands\ccs.md")
|
|
}
|
|
|
|
Test-Case "Source skills exist" "ccs-delegation skill directory exists" {
|
|
Test-Path (Join-Path $CcsRoot ".claude\skills\ccs-delegation")
|
|
}
|
|
|
|
# ============================================================================
|
|
# SECTION 1: INSTALLATION
|
|
# ============================================================================
|
|
Write-Host ""
|
|
Write-ColorOutput "===== SECTION 1: INSTALLATION =====" "Yellow"
|
|
|
|
Test-Case "Install: Command executes without error" "Exit code 0" {
|
|
$process = Start-Process -FilePath "pwsh" -ArgumentList "-File", "`"$CcsPath`"", "--install" -Wait -PassThru -NoNewWindow
|
|
$process.ExitCode -eq 0
|
|
}
|
|
|
|
Test-Case "Install: Commands directory created" "~/.claude/commands/ exists" {
|
|
Test-Path "$env:USERPROFILE\.claude\commands"
|
|
}
|
|
|
|
Test-Case "Install: Skills directory created" "~/.claude/skills/ exists" {
|
|
Test-Path "$env:USERPROFILE\.claude\skills"
|
|
}
|
|
|
|
Test-Case "Install: ccs.md command installed" "ccs.md file exists" {
|
|
Test-Path "$env:USERPROFILE\.claude\commands\ccs.md"
|
|
}
|
|
|
|
Test-Case "Install: ccs-delegation skill installed" "ccs-delegation/ exists" {
|
|
Test-Path "$env:USERPROFILE\.claude\skills\ccs-delegation"
|
|
}
|
|
|
|
Test-Case "Install: SKILL.md exists" "SKILL.md in ccs-delegation/" {
|
|
Test-Path "$env:USERPROFILE\.claude\skills\ccs-delegation\SKILL.md"
|
|
}
|
|
|
|
Test-Case "Install: references directory exists" "references/ subdirectory present" {
|
|
Test-Path "$env:USERPROFILE\.claude\skills\ccs-delegation\references"
|
|
}
|
|
|
|
# ============================================================================
|
|
# SECTION 2: IDEMPOTENCY
|
|
# ============================================================================
|
|
Write-Host ""
|
|
Write-ColorOutput "===== SECTION 2: IDEMPOTENCY =====" "Yellow"
|
|
|
|
Test-Case "Idempotent: Second run succeeds" "Second --install doesn't error" {
|
|
$process = Start-Process -FilePath "pwsh" -ArgumentList "-File", "`"$CcsPath`"", "--install" -Wait -PassThru -NoNewWindow
|
|
$process.ExitCode -eq 0
|
|
}
|
|
|
|
# ============================================================================
|
|
# SECTION 3: FILE INTEGRITY
|
|
# ============================================================================
|
|
Write-Host ""
|
|
Write-ColorOutput "===== SECTION 3: FILE INTEGRITY =====" "Yellow"
|
|
|
|
Test-Case "Integrity: Command file not empty" "ccs.md has content" {
|
|
$content = Get-Content "$env:USERPROFILE\.claude\commands\ccs.md" -Raw
|
|
$content.Length -gt 0
|
|
}
|
|
|
|
Test-Case "Integrity: Skill file not empty" "SKILL.md has content" {
|
|
$content = Get-Content "$env:USERPROFILE\.claude\skills\ccs-delegation\SKILL.md" -Raw
|
|
$content.Length -gt 0
|
|
}
|
|
|
|
Test-Case "Integrity: Command file matches source" "ccs.md content identical" {
|
|
$source = Get-Content (Join-Path $CcsRoot ".claude\commands\ccs.md") -Raw
|
|
$target = Get-Content "$env:USERPROFILE\.claude\commands\ccs.md" -Raw
|
|
$source -eq $target
|
|
}
|
|
|
|
Test-Case "Integrity: Skill file matches source" "SKILL.md content identical" {
|
|
$source = Get-Content (Join-Path $CcsRoot ".claude\skills\ccs-delegation\SKILL.md") -Raw
|
|
$target = Get-Content "$env:USERPROFILE\.claude\skills\ccs-delegation\SKILL.md" -Raw
|
|
$source -eq $target
|
|
}
|
|
|
|
# ============================================================================
|
|
# SECTION 4: INTEGRATION
|
|
# ============================================================================
|
|
Write-Host ""
|
|
Write-ColorOutput "===== SECTION 4: INTEGRATION WITH CCS =====" "Yellow"
|
|
|
|
Test-Case "Integration: --install executes without profile error" "No profile error on --install" {
|
|
$process = Start-Process -FilePath "pwsh" -ArgumentList "-File", "`"$CcsPath`"", "--install" -Wait -PassThru -NoNewWindow
|
|
$process.ExitCode -eq 0
|
|
}
|
|
|
|
Test-Case "Integration: --version still works" "Version command exits successfully" {
|
|
$process = Start-Process -FilePath "pwsh" -ArgumentList "-File", "`"$CcsPath`"", "--version" -Wait -PassThru -NoNewWindow
|
|
$process.ExitCode -eq 0
|
|
}
|
|
|
|
Test-Case "Integration: --help still works" "Help command exits successfully" {
|
|
$process = Start-Process -FilePath "pwsh" -ArgumentList "-File", "`"$CcsPath`"", "--help" -Wait -PassThru -NoNewWindow
|
|
$process.ExitCode -eq 0
|
|
}
|
|
|
|
# ============================================================================
|
|
# FINAL RESULTS
|
|
# ============================================================================
|
|
Write-Host ""
|
|
Write-ColorOutput "========================================" "Yellow"
|
|
Write-ColorOutput "TEST RESULTS SUMMARY" "Yellow"
|
|
Write-ColorOutput "========================================" "Yellow"
|
|
Write-Host ""
|
|
|
|
Write-ColorOutput "Total Tests: $Script:TotalTests" "Cyan"
|
|
Write-ColorOutput "Passed: $Script:PassedTests" "Green"
|
|
if ($Script:FailedTests -eq 0) {
|
|
Write-ColorOutput "Failed: $Script:FailedTests" "Green"
|
|
} else {
|
|
Write-ColorOutput "Failed: $Script:FailedTests" "Red"
|
|
}
|
|
Write-Host ""
|
|
|
|
$SuccessRate = if ($Script:TotalTests -gt 0) {
|
|
[math]::Round(($Script:PassedTests / $Script:TotalTests) * 100, 2)
|
|
} else { 0 }
|
|
|
|
if ($SuccessRate -ge 90) {
|
|
Write-ColorOutput "Success Rate: $SuccessRate%" "Green"
|
|
} elseif ($SuccessRate -ge 70) {
|
|
Write-ColorOutput "Success Rate: $SuccessRate%" "Yellow"
|
|
} else {
|
|
Write-ColorOutput "Success Rate: $SuccessRate%" "Red"
|
|
}
|
|
|
|
Write-Host ""
|
|
|
|
if ($Script:FailedTests -eq 0) {
|
|
Write-ColorOutput "========================================" "Green"
|
|
Write-ColorOutput "ALL TESTS PASSED!" "Green"
|
|
Write-ColorOutput "========================================" "Green"
|
|
Write-ColorOutput "--install functionality is production ready!" "Green"
|
|
} else {
|
|
Write-ColorOutput "========================================" "Red"
|
|
Write-ColorOutput "SOME TESTS FAILED" "Red"
|
|
Write-ColorOutput "========================================" "Red"
|
|
Write-ColorOutput "Review failed tests above for details" "Red"
|
|
}
|
|
|
|
# Restore backup
|
|
Write-Host ""
|
|
Write-ColorOutput "Cleaning up and restoring..." "Yellow"
|
|
if (Test-Path $env:USERPROFILE\.claude) {
|
|
Write-Host " Removing test data from $env:USERPROFILE\.claude"
|
|
Remove-Item -Path $env:USERPROFILE\.claude -Recurse -Force
|
|
}
|
|
|
|
if (Test-Path $BackupDir) {
|
|
Write-Host " Restoring backup from $BackupDir"
|
|
Move-Item -Path $BackupDir -Destination $env:USERPROFILE\.claude
|
|
Write-ColorOutput " Backup restored successfully" "Green"
|
|
}
|
|
|
|
# Exit with appropriate code
|
|
if ($Script:FailedTests -gt 0) {
|
|
exit 1
|
|
} else {
|
|
exit 0
|
|
} |