using Operations.Service.Application.Ports; using Operations.Service.Application.UseCases; using Operations.Service.Contracts.Requests; namespace Operations.Service.Application.UnitTests; public class OperationsWorkflowUseCasesTests { private readonly DefaultOperationsWorkflowPort workflowPort = new(); [Fact] public async Task GetWaiterAssignmentsUseCase_ReturnsAssignmentsAndActivity() { var useCase = new GetWaiterAssignmentsUseCase(workflowPort); var response = await useCase.HandleAsync(new GetWaiterAssignmentsRequest("demo-context"), CancellationToken.None); Assert.Equal("demo-context", response.ContextId); Assert.NotEmpty(response.Assignments); Assert.NotEmpty(response.RecentActivity); } [Fact] public async Task SubmitRestaurantOrderUseCase_WhenRequestValid_AcceptsOrder() { var useCase = new SubmitRestaurantOrderUseCase(workflowPort); var response = await useCase.HandleAsync( new SubmitRestaurantOrderRequest("demo-context", "ORD-101", "T-12", 3), CancellationToken.None); Assert.True(response.Accepted); Assert.Equal("queued", response.Status); } [Fact] public async Task GetCustomerOrderStatusUseCase_ReturnsOrders() { var useCase = new GetCustomerOrderStatusUseCase(workflowPort); var response = await useCase.HandleAsync(new GetCustomerOrderStatusRequest("demo-context"), CancellationToken.None); Assert.Equal("demo-context", response.ContextId); Assert.NotEmpty(response.Orders); Assert.NotEmpty(response.RecentEvents); } [Fact] public async Task GetPosTransactionSummaryUseCase_ReturnsPaymentActivity() { var useCase = new GetPosTransactionSummaryUseCase(workflowPort); var response = await useCase.HandleAsync(new GetPosTransactionSummaryRequest("demo-context"), CancellationToken.None); Assert.Equal("USD", response.Currency); Assert.NotEmpty(response.RecentPayments); } [Fact] public async Task CapturePosPaymentUseCase_WhenAmountPositive_ReturnsCapturedStatus() { var useCase = new CapturePosPaymentUseCase(workflowPort); var response = await useCase.HandleAsync( new CapturePosPaymentRequest("demo-context", "POS-9001", 25.50m, "USD", "card"), CancellationToken.None); Assert.True(response.Succeeded); Assert.Equal("captured", response.Status); } [Fact] public async Task GetRestaurantAdminConfigUseCase_ReturnsFlagsWindowsAndChanges() { var useCase = new GetRestaurantAdminConfigUseCase(workflowPort); var response = await useCase.HandleAsync(new GetRestaurantAdminConfigRequest("demo-context"), CancellationToken.None); Assert.Equal("demo-context", response.ContextId); Assert.NotEmpty(response.FeatureFlags); Assert.NotEmpty(response.ServiceWindows); Assert.NotEmpty(response.RecentChanges); } [Fact] public async Task SetServiceWindowUseCase_WhenRequestValid_ReturnsAppliedResponse() { var useCase = new SetServiceWindowUseCase(workflowPort); var response = await useCase.HandleAsync( new SetServiceWindowRequest("demo-context", 1, "08:00:00", "22:00:00", "admin-operator"), CancellationToken.None); Assert.True(response.Applied); Assert.Equal(1, response.ServiceWindow.DayOfWeek); } }