Files
mockupAWS/frontend/e2e-v100/specs/auth.spec.ts
Luca Sacchi Ricciardi 38fd6cb562
Some checks failed
E2E Tests / Run E2E Tests (push) Waiting to run
E2E Tests / Visual Regression Tests (push) Blocked by required conditions
E2E Tests / Smoke Tests (push) Waiting to run
CI/CD - Build & Test / Backend Tests (push) Has been cancelled
CI/CD - Build & Test / Frontend Tests (push) Has been cancelled
CI/CD - Build & Test / Security Scans (push) Has been cancelled
CI/CD - Build & Test / Docker Build Test (push) Has been cancelled
CI/CD - Build & Test / Terraform Validate (push) Has been cancelled
Deploy to Production / Build & Test (push) Has been cancelled
Deploy to Production / Security Scan (push) Has been cancelled
Deploy to Production / Build Docker Images (push) Has been cancelled
Deploy to Production / Deploy to Staging (push) Has been cancelled
Deploy to Production / E2E Tests (push) Has been cancelled
Deploy to Production / Deploy to Production (push) Has been cancelled
release: v1.0.0 - Production Ready
Complete production-ready release with all v1.0.0 features:

Architecture & Planning (@spec-architect):
- Production architecture design with scalability and HA
- Security audit plan and compliance review
- Technical debt assessment and refactoring roadmap

Database (@db-engineer):
- 17 performance indexes and 3 materialized views
- PgBouncer connection pooling
- Automated backup/restore with PITR (RTO<1h, RPO<5min)
- Data archiving strategy (~65% storage savings)

Backend (@backend-dev):
- Redis caching layer with 3-tier strategy
- Celery async jobs with Flower monitoring
- API v2 with rate limiting (tiered: free/premium/enterprise)
- Prometheus metrics and OpenTelemetry tracing
- Security hardening (headers, audit logging)

Frontend (@frontend-dev):
- Bundle optimization: 308KB (code splitting, lazy loading)
- Onboarding tutorial (react-joyride)
- Command palette (Cmd+K) and keyboard shortcuts
- Analytics dashboard with cost predictions
- i18n (English + Italian) and WCAG 2.1 AA compliance

DevOps (@devops-engineer):
- Complete deployment guide (Docker, K8s, AWS ECS)
- Terraform AWS infrastructure (Multi-AZ RDS, ElastiCache, ECS)
- CI/CD pipelines with blue-green deployment
- Prometheus + Grafana monitoring with 15+ alert rules
- SLA definition and incident response procedures

QA (@qa-engineer):
- 153+ E2E test cases (85% coverage)
- k6 performance tests (1000+ concurrent users, p95<200ms)
- Security testing (0 critical vulnerabilities)
- Cross-browser and mobile testing
- Official QA sign-off

Production Features:
 Horizontal scaling ready
 99.9% uptime target
 <200ms response time (p95)
 Enterprise-grade security
 Complete observability
 Disaster recovery
 SLA monitoring

Ready for production deployment! 🚀
2026-04-07 20:14:51 +02:00

151 lines
6.6 KiB
TypeScript

