using BuildFlow.Shared.Domain.Errors; using FluentAssertions; using Microsoft.EntityFrameworkCore; using Workflow.Application.Features.WorkflowDefinitions.Commands; using Workflow.Application.Features.WorkflowDefinitions.Handlers; using Workflow.Domain.Entities; using Workflow.Domain.Enums; using Xunit; namespace BuildFlow.Workflow.Tests.Handlers; public class DisableWorkflowDefinitionHandlerTests { private static WorkflowDbContext CreateDbContext() { var options = new DbContextOptionsBuilder() .UseInMemoryDatabase(Guid.NewGuid().ToString()) .Options; var db = new WorkflowDbContext(options); db.SavingChanges += AuditStub.OnSave; return db; } [Fact] public async Task DisableWorkflowDefinition_SetsIsEnabledFalse() { await using var db = CreateDbContext(); var id = Guid.NewGuid(); db.WorkflowDefinitions.Add(new WorkflowDefinition { Id = id, Name = "Def", Code = "def", Status = DefinitionStatus.Published, Version = 1 }); await db.SaveChangesAsync(); var handler = new DisableWorkflowDefinitionCommandHandler(db); await handler.Handle(new DisableWorkflowDefinitionCommand(id), CancellationToken.None); var stored = await db.WorkflowDefinitions.FindAsync(id); stored!.IsEnabled.Should().BeFalse(); } [Fact] public async Task DisableWorkflowDefinition_Missing_ThrowsNotFound() { await using var db = CreateDbContext(); var handler = new DisableWorkflowDefinitionCommandHandler(db); var act = async () => await handler.Handle(new DisableWorkflowDefinitionCommand(Guid.NewGuid()), CancellationToken.None); var ex = await act.Should().ThrowAsync(); ex.Which.Code.Should().Be(ErrorCode.NotFound); } }