Resolve all high-severity architecture review findings
This commit is contained in:
+21
-1
@@ -27,6 +27,25 @@ public class SiteCallAuditRepositoryTests : IClassFixture<MsSqlMigrationFixture>
|
||||
_fixture = fixture;
|
||||
}
|
||||
|
||||
[SkippableFact]
|
||||
public async Task CM9_ExistingOperationCannotBeAdvancedByAnotherSite()
|
||||
{
|
||||
Skip.IfNot(_fixture.Available, _fixture.SkipReason);
|
||||
var id = TrackedOperationId.New();
|
||||
await using var context = CreateContext();
|
||||
var repository = new SiteCallAuditRepository(context);
|
||||
await repository.UpsertAsync(NewRow(id, status: "Submitted", sourceSite: "owner-b"));
|
||||
|
||||
var failure = await Assert.ThrowsAsync<Microsoft.Data.SqlClient.SqlException>(() =>
|
||||
repository.UpsertAsync(NewRow(id, status: "Delivered", sourceSite: "attacker-a", retryCount: 99)));
|
||||
Assert.Equal(51001, failure.Number);
|
||||
var stored = await repository.GetAsync(id);
|
||||
Assert.NotNull(stored);
|
||||
Assert.Equal("owner-b", stored.SourceSite);
|
||||
Assert.Equal("Submitted", stored.Status);
|
||||
Assert.Equal(0, stored.RetryCount);
|
||||
}
|
||||
|
||||
[SkippableFact]
|
||||
public async Task UpsertAsync_FreshId_InsertsOneRow()
|
||||
{
|
||||
@@ -897,7 +916,8 @@ public class SiteCallAuditRepositoryTests : IClassFixture<MsSqlMigrationFixture>
|
||||
TrackedOperationId = id,
|
||||
Channel = "ApiOutbound",
|
||||
Target = "ERP.GetOrder",
|
||||
SourceSite = sourceSite ?? NewSiteId(),
|
||||
// Every lifecycle packet for one operation has the same owning site.
|
||||
SourceSite = sourceSite ?? $"test-site-{id.Value:N}",
|
||||
SourceNode = sourceNode,
|
||||
Status = status,
|
||||
RetryCount = retryCount,
|
||||
|
||||
Reference in New Issue
Block a user