using NSubstitute; using PnvPanel.Application.Auth; using PnvPanel.Application.Auth.Me; using PnvPanel.Application.Common.Interfaces; using PnvPanel.Application.Tests.TestSupport; using Xunit; namespace PnvPanel.Application.Tests.Auth; public class GetCurrentUserQueryHandlerTests { private readonly IIdentityService _identityService = Substitute.For(); [Fact] public async Task Handle_Unauthenticated_ReturnsUnauthorized() { var handler = new GetCurrentUserQueryHandler(_identityService, FakeCurrentUser.Anonymous()); var result = await handler.Handle(new GetCurrentUserQuery(), CancellationToken.None); Assert.False(result.IsSuccess); Assert.Equal(AuthErrors.Unauthorized, result.Error); } [Fact] public async Task Handle_ProfileMissing_ReturnsUnauthorized() { var userId = Guid.NewGuid(); _identityService.GetProfileAsync(userId, Arg.Any()).Returns((CurrentUserProfile?)null); var handler = new GetCurrentUserQueryHandler(_identityService, FakeCurrentUser.Authenticated(userId)); var result = await handler.Handle(new GetCurrentUserQuery(), CancellationToken.None); Assert.False(result.IsSuccess); Assert.Equal(AuthErrors.Unauthorized, result.Error); } [Fact] public async Task Handle_AuthenticatedWithProfile_ReturnsCurrentUserDto() { var userId = Guid.NewGuid(); var profile = new CurrentUserProfile(userId, "alice", Guid.NewGuid(), "user", true, false, 3, "sub-token"); _identityService.GetProfileAsync(userId, Arg.Any()).Returns(profile); _identityService.GetTelegramLinkInfoAsync(userId, Arg.Any()) .Returns(new TelegramLinkInfo(true, 42, "alice_tg")); var handler = new GetCurrentUserQueryHandler(_identityService, FakeCurrentUser.Authenticated(userId, "alice")); var result = await handler.Handle(new GetCurrentUserQuery(), CancellationToken.None); Assert.True(result.IsSuccess); Assert.Equal(userId, result.Value.Id); Assert.Equal("alice", result.Value.UserName); Assert.Equal("user", result.Value.Role); Assert.True(result.Value.IsActivated); Assert.True(result.Value.TelegramLinked); } }