fix(backend+tests): reactivate endpoint 500 + test schema mismatches (PRC-001)
Three bugs surfaced while user smoke-testing Reactivate: 1. ReactivateAsync opened a SECOND connection for GetByIdAsync after the SP call, inside the ambient TransactionScope. This promoted the tx to DTC (distributed) which requires MSDTC — typically not enabled on dev/prod servers. The API returned an opaque 500. Fix: run the post-SP SELECT on the SAME connection (local tx stays lightweight / LTM). 2. Agent 1's V023 test refactor wrote 'INSERT INTO dbo.ProductType (Nombre, Codigo, Activo)' in 2 test files — but dbo.ProductType has no 'Codigo' or 'Activo' columns (schema is Nombre + IsActive + flags + multimedia limits). Fix: use '(Nombre, HasDuration, RequiresText, RequiresCategory, IsBundle, AllowImages)' matching the other test files (ProductQueryRepositoryTests, ProductRepositoryTests, ProductPriceRepositoryIntegrationTests). 3. SqlTestFixture.EnsureV021SchemaAsync unconditionally ALTERed the V021-era SPs with '@MedioId' body. On second fixture run after V023 had already refactored the table, ALTER PROCEDURE body referenced a MedioId column that no longer existed — 'Invalid column name MedioId'. Fix: guard the V021 SP ALTERs + seedV022 behind 'MedioId column exists' check. If V023 already dropped MedioId, skip V021 re-install; EnsureV023SchemaAsync still recreates SPs with @ProductTypeId. 4. PricingExceptionTests still used 'medioId:' named-arg + '.MedioId' — Agent 2 renamed the exception property but not these 6 test references. Tests: 1297/1297 Application.Tests green.
This commit is contained in:
@@ -1522,11 +1522,30 @@ public sealed class SqlTestFixture : IAsyncLifetime
|
||||
await _connection.ExecuteAsync(setVersioning);
|
||||
await _connection.ExecuteAsync(createVigenteIndex);
|
||||
await _connection.ExecuteAsync(createQueryIndex);
|
||||
await _connection.ExecuteAsync(createInsertSp);
|
||||
await _connection.ExecuteAsync(alterInsertSp);
|
||||
await _connection.ExecuteAsync(createGetActiveSp);
|
||||
await _connection.ExecuteAsync(alterGetActiveSp);
|
||||
await _connection.ExecuteAsync(seedV022);
|
||||
|
||||
// Guard: only ALTER the V021-era SPs + seed with MedioId if the column still exists.
|
||||
// If V023 already refactored the table in a prior run of the fixture on the same DB,
|
||||
// MedioId is gone and these ALTERs would fail with "Invalid column name 'MedioId'".
|
||||
// EnsureV023SchemaAsync (called right after) will re-install the SPs with @ProductTypeId.
|
||||
const string hasMedioIdCheck = """
|
||||
SELECT CAST(
|
||||
CASE WHEN EXISTS (
|
||||
SELECT 1 FROM sys.columns
|
||||
WHERE object_id = OBJECT_ID('dbo.ChargeableCharConfig')
|
||||
AND name = 'MedioId'
|
||||
) THEN 1 ELSE 0 END
|
||||
AS BIT)
|
||||
""";
|
||||
var hasMedioId = await _connection.ExecuteScalarAsync<bool>(hasMedioIdCheck);
|
||||
|
||||
if (hasMedioId)
|
||||
{
|
||||
await _connection.ExecuteAsync(createInsertSp);
|
||||
await _connection.ExecuteAsync(alterInsertSp);
|
||||
await _connection.ExecuteAsync(createGetActiveSp);
|
||||
await _connection.ExecuteAsync(alterGetActiveSp);
|
||||
await _connection.ExecuteAsync(seedV022);
|
||||
}
|
||||
// Permission 'tasacion:caracteres_especiales:gestionar' and admin assignment
|
||||
// are seeded from SeedPermisosCanonicalAsync / SeedRolPermisosCanonicalAsync (post-respawn).
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user