using Api.SeaHavenIndustries.Controllers; using Data.SeaHavenIndustries; using FluentAssertions; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Moq; using SeaHaven.DataServices.Implementation; using SeaHaven.DataServices.Interfaces; using SeaHaven.Services.DTOs; using SeaHaven.Services.Helpers; using SeaHaven.Services.Implementation; using SeaHaven.Services.Interfaces; using Xunit; namespace Api.SeaHavenIndustries.Tests; public class WorkOrderControllerSearchTests { private static WorkOrderBoardController NewController(IWorkOrderAdvancedSearchService advancedSearch) { var controller = new WorkOrderBoardController( Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of(), advancedSearch); controller.ControllerContext = new ControllerContext { HttpContext = new DefaultHttpContext { User = new System.Security.Claims.ClaimsPrincipal( new System.Security.Claims.ClaimsIdentity( new[] { new System.Security.Claims.Claim( System.Security.Claims.ClaimTypes.NameIdentifier, "test-user") }, "Test")) } }; return controller; } [Fact] public async Task SearchBoard_WhenCustomPresetMissingDates_ReturnsBadRequest() { var advancedSearch = new WorkOrderAdvancedSearchService( Mock.Of(), Mock.Of()); var controller = NewController(advancedSearch); var result = await controller.SearchBoard(new WorkOrderAdvancedSearchQueryDto { DatePreset = WorkOrderAdvancedSearchDatePreset.Custom }); var badRequest = result.Should().BeOfType().Subject; var body = badRequest.Value.Should().BeOfType().Subject; body.Status.Should().Be("Error"); body.Message.Should().Contain("dateFrom"); } [Fact] public async Task GetBoard_WhenWeekEndBeforeWeekStart_ReturnsBadRequest() { var controller = NewController(Mock.Of()); var result = await controller.GetBoard( new DateOnly(2026, 6, 22), new DateOnly(2026, 6, 15)); var badRequest = result.Should().BeOfType().Subject; badRequest.Value.Should().BeOfType().Which.Should().Contain("weekEnd"); } }