feat(domain): V008 migration + Usuario with-methods + DomainException hierarchy [UDT-008]
This commit is contained in:
@@ -26,6 +26,9 @@ public sealed class SqlTestFixture : IAsyncLifetime
|
||||
_connection = new SqlConnection(_connectionString);
|
||||
await _connection.OpenAsync();
|
||||
|
||||
// V008: ensure MustChangePassword column and IX_Usuario_Activo_Rol exist in test DB
|
||||
await EnsureV008SchemaAsync();
|
||||
|
||||
_respawner = await Respawner.CreateAsync(_connection, new RespawnerOptions
|
||||
{
|
||||
DbAdapter = DbAdapter.SqlServer,
|
||||
@@ -83,6 +86,38 @@ public sealed class SqlTestFixture : IAsyncLifetime
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Applies V008 schema changes idempotently to the test database.
|
||||
/// Mirrors V008__add_mustchangepassword_and_indexes.sql.
|
||||
/// </summary>
|
||||
private async Task EnsureV008SchemaAsync()
|
||||
{
|
||||
const string addColumn = """
|
||||
IF COL_LENGTH('dbo.Usuario', 'MustChangePassword') IS NULL
|
||||
BEGIN
|
||||
ALTER TABLE dbo.Usuario
|
||||
ADD MustChangePassword BIT NOT NULL
|
||||
CONSTRAINT DF_Usuario_MustChangePassword DEFAULT(0);
|
||||
END
|
||||
""";
|
||||
|
||||
const string addIndex = """
|
||||
IF NOT EXISTS (
|
||||
SELECT 1 FROM sys.indexes
|
||||
WHERE name = 'IX_Usuario_Activo_Rol'
|
||||
AND object_id = OBJECT_ID('dbo.Usuario')
|
||||
)
|
||||
BEGIN
|
||||
CREATE INDEX IX_Usuario_Activo_Rol
|
||||
ON dbo.Usuario(Activo, Rol)
|
||||
INCLUDE (Id, Username, Email, UltimoLogin, FechaModificacion);
|
||||
END
|
||||
""";
|
||||
|
||||
await _connection.ExecuteAsync(addColumn);
|
||||
await _connection.ExecuteAsync(addIndex);
|
||||
}
|
||||
|
||||
private async Task SeedPermisosCanonicalAsync()
|
||||
{
|
||||
const string sql = """
|
||||
@@ -183,11 +218,11 @@ public sealed class SqlTestFixture : IAsyncLifetime
|
||||
const string sql = """
|
||||
SET QUOTED_IDENTIFIER ON;
|
||||
IF NOT EXISTS (SELECT 1 FROM dbo.Usuario WHERE Username = 'admin')
|
||||
INSERT INTO dbo.Usuario (Username, PasswordHash, Nombre, Apellido, Rol, PermisosJson, Activo)
|
||||
INSERT INTO dbo.Usuario (Username, PasswordHash, Nombre, Apellido, Rol, PermisosJson, Activo, MustChangePassword)
|
||||
VALUES (
|
||||
'admin',
|
||||
'$2a$12$rmq6tlSAQ8WXhR2CwLCSeuwCJKz/.8Eab95UQCUNfwe4dokeOqMcW',
|
||||
'Administrador', 'Sistema', 'admin', '["*"]', 1
|
||||
'Administrador', 'Sistema', 'admin', '["*"]', 1, 0
|
||||
);
|
||||
""";
|
||||
await _connection.ExecuteAsync(sql);
|
||||
|
||||
Reference in New Issue
Block a user