namespace KArtSell.Integration.Tests; using KArtSell.Modules.ModelOperations.Domain.ApprovalWorkflow; using KArtSell.Modules.ModelOperations.Features.ApprovalWorkflow; using Xunit; public class ApprovalWorkflowPolicyTests { [Fact] public void CanCreateProposal_MakerRole_ReturnsTrue() { var result = ApprovalWorkflowPolicy.CanCreateProposal("maker@test.com", "Maker"); Assert.True(result); } [Fact] public void CanApprove_CheckerDifferentFromMaker_ReturnsTrue() { var proposal = new ApprovalProposal { CreatedBy = "maker@test.com", Status = ApprovalStatus.Proposed }; var result = ApprovalWorkflowPolicy.CanApprove(proposal, "checker@test.com", "Checker"); Assert.True(result); } [Fact] public void CanApprove_SeparationOfDuties_Enforced() { var proposal = new ApprovalProposal { CreatedBy = "user@test.com", Status = ApprovalStatus.Proposed }; var result = ApprovalWorkflowPolicy.CanApprove(proposal, "user@test.com", "Checker"); Assert.False(result); } [Fact] public void ValidateProposalState_ValidTransition_Succeeds() { ApprovalWorkflowPolicy.ValidateProposalState(ApprovalStatus.Draft, ApprovalStatus.Proposed); } [Fact] public void ValidateProposalState_InvalidTransition_Throws() { Assert.Throws(() => ApprovalWorkflowPolicy.ValidateProposalState(ApprovalStatus.Draft, ApprovalStatus.Active)); } }