using Kitchen.Service.Application.Ports; using Kitchen.Service.Application.UseCases; using Kitchen.Service.Contracts.Requests; namespace Kitchen.Service.Application.UnitTests; public class KitchenWorkflowUseCasesTests { private readonly DefaultKitchenWorkflowPort workflowPort = new(); [Fact] public async Task GetKitchenBoardUseCase_ReturnsLanesAndStations() { var useCase = new GetKitchenBoardUseCase(workflowPort); var response = await useCase.HandleAsync(new GetKitchenBoardRequest("demo-context"), CancellationToken.None); Assert.Equal("demo-context", response.ContextId); Assert.NotEmpty(response.Lanes); Assert.NotEmpty(response.AvailableStations); } [Fact] public async Task ClaimKitchenWorkItemUseCase_ReturnsClaimedResponse() { var useCase = new ClaimKitchenWorkItemUseCase(workflowPort); var response = await useCase.HandleAsync( new ClaimKitchenWorkItemRequest("demo-context", "WK-1001", "chef-maya"), CancellationToken.None); Assert.True(response.Claimed); Assert.Equal("chef-maya", response.ClaimedBy); } [Fact] public async Task UpdateKitchenPriorityUseCase_NormalizesPriority() { var useCase = new UpdateKitchenPriorityUseCase(workflowPort); var response = await useCase.HandleAsync( new UpdateKitchenPriorityRequest("demo-context", "WK-1001", 0, "expo-noah"), CancellationToken.None); Assert.Equal(1, response.Priority); } [Fact] public async Task TransitionKitchenOrderStateUseCase_AllowsConfiguredStates() { var useCase = new TransitionKitchenOrderStateUseCase(); var response = await useCase.HandleAsync( new TransitionKitchenOrderStateRequest("CO-1001", "KT-1001", "Preparing", "chef-maya"), CancellationToken.None); Assert.True(response.Applied); Assert.Equal("Preparing", response.CurrentState); } }