diff --git a/tests/wizard.spec.ts b/tests/wizard.spec.ts new file mode 100644 index 0000000..2e455b2 --- /dev/null +++ b/tests/wizard.spec.ts @@ -0,0 +1,45 @@ +import { test, expect } from '@playwright/test'; + +const WIZARD_URL = process.env.WIZARD_URL || 'http://127.0.0.1:18080'; +const BACKEND_URL = process.env.BACKEND_URL || 'http://127.0.0.1:8000'; + +test.describe('Setup Wizard', () => { + test('complete wizard flow', async ({ page }) => { + // Go to frontend which should redirect to wizard + await page.goto('/'); + + // Step 0: Welcome - Click "Connect to Wizard" + await expect(page.locator('h1')).toContainText('HarborForge Setup Wizard'); + await page.click('button:has-text("Connect to Wizard")'); + + // Wait for wizard health check - should proceed to step 1 + await page.waitForTimeout(1000); + + // Step 1: Database - Click Next with defaults + if (await page.locator('h2:has-text("Database configuration")').isVisible()) { + await page.click('button:has-text("Next")'); + } + + // Step 2: Admin - Fill in admin credentials + await page.fill('input[placeholder="Set admin password"]', 'admin123'); + await page.fill('input[type="email"]', 'admin@test.com'); + await page.fill('input[value="Admin"]', 'Test Admin'); + await page.click('button:has-text("Next")'); + + // Step 3: Project - Configure backend and project + await page.fill('input[placeholder="http://127.0.0.1:8000"]', BACKEND_URL); + await page.fill('input[value="Default"]', 'Test Project'); + await page.fill('input[value="Default project"]', 'Test Project Description'); + await page.click('button:has-text("Finish setup")'); + + // Step 4: Complete + await expect(page.locator('h2')).toContainText('Setup complete!'); + await expect(page.locator('code')).toContainText('docker compose restart'); + }); + + test('wizard health check', async ({ request }) => { + const response = await request.get(`${WIZARD_URL}/health`); + // Wizard might return 200 or 404 if not initialized + expect([200, 404]).toContain(response.status()); + }); +});