mirror of
https://github.com/Sea-Haven-Industries/shoc-backend.git
synced 2026-09-30 07:13:12 +00:00
55 lines
1.9 KiB
C#
55 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);
|
||
|
|
}
|
||
|
|
}
|