|
| 1 | +# Reporte de QA - Tenant & User CRUD (BMAD) |
| 2 | + |
| 3 | +## 1. Resumen Ejecutivo |
| 4 | +Se han ejecutado pruebas automatizadas (vía scripting local y consultas directas a los endpoints de la API) para certificar las operaciones **CRUD** correspondientes a la gestión de **Tenants** y **Usuarios** en la arquitectura de UMS. |
| 5 | + |
| 6 | +**Resultado Global**: **APROBADO** ✅ (Los endpoints base funcionan y el estado es consistente. Se detectaron algunas validaciones estrictas del modelo de dominio que cumplen perfectamente con las reglas de negocio). |
| 7 | + |
| 8 | +--- |
| 9 | + |
| 10 | +## 2. Escenarios Ejecutados y Evidencias Físicas |
| 11 | + |
| 12 | +Todas las evidencias con los respectivos *Payloads* de entrada y salida, así como los *Status Codes*, se han generado físicamente dentro de la carpeta `docs/qa/evidences/` del repositorio, vinculados a sus Historias de Usuario correspondientes. |
| 13 | + |
| 14 | +### Tenants (`docs/qa/evidences/tenants/`) |
| 15 | +- [US-001: Create Tenant (Success)](file:///d:/Users/aarroyo/personal/sources/ums/docs/qa/evidences/tenants/US-001-Create-Tenant-Success.md) - **[PASÓ]** (Status 201) |
| 16 | +- [US-002: Suspend Tenant](file:///d:/Users/aarroyo/personal/sources/ums/docs/qa/evidences/tenants/US-002-Suspend-Tenant.md) - **[PASÓ]** (Status 204) |
| 17 | +- [US-003: Activate Tenant](file:///d:/Users/aarroyo/personal/sources/ums/docs/qa/evidences/tenants/US-003-Activate-Tenant.md) - **[PASÓ]** (Status 204) |
| 18 | +- [US-004: Get Tenants via GraphQL](file:///d:/Users/aarroyo/personal/sources/ums/docs/qa/evidences/tenants/US-004-Get-Tenants.md) - **[PASÓ]** (Aislamiento y consistencia de lectura) |
| 19 | + |
| 20 | +### User Accounts (`docs/qa/evidences/users/`) |
| 21 | +- [US-005: Create User](file:///d:/Users/aarroyo/personal/sources/ums/docs/qa/evidences/users/US-005-Create-User.md) - **[PASÓ]** (Status 201) |
| 22 | +- [US-006: Activate User](file:///d:/Users/aarroyo/personal/sources/ums/docs/qa/evidences/users/US-006-Activate-User.md) - **[PASÓ]** (Status 204) |
| 23 | +- [US-007: Block User](file:///d:/Users/aarroyo/personal/sources/ums/docs/qa/evidences/users/US-007-Block-User.md) - **[PASÓ]** (Status 204) |
| 24 | +- [US-008: Delete User (Soft Delete / Anonymize)](file:///d:/Users/aarroyo/personal/sources/ums/docs/qa/evidences/users/US-008-Delete-User.md) - **[PASÓ]** (Status 204) |
| 25 | + |
| 26 | +--- |
| 27 | + |
| 28 | +## 3. Aislamiento y Seguridad (Tenant Context Isolation) |
| 29 | +Se verificó que los endpoints transaccionales (Comandos) requieren estrictamente el header `X-User-Id` (para el `DevAuthMiddleware`), de lo contrario rechazan la solicitud. Adicionalmente, la base de datos restringe operaciones fuera de los límites de un Tenant, garantizando la arquitectura Multi-Tenant. |
| 30 | + |
| 31 | +--- |
| 32 | + |
| 33 | +## 4. Bugs Encontrados / Hallazgos de Dominio |
| 34 | +1. **Validación de Categoría de Usuario**: Al intentar inyectar usuarios con `category: "Employee"` o `identityReferenceType: "EmployeeId"`, la API rechaza la petición con HTTP `422 Unprocessable Entity` y el mensaje `"User category is not supported"`. |
| 35 | + - *Conclusión*: Esto **NO** es un bug. Es la aplicación correcta de las reglas del dominio (`UserCategory.cs` y `IdentityReferenceType.cs`) que solo aceptan `Internal`, `External`, `B2B`, etc., y tipos `HrId`, `VendorCode`, etc. |
| 36 | +2. **GraphQL Pagination**: La query de Tenants retorna el nodo `items` correctamente serializado de acuerdo a la interfaz de React (como lo consume `tenantService.getTenants`). |
| 37 | + |
| 38 | +--- |
| 39 | + |
| 40 | +## 5. Regression Checklist |
| 41 | +Para futuros despliegues o actualizaciones de dependencias, se debe validar: |
| 42 | +- [ ] Creación de Tenant con RUC repetido falla con 409 Conflict. |
| 43 | +- [ ] Listado de Branches solo devuelve los de su respectivo `tenantId`. |
| 44 | +- [ ] Desactivar usuario (`BlockUserAccountCommand`) invalida tokens (a nivel Middleware). |
| 45 | +- [ ] El Hard-Delete está prohibido; `DeleteUserAccount` anonimiza según GDPR. |
0 commit comments