Files
ColaFlow/scripts/test-db-init.ps1
Yaojia Wang 54476eb43e feat(backend): Add database initialization and seed data scripts (Phase 3)
Implemented complete database initialization and seed data system for Docker development environment.

Changes:
- Enhanced init-db.sql with PostgreSQL extensions (uuid-ossp, pg_trgm, btree_gin)
- Created seed-data.sql with demo tenant, users, project, epics, stories, and tasks
- Updated docker-compose.yml to mount both initialization scripts
- Added DEMO-ACCOUNTS.md documentation with credentials and testing guide
- Added test-db-init.ps1 PowerShell script for testing initialization

Features:
- Automatic demo data creation on first startup
- 2 demo users (Owner and Developer with Demo@123456 password)
- 1 demo project with realistic Epic/Story/Task hierarchy
- Idempotent seed data (checks if data exists before inserting)
- Multi-tenant structure with proper TenantId isolation
- Detailed logging and error handling

Demo Accounts:
- owner@demo.com / Demo@123456 (Owner role)
- developer@demo.com / Demo@123456 (Member role)

Demo Project Data:
- Tenant: Demo Company
- Project: DEMO - Demo Project
- Epic: User Authentication System
- 2 Stories (Login Page, Registration Feature)
- 7 Tasks (various statuses: Done, InProgress, Todo)

Testing:
- Run: .\scripts\test-db-init.ps1
- Or: docker-compose down -v && docker-compose up -d

Documentation: See scripts/DEMO-ACCOUNTS.md for full details

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-04 23:41:53 +01:00

142 lines
5.7 KiB
PowerShell

