using PnvPanel.Domain.Exceptions; using PnvPanel.Domain.Telegram; using Xunit; namespace PnvPanel.Domain.Tests.Telegram; public class TelegramLoginRequestTests { [Fact] public void Create_SetsPendingStatusAndExpiry() { var request = TelegramLoginRequest.Create(TimeSpan.FromMinutes(5), "1.2.3.4"); Assert.Equal(TelegramLoginStatus.Pending, request.Status); Assert.Equal("1.2.3.4", request.Context); Assert.False(request.IsExpired); Assert.True(request.ExpiresAt > request.CreatedAt); } [Fact] public void Approve_WhenPending_SetsApprovedAndUserId() { var request = TelegramLoginRequest.Create(TimeSpan.FromMinutes(5), null); var userId = Guid.NewGuid(); request.Approve(userId); Assert.Equal(TelegramLoginStatus.Approved, request.Status); Assert.Equal(userId, request.UserId); } [Fact] public void Reject_WhenPending_SetsRejected() { var request = TelegramLoginRequest.Create(TimeSpan.FromMinutes(5), null); request.Reject(); Assert.Equal(TelegramLoginStatus.Rejected, request.Status); } [Fact] public void Approve_WhenExpired_ThrowsAndMarksExpired() { var request = TelegramLoginRequest.Create(TimeSpan.Zero, null); Assert.Throws(() => request.Approve(Guid.NewGuid())); Assert.Equal(TelegramLoginStatus.Expired, request.Status); } [Fact] public void Approve_WhenAlreadyApproved_Throws() { var request = TelegramLoginRequest.Create(TimeSpan.FromMinutes(5), null); request.Approve(Guid.NewGuid()); Assert.Throws(() => request.Approve(Guid.NewGuid())); } [Fact] public void Consume_WhenApproved_SetsConsumed() { var request = TelegramLoginRequest.Create(TimeSpan.FromMinutes(5), null); request.Approve(Guid.NewGuid()); request.Consume(); Assert.Equal(TelegramLoginStatus.Consumed, request.Status); } [Fact] public void Consume_WhenNotApproved_Throws() { var request = TelegramLoginRequest.Create(TimeSpan.FromMinutes(5), null); Assert.Throws(() => request.Consume()); } [Fact] public void Consume_WhenAlreadyConsumed_Throws() { var request = TelegramLoginRequest.Create(TimeSpan.FromMinutes(5), null); request.Approve(Guid.NewGuid()); request.Consume(); Assert.Throws(() => request.Consume()); } }