#!/usr/bin/env pwsh <# .SYNOPSIS Verifies the Module 04 challenge solution. .DESCRIPTION This script checks that: - The challenge directory exists - A Git repository exists - Currently on main branch - feature-api has been merged into main - feature-ui branch exists and has been merged - A merge commit exists (from three-way merge) #> Write-Host "`n=== Verifying Module 04 Solution ===" -ForegroundColor Cyan $allChecksPassed = $true # Check if challenge directory exists if (-not (Test-Path "challenge")) { Write-Host "[FAIL] Challenge directory not found. Did you run setup.ps1?" -ForegroundColor Red exit 1 } Set-Location "challenge" # Check if git repository exists if (-not (Test-Path ".git")) { Write-Host "[FAIL] Not a git repository. Did you run setup.ps1?" -ForegroundColor Red Set-Location .. exit 1 } # Check current branch is main $currentBranch = git branch --show-current 2>$null if ($currentBranch -eq "main") { Write-Host "[PASS] Currently on main branch" -ForegroundColor Green } else { Write-Host "[FAIL] Not on main branch (currently on: $currentBranch)" -ForegroundColor Red Write-Host "[HINT] Switch to main with: git checkout main" -ForegroundColor Yellow $allChecksPassed = $false } # Check if feature-api branch exists $featureApiBranch = git branch --list "feature-api" 2>$null if ($featureApiBranch) { Write-Host "[PASS] Branch 'feature-api' exists" -ForegroundColor Green } else { Write-Host "[INFO] Branch 'feature-api' not found (may have been deleted after merge)" -ForegroundColor Cyan } # Check if commits from feature-api are in main $apiRoutesCommit = git log --all --grep="Add API routes" --oneline 2>$null $healthCheckCommit = git log --all --grep="Add health check route" --oneline 2>$null if ($apiRoutesCommit -and $healthCheckCommit) { # Check if these commits are in main's history $apiRoutesInMain = git log --grep="Add API routes" --oneline 2>$null $healthCheckInMain = git log --grep="Add health check route" --oneline 2>$null if ($apiRoutesInMain -and $healthCheckInMain) { Write-Host "[PASS] Commits from feature-api are merged into main" -ForegroundColor Green } else { Write-Host "[FAIL] Commits from feature-api not found in main" -ForegroundColor Red Write-Host "[HINT] Merge feature-api with: git merge feature-api" -ForegroundColor Yellow $allChecksPassed = $false } } else { Write-Host "[FAIL] Expected commits from feature-api not found" -ForegroundColor Red Write-Host "[HINT] Did you run setup.ps1?" -ForegroundColor Yellow $allChecksPassed = $false } # Check if api-routes.py exists (should be on main after merge) if (Test-Path "api-routes.py") { Write-Host "[PASS] File 'api-routes.py' exists on main (from feature-api merge)" -ForegroundColor Green } else { Write-Host "[FAIL] File 'api-routes.py' not found on main" -ForegroundColor Red Write-Host "[HINT] This file should appear after merging feature-api" -ForegroundColor Yellow $allChecksPassed = $false } # Check if feature-ui branch exists $featureUiBranch = git branch --list "feature-ui" 2>$null if ($featureUiBranch) { Write-Host "[PASS] Branch 'feature-ui' exists" -ForegroundColor Green # Check if feature-ui has commits $uiCommitCount = git rev-list main..feature-ui --count 2>$null if ($uiCommitCount -gt 0) { Write-Host "[INFO] Branch 'feature-ui' has $uiCommitCount commit(s)" -ForegroundColor Cyan } } else { Write-Host "[FAIL] Branch 'feature-ui' not found" -ForegroundColor Red Write-Host "[HINT] Create feature-ui with: git checkout -b feature-ui" -ForegroundColor Yellow $allChecksPassed = $false } # Check for merge commits (indicates three-way merge happened) $mergeCommits = git log --merges --oneline 2>$null if ($mergeCommits) { Write-Host "[PASS] Merge commit(s) found (three-way merge completed)" -ForegroundColor Green } else { Write-Host "[FAIL] No merge commits found" -ForegroundColor Red Write-Host "[HINT] Create divergence: make commits on both main and feature-ui, then merge" -ForegroundColor Yellow $allChecksPassed = $false } # Check if ui.py exists (should be on main after merge) if (Test-Path "ui.py") { Write-Host "[PASS] File 'ui.py' exists on main (from feature-ui merge)" -ForegroundColor Green } else { Write-Host "[FAIL] File 'ui.py' not found on main" -ForegroundColor Red Write-Host "[HINT] Create ui.py on feature-ui branch and merge it into main" -ForegroundColor Yellow $allChecksPassed = $false } Set-Location .. # Final summary if ($allChecksPassed) { Write-Host "`n" -NoNewline Write-Host "=====================================" -ForegroundColor Green Write-Host " CONGRATULATIONS! CHALLENGE PASSED!" -ForegroundColor Green Write-Host "=====================================" -ForegroundColor Green Write-Host "`nYou've successfully learned about Git merging!" -ForegroundColor Cyan Write-Host "You now understand:" -ForegroundColor Cyan Write-Host " - Fast-forward merges (when main hasn't changed)" -ForegroundColor White Write-Host " - Three-way merges (when branches have diverged)" -ForegroundColor White Write-Host " - How to use git merge to combine branches" -ForegroundColor White Write-Host " - Merge commits and how to view them" -ForegroundColor White Write-Host "`nReady for the next module!" -ForegroundColor Green Write-Host "" } else { Write-Host "`n[SUMMARY] Some checks failed. Review the hints above and try again." -ForegroundColor Red Write-Host "[INFO] You can run this verification script as many times as needed." -ForegroundColor Yellow Write-Host "" exit 1 }