feat(api): UDT-004 controller de roles + refactor validator UDT-003 a lookup dinamico
- RolesController /api/v1/roles CRUD admin-only: GET list, GET {codigo}, POST, PUT, DELETE (soft-delete con guard 409)
- ExceptionFilter: mapea RolNotFound (404), RolAlreadyExists (409), RolInUse (409)
- DI: registra 5 handlers de Roles (Application) y IRolRepository/RolRepository (Infrastructure)
- CreateUsuarioCommandValidator: reemplaza whitelist hardcoded por IRolRepository.ExistsActiveByCodigoAsync via MustAsync; constructor recibe (AuthOptions, IRolRepository)
- Tests: 202 verdes (173 application + 29 api). Nuevas: RolesEndpointTests (13 integration), CreateUsuarioCommandValidatorTests reescrito con NSubstitute mock, CreateUsuario_WithInactiveRol_Returns400 en Api.Tests
- Fix: ApiIntegration pasa de IClassFixture (N factories) a ICollectionFixture (1 factory shared) — evitaba ObjectDisposedException sobre RSABCrypt al compartir coleccion con multiples test classes
- tests/tests.runsettings: MaxCpuCount=1 para evitar race entre assemblies sobre SIGCM2_Test
This commit is contained in:
16
tests/tests.runsettings
Normal file
16
tests/tests.runsettings
Normal file
@@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RunSettings>
|
||||
<!--
|
||||
Fuerza ejecución secuencial de las diferentes test assemblies.
|
||||
Justificación: Application.Tests (integration) y Api.Tests (WebApplicationFactory)
|
||||
comparten la BD SIGCM2_Test. Ejecutarlas en paralelo produce race conditions
|
||||
sobre Respawn.Reset + SeedRolCanonical + SeedAdmin.
|
||||
|
||||
Cuando se corre proyecto a proyecto (`dotnet test <csproj>`) no hay paralelismo
|
||||
cross-assembly y no se necesita este settings. Este archivo es para el caso
|
||||
`dotnet test` en la raíz del repo.
|
||||
-->
|
||||
<RunConfiguration>
|
||||
<MaxCpuCount>1</MaxCpuCount>
|
||||
</RunConfiguration>
|
||||
</RunSettings>
|
||||
Reference in New Issue
Block a user