using PnvPanel.Domain.Activation; using PnvPanel.Domain.Exceptions; using Xunit; namespace PnvPanel.Domain.Tests.Activation; public class ActivationRequestTests { [Fact] public void Create_SetsPendingStatus() { var userId = Guid.NewGuid(); var request = ActivationRequest.Create(userId, "Please activate me"); Assert.Equal(userId, request.UserId); Assert.Equal("Please activate me", request.Comment); Assert.Equal(ActivationStatus.Pending, request.Status); Assert.Null(request.DecidedBy); Assert.Null(request.DecidedAt); } [Fact] public void Approve_WhenPending_SetsApprovedAndDecisionMetadata() { var request = ActivationRequest.Create(Guid.NewGuid(), null); var adminId = Guid.NewGuid(); request.Approve(adminId); Assert.Equal(ActivationStatus.Approved, request.Status); Assert.Equal(adminId, request.DecidedBy); Assert.NotNull(request.DecidedAt); } [Fact] public void Reject_WhenPending_SetsRejectedWithReason() { var request = ActivationRequest.Create(Guid.NewGuid(), null); var adminId = Guid.NewGuid(); request.Reject(adminId, "не хватает информации"); Assert.Equal(ActivationStatus.Rejected, request.Status); Assert.Equal(adminId, request.DecidedBy); Assert.Equal("не хватает информации", request.RejectionReason); } [Fact] public void Approve_WhenAlreadyApproved_Throws() { var request = ActivationRequest.Create(Guid.NewGuid(), null); request.Approve(Guid.NewGuid()); Assert.Throws(() => request.Approve(Guid.NewGuid())); } [Fact] public void Reject_WhenAlreadyRejected_Throws() { var request = ActivationRequest.Create(Guid.NewGuid(), null); request.Reject(Guid.NewGuid(), null); Assert.Throws(() => request.Reject(Guid.NewGuid(), null)); } [Fact] public void Reject_WhenAlreadyApproved_Throws() { var request = ActivationRequest.Create(Guid.NewGuid(), null); request.Approve(Guid.NewGuid()); Assert.Throws(() => request.Reject(Guid.NewGuid(), null)); } }