AEG-X-004: align shadow run queued status contract
ci / static (push) Failing after 8s
ci / backend (push) Failing after 1s
ci / publish (push) Has been cancelled
ci / frontend (push) Has been cancelled
Build & Test with Secrets / build (push) Failing after 1s
Build & Test with Secrets / security-scan (push) Failing after 7s
deploy / deploy (push) Successful in 2m48s
Build & Test with Secrets / frontend (push) Successful in 4m7s
deploy / notify (push) Successful in 1s
Build & Test with Secrets / notification (push) Failing after 1s
ci / static (push) Failing after 8s
ci / backend (push) Failing after 1s
ci / publish (push) Has been cancelled
ci / frontend (push) Has been cancelled
Build & Test with Secrets / build (push) Failing after 1s
Build & Test with Secrets / security-scan (push) Failing after 7s
deploy / deploy (push) Successful in 2m48s
Build & Test with Secrets / frontend (push) Successful in 4m7s
deploy / notify (push) Successful in 1s
Build & Test with Secrets / notification (push) Failing after 1s
This commit is contained in:
@@ -223,6 +223,46 @@ public sealed class DbUpMigrationTests : IAsyncLifetime
|
||||
() => invalidCmd.ExecuteNonQueryAsync());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task Migration0032_QueuedStatus_IsAccepted_AndRerunIsSafe()
|
||||
{
|
||||
await ApplyMigration0008();
|
||||
await ApplyMigration0032();
|
||||
|
||||
await using var connection = await _dataSource.OpenConnectionAsync();
|
||||
var runId = Guid.NewGuid();
|
||||
var modelId = Guid.NewGuid();
|
||||
|
||||
await using var insertCmd = connection.CreateCommand();
|
||||
insertCmd.CommandText = """
|
||||
INSERT INTO model_operations.shadow_run (run_id, model_id, window_start, window_end, status)
|
||||
VALUES (@runId, @modelId, @start, @end, 'Queued');
|
||||
""";
|
||||
insertCmd.Parameters.AddWithValue("@runId", runId);
|
||||
insertCmd.Parameters.AddWithValue("@modelId", modelId);
|
||||
insertCmd.Parameters.AddWithValue("@start", new DateOnly(2024, 1, 2));
|
||||
insertCmd.Parameters.AddWithValue("@end", new DateOnly(2024, 8, 31));
|
||||
await insertCmd.ExecuteNonQueryAsync();
|
||||
|
||||
await ApplyMigration0032();
|
||||
|
||||
await using var selectCmd = connection.CreateCommand();
|
||||
selectCmd.CommandText = "SELECT status FROM model_operations.shadow_run WHERE run_id = @runId;";
|
||||
selectCmd.Parameters.AddWithValue("@runId", runId);
|
||||
Assert.Equal("Queued", await selectCmd.ExecuteScalarAsync());
|
||||
|
||||
await using var invalidCmd = connection.CreateCommand();
|
||||
invalidCmd.CommandText = """
|
||||
INSERT INTO model_operations.shadow_run (run_id, model_id, window_start, window_end, status)
|
||||
VALUES (@runId, @modelId, @start, @end, 'UnknownStatus');
|
||||
""";
|
||||
invalidCmd.Parameters.AddWithValue("@runId", Guid.NewGuid());
|
||||
invalidCmd.Parameters.AddWithValue("@modelId", Guid.NewGuid());
|
||||
invalidCmd.Parameters.AddWithValue("@start", new DateOnly(2024, 1, 2));
|
||||
invalidCmd.Parameters.AddWithValue("@end", new DateOnly(2024, 8, 31));
|
||||
await Assert.ThrowsAsync<PostgresException>(() => invalidCmd.ExecuteNonQueryAsync());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gate 3: Constraints - Window order enforced (start <= end)
|
||||
/// </summary>
|
||||
@@ -482,6 +522,14 @@ public sealed class DbUpMigrationTests : IAsyncLifetime
|
||||
await cmd.ExecuteNonQueryAsync();
|
||||
}
|
||||
|
||||
private async Task ApplyMigration0032()
|
||||
{
|
||||
await using var connection = await _dataSource.OpenConnectionAsync();
|
||||
await using var cmd = connection.CreateCommand();
|
||||
cmd.CommandText = File.ReadAllText(Path.Combine(AppContext.BaseDirectory, "migrations", "0032_shadow_run_queued_status_contract.sql"));
|
||||
await cmd.ExecuteNonQueryAsync();
|
||||
}
|
||||
|
||||
private async Task ApplyMigration0009()
|
||||
{
|
||||
await using var connection = await _dataSource.OpenConnectionAsync();
|
||||
|
||||
Reference in New Issue
Block a user