using PnvPanel.Domain.Exceptions; using PnvPanel.Domain.Telegram; using Xunit; namespace PnvPanel.Domain.Tests.Telegram; public class TelegramLinkTokenTests { [Fact] public void Create_IsValidBeforeConsumptionOrExpiry() { var userId = Guid.NewGuid(); var token = TelegramLinkToken.Create(userId, TimeSpan.FromMinutes(10)); Assert.Equal(userId, token.UserId); Assert.True(token.IsValid); Assert.Null(token.ConsumedAt); Assert.False(string.IsNullOrWhiteSpace(token.Token)); } [Fact] public void Create_GeneratesUniqueTokens() { var a = TelegramLinkToken.Create(Guid.NewGuid(), TimeSpan.FromMinutes(10)); var b = TelegramLinkToken.Create(Guid.NewGuid(), TimeSpan.FromMinutes(10)); Assert.NotEqual(a.Token, b.Token); } [Fact] public void Consume_WhenValid_SetsConsumedAtAndInvalidates() { var token = TelegramLinkToken.Create(Guid.NewGuid(), TimeSpan.FromMinutes(10)); token.Consume(); Assert.NotNull(token.ConsumedAt); Assert.False(token.IsValid); } [Fact] public void Consume_WhenAlreadyConsumed_Throws() { var token = TelegramLinkToken.Create(Guid.NewGuid(), TimeSpan.FromMinutes(10)); token.Consume(); Assert.Throws(() => token.Consume()); } [Fact] public void Consume_WhenExpired_Throws() { var token = TelegramLinkToken.Create(Guid.NewGuid(), TimeSpan.Zero); Assert.False(token.IsValid); Assert.Throws(() => token.Consume()); } }