AgentSkillsCN

E2e Scenario Architect

E2E 场景架构师

SKILL.md

E2E Scenario Architect

Generador de pruebas end-to-end con Playwright para simular flujos completos de usuario en la aplicación EMB.

Comandos

generate <scenario>

Genera una prueba E2E para el escenario especificado.

code
generar e2e para flujo de login
generar e2e para aprobación de vacaciones
generar e2e para registro de asistencia
generar e2e para solicitud de compensatorio

run

Ejecuta todas las pruebas E2E.

bash
pnpm run test:e2e

run:ui

Ejecuta pruebas con interfaz visual de Playwright.

bash
pnpm run test:e2e:ui

run:debug

Ejecuta pruebas en modo debug con inspector.

bash
npx playwright test --debug

Escenarios disponibles

Autenticación

  • Login exitoso con credenciales válidas
  • Login fallido con credenciales inválidas
  • Logout y redirección a /login
  • Protected routes redirigen a login

Vacaciones

  • Solicitud de vacaciones por usuario
  • Aprobación de vacaciones por admin
  • Rechazo de vacaciones por admin
  • Validación de fechas

Compensatorios

  • Registro de horas trabajadas
  • Solicitud de tiempo libre
  • Aprobación de solicitud por admin
  • Validación de horas disponibles

Asistencia

  • Registro de entrada/salida
  • Modificación de registro por admin
  • Vista de calendario de asistencias

Estructura de archivos

code
e2e/
├── fixtures/
│   ├── admin-auth.ts    # Credenciales de admin
│   └── user-auth.ts     # Credenciales de usuario regular
├── scenarios/
│   ├── auth.spec.ts
│   ├── vacations.spec.ts
│   ├── compensatory.spec.ts
│   └── attendance.spec.ts
└── playwright.config.ts

Configuración Playwright

typescript
import { defineConfig, devices } from '@playwright/test'

export default defineConfig({
  testDir: './e2e/scenarios',
  fullyParallel: true,
  forbidOnly: !!process.env.CI,
  retries: process.env.CI ? 2 : 0,
  workers: process.env.CI ? 1 : undefined,
  reporter: 'html',
  use: {
    baseURL: 'http://localhost:3000',
    trace: 'on-first-retry',
    screenshot: 'only-on-failure',
  },
  projects: [
    { name: 'chromium', use: { ...devices['Desktop Chrome'] } },
    { name: 'firefox', use: { ...devices['Desktop Firefox'] } },
  ],
  webServer: {
    command: 'npm run dev',
    url: 'http://localhost:3000',
    reuseExistingServer: !process.env.CI,
  },
})