fix(notification-outbox): give KPI response a failure shape; log status-query faults

This commit is contained in:
Joseph Doherty
2026-05-19 01:55:46 -04:00
parent 82e3eb0e93
commit 77a05a8960
4 changed files with 68 additions and 11 deletions

View File

@@ -323,6 +323,8 @@ public class NotificationOutboxActorQueryTests : TestKit
var response = ExpectMsg<NotificationKpiResponse>();
Assert.Equal("corr-11", response.CorrelationId);
Assert.True(response.Success);
Assert.Null(response.ErrorMessage);
Assert.Equal(7, response.QueueDepth);
Assert.Equal(2, response.StuckCount);
Assert.Equal(3, response.ParkedCount);
@@ -332,4 +334,27 @@ public class NotificationOutboxActorQueryTests : TestKit
_repository.Received(1).ComputeKpisAsync(
Arg.Any<DateTimeOffset>(), Arg.Any<DateTimeOffset>(), Arg.Any<CancellationToken>());
}
[Fact]
public void KpiRequest_RepositoryThrows_RepliesFailureResponse()
{
_repository.ComputeKpisAsync(
Arg.Any<DateTimeOffset>(), Arg.Any<DateTimeOffset>(), Arg.Any<CancellationToken>())
.ThrowsAsync(new InvalidOperationException("kpi db down"));
var actor = CreateActor();
actor.Tell(new NotificationKpiRequest("corr-12"), TestActor);
// A repository fault yields a failure NotificationKpiResponse, not a Status.Failure.
var response = ExpectMsg<NotificationKpiResponse>();
Assert.Equal("corr-12", response.CorrelationId);
Assert.False(response.Success);
Assert.NotNull(response.ErrorMessage);
Assert.Contains("kpi db down", response.ErrorMessage);
Assert.Equal(0, response.QueueDepth);
Assert.Equal(0, response.StuckCount);
Assert.Equal(0, response.ParkedCount);
Assert.Equal(0, response.DeliveredLastInterval);
Assert.Null(response.OldestPendingAge);
}
}