mirror of
https://github.com/Sea-Haven-Industries/shoc-backend.git
synced 2026-10-01 07:33:14 +00:00
71 lines
2.5 KiB
C#
71 lines
2.5 KiB
C#
using Api.SeaHavenIndustries.Controllers;
|
|
using Microsoft.AspNetCore.Http;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using SeaHaven.Services.Interfaces;
|
|
using System.Security.Claims;
|
|
using Xunit;
|
|
|
|
namespace Api.SeaHavenIndustries.Tests;
|
|
|
|
public sealed class WorkOrderReconciliationControllerTests
|
|
{
|
|
[Fact]
|
|
public async Task Admin_trigger_returns_durable_run_and_status_is_queryable()
|
|
{
|
|
var runId = Guid.NewGuid();
|
|
var service = new StubService(runId);
|
|
var controller = new WorkOrderReconciliationController(service);
|
|
|
|
var trigger = Assert.IsType<AcceptedResult>(
|
|
await controller.Trigger(CancellationToken.None));
|
|
Assert.Equal(StatusCodes.Status202Accepted, trigger.StatusCode);
|
|
Assert.Equal(runId, service.LastRunId);
|
|
var status = Assert.IsType<OkObjectResult>(
|
|
await controller.Status(CancellationToken.None));
|
|
Assert.IsType<WorkOrderReconciliationStatus>(status.Value);
|
|
}
|
|
|
|
[Fact]
|
|
public async Task Disabled_trigger_returns_sanitized_unavailable_response()
|
|
{
|
|
var controller = new WorkOrderReconciliationController(new StubService(Guid.Empty));
|
|
|
|
var result = Assert.IsType<ObjectResult>(
|
|
await controller.Trigger(CancellationToken.None));
|
|
|
|
Assert.Equal(StatusCodes.Status503ServiceUnavailable, result.StatusCode);
|
|
Assert.DoesNotContain("exception", result.Value!.ToString(), StringComparison.OrdinalIgnoreCase);
|
|
}
|
|
|
|
private sealed class StubService : IWorkOrderReconciliationService
|
|
{
|
|
private readonly Guid _runId;
|
|
public StubService(Guid runId) => _runId = runId;
|
|
public Guid LastRunId { get; private set; }
|
|
|
|
public Task<WorkOrderReconciliationTriggerResult> TriggerAsync(
|
|
ClaimsPrincipal user,
|
|
string reason,
|
|
CancellationToken cancellationToken)
|
|
{
|
|
LastRunId = _runId;
|
|
return Task.FromResult(new WorkOrderReconciliationTriggerResult(
|
|
_runId != Guid.Empty,
|
|
_runId));
|
|
}
|
|
|
|
public Task<WorkOrderReconciliationStatus> GetStatusAsync(
|
|
ClaimsPrincipal user,
|
|
CancellationToken cancellationToken) =>
|
|
Task.FromResult(new WorkOrderReconciliationStatus(
|
|
_runId,
|
|
"Pending",
|
|
"admin",
|
|
DateTimeOffset.UtcNow,
|
|
null,
|
|
null,
|
|
0,
|
|
0,
|
|
null));
|
|
}
|
|
}
|