feat(notification-outbox): actor handler for per-site KPI requests

This commit is contained in:
Joseph Doherty
2026-05-19 05:37:14 -04:00
parent adcab9dcfc
commit 1629a72093
2 changed files with 74 additions and 0 deletions

View File

@@ -356,4 +356,46 @@ public class NotificationOutboxActorQueryTests : TestKit
Assert.Equal(0, response.DeliveredLastInterval);
Assert.Null(response.OldestPendingAge);
}
[Fact]
public void PerSiteKpiRequest_RepliesWithPerSiteSnapshots()
{
_repository.ComputePerSiteKpisAsync(
Arg.Any<DateTimeOffset>(), Arg.Any<DateTimeOffset>(), Arg.Any<CancellationToken>())
.Returns(new List<SiteNotificationKpiSnapshot>
{
new("plant-a", 4, 1, 0, 9, TimeSpan.FromMinutes(7)),
});
var actor = CreateActor();
actor.Tell(new PerSiteNotificationKpiRequest("corr-ps"), TestActor);
var response = ExpectMsg<PerSiteNotificationKpiResponse>();
Assert.True(response.Success);
Assert.Null(response.ErrorMessage);
Assert.Equal("corr-ps", response.CorrelationId);
Assert.Single(response.Sites);
Assert.Equal("plant-a", response.Sites[0].SourceSiteId);
_repository.Received(1).ComputePerSiteKpisAsync(
Arg.Any<DateTimeOffset>(), Arg.Any<DateTimeOffset>(), Arg.Any<CancellationToken>());
}
[Fact]
public void PerSiteKpiRequest_RepositoryFault_RepliesUnsuccessful()
{
_repository.ComputePerSiteKpisAsync(
Arg.Any<DateTimeOffset>(), Arg.Any<DateTimeOffset>(), Arg.Any<CancellationToken>())
.ThrowsAsync(new InvalidOperationException("db down"));
var actor = CreateActor();
actor.Tell(new PerSiteNotificationKpiRequest("corr-ps"), TestActor);
var response = ExpectMsg<PerSiteNotificationKpiResponse>();
Assert.False(response.Success);
Assert.Equal("corr-ps", response.CorrelationId);
Assert.NotNull(response.ErrorMessage);
Assert.Contains("db down", response.ErrorMessage);
Assert.Empty(response.Sites);
}
}