3.9 KiB
3.9 KiB
Smoke Test — UDT-001 Login
Manual checklist para verificar la integración completa del flujo de login.
Pre-requisitos
- SQL Server TECNICA3 con base
SIGCM2y seed admin ejecutado (database/seeds/S001__seed_admin.sql) - Claves RSA generadas:
scripts/generate-keys.ps1ya corrido src/api/SIGCM2.Api/appsettings.Development.jsonconfigurado con connection string y rutas de claves- Node.js 18+ instalado
- .NET 10 SDK instalado
Pasos
1. Arrancar el backend
Abrir Terminal 1 en la raíz del repositorio:
dotnet run --project src/api/SIGCM2.Api
Verificar que la consola muestre algo similar a:
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.
2. Arrancar el frontend
Abrir Terminal 2:
cd src/web
npm run dev
Verificar que la consola muestre:
VITE v8.x.x ready in Xms
➜ Local: http://localhost:5173/
3. Verificar redirect a /login
- Abrir
http://localhost:5173en el navegador - Debe redirigir automáticamente a
http://localhost:5173/login - Debe mostrar el formulario de login con campos Usuario y Contraseña
Esperado: Formulario visible, sin errores en consola del navegador.
4. Login con credenciales válidas
- Ingresar
adminen el campo Usuario - Ingresar
@Diego550@en el campo Contraseña - Hacer click en Ingresar
Esperado: Botón se deshabilita brevemente mientras carga.
5. Verificar Network tab — POST /api/v1/auth/login
- Abrir DevTools → pestaña Network
- Buscar la request
POST /api/v1/auth/login - Verificar:
- Status:
200 OK - Response body contiene:
accessToken,refreshToken,expiresIn,usuario usuario.username="admin",usuario.rol="admin"
- Status:
Esperado: Respuesta 200 con JWT válido.
6. Verificar LocalStorage — auth-storage
- DevTools → pestaña Application → Storage → Local Storage →
http://localhost:5173 - Buscar clave
auth-storage - Verificar que el JSON contenga:
{ "state": { "user": { "username": "admin", "rol": "admin", ... }, "accessToken": "eyJ..." } }
Esperado: Token y datos de usuario persistidos correctamente.
7. Verificar redirect a Dashboard
- Luego del login exitoso, la URL debe cambiar a
http://localhost:5173/ - Debe mostrarse: "SIG-CM2 — Dashboard — Bienvenido al SIG-CM2."
Esperado: Placeholder de Dashboard visible.
8. Verificar firma JWT en jwt.io
- Copiar el valor de
accessTokendel LocalStorage - Abrir https://jwt.io
- Pegar el token en el campo "Encoded"
- En "VERIFY SIGNATURE" → sección "Public Key or Certificate": pegar el contenido de
src/api/SIGCM2.Api/keys/public.pem - Verificar:
- Header:
"alg": "RS256" - Payload contiene:
sub,name(="admin"),rol(="admin"),permisos(=["*"]),iss,aud,exp - Footer muestra: "Signature Verified" (fondo azul)
- Header:
Esperado: Firma RS256 válida, claims correctos.
9. Probar login fallido
- Volver a
http://localhost:5173/login(o hacer logout si hubiera botón) - Ingresar
admin/wrongpass - Hacer click en Ingresar
- Verificar en Network:
POST /api/v1/auth/login→ Status401 - Verificar en la UI: mensaje de error visible con texto "Credenciales inválidas" (sin stack trace)
Esperado: Error visible en UI, sin exposición de detalles internos.
Resultado esperado global
| Paso | Resultado |
|---|---|
| 1. Backend arranca en :5000 | ✅ / ❌ |
| 2. Frontend arranca en :5173 | ✅ / ❌ |
| 3. Redirect a /login | ✅ / ❌ |
| 4. Login con admin/@Diego550@ | ✅ / ❌ |
| 5. Network: POST 200 + JWT | ✅ / ❌ |
| 6. LocalStorage: auth-storage con token | ✅ / ❌ |
| 7. Redirect a / Dashboard | ✅ / ❌ |
| 8. JWT verificado en jwt.io (RS256) | ✅ / ❌ |
| 9. Login fallido: error en UI, 401 en Network | ✅ / ❌ |