using NSubstitute; using PnvPanel.Application.Activation; using PnvPanel.Application.Admin.Activation; using PnvPanel.Application.Common.Interfaces; using PnvPanel.Application.Tests.TestSupport; using PnvPanel.Domain.Activation; using Xunit; namespace PnvPanel.Application.Tests.Activation; public class RejectActivationCommandHandlerTests { private readonly ICurrentUser _currentUser = Substitute.For(); [Fact] public async Task Handle_WhenPending_RejectsWithReason() { using var dbContext = InMemoryDbContextFactory.Create(); var adminId = Guid.NewGuid(); var request = ActivationRequest.Create(Guid.NewGuid(), null); dbContext.ActivationRequests.Add(request); await dbContext.SaveChangesAsync(CancellationToken.None); _currentUser.UserId.Returns(adminId); var handler = new RejectActivationCommandHandler(dbContext, _currentUser); var result = await handler.Handle(new RejectActivationCommand(request.Id, "недостаточно информации"), CancellationToken.None); Assert.True(result.IsSuccess); Assert.Equal(ActivationStatus.Rejected, request.Status); Assert.Equal("недостаточно информации", request.RejectionReason); } [Fact] public async Task Handle_WhenRequestNotFound_ReturnsNotFound() { using var dbContext = InMemoryDbContextFactory.Create(); _currentUser.UserId.Returns(Guid.NewGuid()); var handler = new RejectActivationCommandHandler(dbContext, _currentUser); var result = await handler.Handle(new RejectActivationCommand(Guid.NewGuid(), null), CancellationToken.None); Assert.False(result.IsSuccess); Assert.Equal(ActivationErrors.NotFound, result.Error); } [Fact] public async Task Handle_WhenAlreadyDecided_ReturnsConflict() { using var dbContext = InMemoryDbContextFactory.Create(); var request = ActivationRequest.Create(Guid.NewGuid(), null); request.Reject(Guid.NewGuid(), null); dbContext.ActivationRequests.Add(request); await dbContext.SaveChangesAsync(CancellationToken.None); _currentUser.UserId.Returns(Guid.NewGuid()); var handler = new RejectActivationCommandHandler(dbContext, _currentUser); var result = await handler.Handle(new RejectActivationCommand(request.Id, null), CancellationToken.None); Assert.False(result.IsSuccess); Assert.Equal(ActivationErrors.AlreadyDecided, result.Error); } }