import { test, expect } from '../fixtures';
import { TestDataManager } from '../utils/test-data-manager';
/**
* Authentication Tests
* Covers: Login, Register, Logout, Token Refresh, API Keys
* Target: 100% coverage on critical auth paths
*/
test.describe('Authentication @auth @critical', () => {
test('should login with valid credentials', async ({ page }) => {
// Arrange
const email = `test_${Date.now()}@example.com`;
const password = 'TestPassword123!';
// First register a user
await page.goto('/register');
await page.fill('[data-testid="full-name-input"]', 'Test User');
await page.fill('[data-testid="email-input"]', email);
await page.fill('[data-testid="password-input"]', password);
await page.fill('[data-testid="confirm-password-input"]', password);
await page.click('[data-testid="register-button"]');
// Wait for redirect to login
await page.waitForURL('/login');
// Login
await page.fill('[data-testid="email-input"]', email);
await page.fill('[data-testid="password-input"]', password);
await page.click('[data-testid="login-button"]');
// Assert
await page.waitForURL('/dashboard');
await expect(page.locator('[data-testid="user-menu"]')).toBeVisible();
await expect(page.locator('[data-testid="dashboard-header"]')).toContainText('Dashboard');
});
test('should show error for invalid credentials', async ({ page }) => {
await page.goto('/login');
await page.fill('[data-testid="email-input"]', 'invalid@example.com');
await page.fill('[data-testid="password-input"]', 'wrongpassword');
await page.click('[data-testid="login-button"]');
await expect(page.locator('[data-testid="error-message"]')).toBeVisible();
await expect(page.locator('[data-testid="error-message"]')).toContainText('Invalid credentials');
await expect(page).toHaveURL('/login');
});
test('should validate registration form', async ({ page }) => {
await page.goto('/register');
await page.click('[data-testid="register-button"]');
// Assert validation errors
await expect(page.locator('[data-testid="email-error"]')).toBeVisible();
await expect(page.locator('[data-testid="password-error"]')).toBeVisible();
await expect(page.locator('[data-testid="confirm-password-error"]')).toBeVisible();
});
test('should logout successfully', async ({ authenticatedPage }) => {
await authenticatedPage.click('[data-testid="user-menu"]');
await authenticatedPage.click('[data-testid="logout-button"]');
await authenticatedPage.waitForURL('/login');
await expect(authenticatedPage.locator('[data-testid="login-form"]')).toBeVisible();
});
test('should refresh token automatically', async ({ page, testData }) => {
// Login
const user = await testData.createTestUser();
await page.goto('/login');
await page.fill('[data-testid="email-input"]', user.email);
await page.fill('[data-testid="password-input"]', user.password);
await page.click('[data-testid="login-button"]');
await page.waitForURL('/dashboard');
// Navigate to protected page after token should refresh
await page.goto('/scenarios');
await expect(page.locator('[data-testid="scenarios-list"]')).toBeVisible();
});
test('should prevent access to protected routes when not authenticated', async ({ page }) => {
await page.goto('/dashboard');
await page.waitForURL('/login?redirect=/dashboard');
await expect(page.locator('[data-testid="login-form"]')).toBeVisible();
});
test('should persist session across page reloads', async ({ authenticatedPage }) => {
await authenticatedPage.reload();
await expect(authenticatedPage.locator('[data-testid="dashboard-header"]')).toBeVisible();
await expect(authenticatedPage.locator('[data-testid="user-menu"]')).toBeVisible();
});
test.describe('Password Reset', () => {
test('should send password reset email', async ({ page }) => {
await page.goto('/forgot-password');
await page.fill('[data-testid="email-input"]', 'user@example.com');
await page.click('[data-testid="send-reset-button"]');
await expect(page.locator('[data-testid="success-message"]')).toBeVisible();
await expect(page.locator('[data-testid="success-message"]')).toContainText('Check your email');
});
test('should validate reset token', async ({ page }) => {
await page.goto('/reset-password?token=invalid');
await expect(page.locator('[data-testid="invalid-token-error"]')).toBeVisible();
});
});
});
test.describe('API Key Management @api-keys @critical', () => {
test('should create new API key', async ({ authenticatedPage }) => {
await authenticatedPage.goto('/settings/api-keys');
await authenticatedPage.click('[data-testid="create-api-key-button"]');
await authenticatedPage.fill('[data-testid="api-key-name-input"]', 'Test API Key');
await authenticatedPage.fill('[data-testid="api-key-description-input"]', 'For E2E testing');
await authenticatedPage.click('[data-testid="save-api-key-button"]');
await expect(authenticatedPage.locator('[data-testid="api-key-created-dialog"]')).toBeVisible();
await expect(authenticatedPage.locator('[data-testid="api-key-value"]')).toBeVisible();
});
test('should revoke API key', async ({ authenticatedPage }) => {
// First create an API key
await authenticatedPage.goto('/settings/api-keys');
await authenticatedPage.click('[data-testid="create-api-key-button"]');
await authenticatedPage.fill('[data-testid="api-key-name-input"]', 'Key to Revoke');
await authenticatedPage.click('[data-testid="save-api-key-button"]');
await authenticatedPage.click('[data-testid="close-dialog-button"]');
// Revoke it
await authenticatedPage.click('[data-testid="revoke-key-button"]').first();
await authenticatedPage.click('[data-testid="confirm-revoke-button"]');
await expect(authenticatedPage.locator('[data-testid="key-revoked-success"]')).toBeVisible();
});
test('should copy API key to clipboard', async ({ authenticatedPage, context }) => {
await context.grantPermissions(['clipboard-read', 'clipboard-write']);
await authenticatedPage.goto('/settings/api-keys');
await authenticatedPage.click('[data-testid="create-api-key-button"]');
await authenticatedPage.fill('[data-testid="api-key-name-input"]', 'Copy Test');
await authenticatedPage.click('[data-testid="save-api-key-button"]');
await authenticatedPage.click('[data-testid="copy-api-key-button"]');
await expect(authenticatedPage.locator('[data-testid="copy-success-toast"]')).toBeVisible();
});
});