operations-service/tests/Operations.Service.Application.UnitTests/OperationsWorkflowUseCasesTests.cs
2026-03-31 16:14:50 -06:00

98 lines
3.4 KiB
C#

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);
}
}