mirror of
https://github.com/Sea-Haven-Industries/shoc-backend.git
synced 2026-09-30 04:53:11 +00:00
The added service test asserts DashboardStatsDTO, which already carried ScheduledTomorrow, PendingUplifts and AvetaPending, so it does not guard the regression that was actually shipped: the DashboardController Stats anonymous response dropping those keys and leaving the tiles empty. Add DashboardControllerTests.GetStats_SerialisesKpiCountsOnWireObject, which drives the controller and asserts the three keys are present on the serialised wire object, so re-dropping any of them fails a test. Also reword the pending-uplifts comment in DashboardServiceTests: the Pending-only-vs-ChangesRequested exclusion is the behaviour the code ships today, an open product call, not a settled review decision.
54 lines
1.9 KiB
C#
54 lines
1.9 KiB
C#
using System.Security.Claims;
|
|
using Api.SeaHavenIndustries.Controllers;
|
|
using FluentAssertions;
|
|
using Microsoft.AspNetCore.Http;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Moq;
|
|
using SeaHaven.Services.DTOs;
|
|
using SeaHaven.Services.Interfaces;
|
|
using Xunit;
|
|
|
|
namespace Api.SeaHavenIndustries.Tests;
|
|
|
|
public class DashboardControllerTests
|
|
{
|
|
private static object Prop(object source, string name) =>
|
|
source.GetType().GetProperty(name)!.GetValue(source)!;
|
|
|
|
private static DashboardController NewController(Mock<IDashboardService> service) =>
|
|
new(service.Object)
|
|
{
|
|
ControllerContext = new ControllerContext
|
|
{
|
|
HttpContext = new DefaultHttpContext()
|
|
}
|
|
};
|
|
|
|
// Guards the Stats wire object, not the service DTO. GetKpiCountsAsync and
|
|
// DashboardStatsDTO already carried these three counts; the regression this
|
|
// pins is the controller's anonymous response silently dropping them, which
|
|
// is what left the tiles with nothing to read.
|
|
[Fact]
|
|
public async Task GetStats_SerialisesKpiCountsOnWireObject()
|
|
{
|
|
var service = new Mock<IDashboardService>();
|
|
service.Setup(s => s.GetStatsAsync(
|
|
It.IsAny<ClaimsPrincipal>(),
|
|
It.IsAny<DashboardStatsQueryDTO>(),
|
|
It.IsAny<CancellationToken>()))
|
|
.ReturnsAsync(new DashboardStatsDTO
|
|
{
|
|
ScheduledTomorrow = 3,
|
|
PendingUplifts = 5,
|
|
AvetaPending = 7
|
|
});
|
|
|
|
var result = await NewController(service).GetStats(
|
|
new DashboardStatsQueryDTO(), CancellationToken.None);
|
|
|
|
var body = result.Should().BeOfType<OkObjectResult>().Subject.Value!;
|
|
((int)Prop(body, "scheduledTomorrow")).Should().Be(3);
|
|
((int)Prop(body, "pendingUplifts")).Should().Be(5);
|
|
((int)Prop(body, "avetaPending")).Should().Be(7);
|
|
}
|
|
}
|