# Test Database Initialization Script
# This script tests the database initialization and seed data
# Usage: .\scripts\test-db-init.ps1
Write-Host "========================================" -ForegroundColor Cyan
Write-Host "Testing ColaFlow Database Initialization" -ForegroundColor Cyan
Write-Host "========================================" -ForegroundColor Cyan
Write-Host ""
# Check if Docker is running
Write-Host "Checking Docker..." -ForegroundColor Yellow
try {
docker info | Out-Null
Write-Host " Docker is running" -ForegroundColor Green
} catch {
Write-Host " ERROR: Docker is not running" -ForegroundColor Red
exit 1
}
Write-Host ""
Write-Host "This test will:" -ForegroundColor White
Write-Host " 1. Stop and remove existing containers" -ForegroundColor Gray
Write-Host " 2. Delete database volumes (fresh start)" -ForegroundColor Gray
Write-Host " 3. Start PostgreSQL container" -ForegroundColor Gray
Write-Host " 4. Wait for initialization scripts to run" -ForegroundColor Gray
Write-Host " 5. Verify database extensions" -ForegroundColor Gray
Write-Host " 6. Verify seed data was created" -ForegroundColor Gray
Write-Host ""
$confirm = Read-Host "Continue? (yes/no)"
if ($confirm -ne "yes") {
Write-Host "Test cancelled" -ForegroundColor Yellow
exit 0
}
Write-Host ""
Write-Host "Step 1: Cleaning up existing containers..." -ForegroundColor Yellow
docker-compose down -v | Out-Null
Write-Host " Containers stopped and volumes removed" -ForegroundColor Green
Write-Host ""
Write-Host "Step 2: Starting PostgreSQL container..." -ForegroundColor Yellow
docker-compose up -d postgres
Write-Host ""
Write-Host "Step 3: Waiting for PostgreSQL to be ready..." -ForegroundColor Yellow
$maxWait = 60
$elapsed = 0
$interval = 2
while ($elapsed -lt $maxWait) {
$health = docker inspect --format='{{.State.Health.Status}}' colaflow-postgres 2>$null
if ($health -eq "healthy") {
Write-Host " PostgreSQL is ready!" -ForegroundColor Green
break
}
Start-Sleep -Seconds $interval
$elapsed += $interval
Write-Host " Waiting... ($elapsed/$maxWait seconds)" -ForegroundColor Gray
}
if ($elapsed -ge $maxWait) {
Write-Host " ERROR: PostgreSQL did not become healthy in time" -ForegroundColor Red
docker-compose logs postgres
exit 1
}
Write-Host ""
Write-Host "Step 4: Checking initialization logs..." -ForegroundColor Yellow
docker-compose logs postgres | Select-String -Pattern "ColaFlow"
Write-Host ""
Write-Host "Step 5: Verifying database extensions..." -ForegroundColor Yellow
$extensions = docker exec colaflow-postgres psql -U colaflow -d colaflow -t -c "\dx" 2>$null
if ($extensions -match "uuid-ossp") {
Write-Host " uuid-ossp extension: INSTALLED" -ForegroundColor Green
} else {
Write-Host " uuid-ossp extension: MISSING" -ForegroundColor Red
}
if ($extensions -match "pg_trgm") {
Write-Host " pg_trgm extension: INSTALLED" -ForegroundColor Green
} else {
Write-Host " pg_trgm extension: MISSING" -ForegroundColor Red
}
if ($extensions -match "btree_gin") {
Write-Host " btree_gin extension: INSTALLED" -ForegroundColor Green
} else {
Write-Host " btree_gin extension: MISSING" -ForegroundColor Red
}
Write-Host ""
Write-Host "Step 6: Checking if schemas exist (need migrations)..." -ForegroundColor Yellow
$schemas = docker exec colaflow-postgres psql -U colaflow -d colaflow -t -c "SELECT schema_name FROM information_schema.schemata WHERE schema_name IN ('identity', 'project_management');" 2>$null
if ($schemas -match "identity") {
Write-Host " identity schema: EXISTS" -ForegroundColor Green
Write-Host ""
Write-Host "Step 7: Verifying seed data in identity schema..." -ForegroundColor Yellow
$tenantCount = docker exec colaflow-postgres psql -U colaflow -d colaflow -t -c "SELECT COUNT(*) FROM identity.tenants;" 2>$null
if ($tenantCount -and $tenantCount -gt 0) {
Write-Host " Tenants: $tenantCount records" -ForegroundColor Green
} else {
Write-Host " Tenants: NO DATA (seed script may not have run)" -ForegroundColor Yellow
}
$userCount = docker exec colaflow-postgres psql -U colaflow -d colaflow -t -c "SELECT COUNT(*) FROM identity.users;" 2>$null
if ($userCount -and $userCount -gt 0) {
Write-Host " Users: $userCount records" -ForegroundColor Green
} else {
Write-Host " Users: NO DATA (seed script may not have run)" -ForegroundColor Yellow
}
} else {
Write-Host " identity schema: DOES NOT EXIST" -ForegroundColor Yellow
Write-Host " NOTE: Run EF Core migrations to create schema" -ForegroundColor Gray
Write-Host " Command: docker-compose exec backend dotnet ef database update" -ForegroundColor Gray
}
Write-Host ""
Write-Host "========================================" -ForegroundColor Cyan
Write-Host "Test Summary" -ForegroundColor Cyan
Write-Host "========================================" -ForegroundColor Cyan
Write-Host ""
Write-Host "Extensions Installation:" -ForegroundColor White
Write-Host " Script files are mounted correctly if PostgreSQL started" -ForegroundColor Green
Write-Host ""
Write-Host "Seed Data:" -ForegroundColor White
Write-Host " Seed data will be created AFTER EF Core migrations" -ForegroundColor Yellow
Write-Host " To complete setup:" -ForegroundColor White
Write-Host " 1. Start backend: docker-compose up -d backend" -ForegroundColor Gray
Write-Host " 2. Apply migrations: docker-compose exec backend dotnet ef database update" -ForegroundColor Gray
Write-Host " 3. Re-check seed data: docker-compose logs postgres | Select-String 'Seed Data'" -ForegroundColor Gray
Write-Host ""
Write-Host "Demo Accounts:" -ForegroundColor White
Write-Host " See scripts/DEMO-ACCOUNTS.md for credentials" -ForegroundColor Cyan
Write-Host ""