442 lines
11 KiB
C#
442 lines
11 KiB
C#
using ChatBot.Services.Telegram.Commands;
|
||
using FluentAssertions;
|
||
using Xunit;
|
||
|
||
namespace ChatBot.Tests.Telegram.Commands;
|
||
|
||
public class ReplyInfoTests
|
||
{
|
||
[Fact]
|
||
public void ReplyInfo_ShouldHaveCorrectProperties()
|
||
{
|
||
// Arrange & Act
|
||
var replyInfo = new ReplyInfo
|
||
{
|
||
MessageId = 123,
|
||
UserId = 456L,
|
||
Username = "testuser",
|
||
};
|
||
|
||
// Assert
|
||
replyInfo.MessageId.Should().Be(123);
|
||
replyInfo.UserId.Should().Be(456L);
|
||
replyInfo.Username.Should().Be("testuser");
|
||
}
|
||
|
||
[Fact]
|
||
public void ReplyInfo_ShouldAllowNullUsername()
|
||
{
|
||
// Arrange & Act
|
||
var replyInfo = new ReplyInfo
|
||
{
|
||
MessageId = 123,
|
||
UserId = 456L,
|
||
Username = null,
|
||
};
|
||
|
||
// Assert
|
||
replyInfo.MessageId.Should().Be(123);
|
||
replyInfo.UserId.Should().Be(456L);
|
||
replyInfo.Username.Should().BeNull();
|
||
}
|
||
|
||
[Fact]
|
||
public void ReplyInfo_ShouldAllowEmptyUsername()
|
||
{
|
||
// Arrange & Act
|
||
var replyInfo = new ReplyInfo
|
||
{
|
||
MessageId = 123,
|
||
UserId = 456L,
|
||
Username = string.Empty,
|
||
};
|
||
|
||
// Assert
|
||
replyInfo.MessageId.Should().Be(123);
|
||
replyInfo.UserId.Should().Be(456L);
|
||
replyInfo.Username.Should().BeEmpty();
|
||
}
|
||
|
||
[Fact]
|
||
public void Create_ShouldReturnReplyInfo_WhenValidParameters()
|
||
{
|
||
// Arrange
|
||
var messageId = 123;
|
||
var userId = 456L;
|
||
var username = "testuser";
|
||
|
||
// Act
|
||
var result = ReplyInfo.Create(messageId, userId, username);
|
||
|
||
// Assert
|
||
result.Should().NotBeNull();
|
||
result!.MessageId.Should().Be(messageId);
|
||
result.UserId.Should().Be(userId);
|
||
result.Username.Should().Be(username);
|
||
}
|
||
|
||
[Fact]
|
||
public void Create_ShouldReturnReplyInfo_WhenUsernameIsNull()
|
||
{
|
||
// Arrange
|
||
var messageId = 123;
|
||
var userId = 456L;
|
||
string? username = null;
|
||
|
||
// Act
|
||
var result = ReplyInfo.Create(messageId, userId, username);
|
||
|
||
// Assert
|
||
result.Should().NotBeNull();
|
||
result!.MessageId.Should().Be(messageId);
|
||
result.UserId.Should().Be(userId);
|
||
result.Username.Should().BeNull();
|
||
}
|
||
|
||
[Fact]
|
||
public void Create_ShouldReturnReplyInfo_WhenUsernameIsEmpty()
|
||
{
|
||
// Arrange
|
||
var messageId = 123;
|
||
var userId = 456L;
|
||
var username = string.Empty;
|
||
|
||
// Act
|
||
var result = ReplyInfo.Create(messageId, userId, username);
|
||
|
||
// Assert
|
||
result.Should().NotBeNull();
|
||
result!.MessageId.Should().Be(messageId);
|
||
result.UserId.Should().Be(userId);
|
||
result.Username.Should().BeEmpty();
|
||
}
|
||
|
||
[Fact]
|
||
public void Create_ShouldReturnNull_WhenMessageIdIsNull()
|
||
{
|
||
// Arrange
|
||
int? messageId = null;
|
||
var userId = 456L;
|
||
var username = "testuser";
|
||
|
||
// Act
|
||
var result = ReplyInfo.Create(messageId, userId, username);
|
||
|
||
// Assert
|
||
result.Should().BeNull();
|
||
}
|
||
|
||
[Fact]
|
||
public void Create_ShouldReturnNull_WhenUserIdIsNull()
|
||
{
|
||
// Arrange
|
||
var messageId = 123;
|
||
long? userId = null;
|
||
var username = "testuser";
|
||
|
||
// Act
|
||
var result = ReplyInfo.Create(messageId, userId, username);
|
||
|
||
// Assert
|
||
result.Should().BeNull();
|
||
}
|
||
|
||
[Fact]
|
||
public void Create_ShouldReturnNull_WhenBothMessageIdAndUserIdAreNull()
|
||
{
|
||
// Arrange
|
||
int? messageId = null;
|
||
long? userId = null;
|
||
var username = "testuser";
|
||
|
||
// Act
|
||
var result = ReplyInfo.Create(messageId, userId, username);
|
||
|
||
// Assert
|
||
result.Should().BeNull();
|
||
}
|
||
|
||
[Fact]
|
||
public void Create_ShouldReturnNull_WhenMessageIdIsZero()
|
||
{
|
||
// Arrange
|
||
var messageId = 0;
|
||
var userId = 456L;
|
||
var username = "testuser";
|
||
|
||
// Act
|
||
var result = ReplyInfo.Create(messageId, userId, username);
|
||
|
||
// Assert
|
||
result.Should().NotBeNull(); // 0 is a valid message ID
|
||
result!.MessageId.Should().Be(0);
|
||
result.UserId.Should().Be(userId);
|
||
result.Username.Should().Be(username);
|
||
}
|
||
|
||
[Fact]
|
||
public void Create_ShouldReturnNull_WhenUserIdIsZero()
|
||
{
|
||
// Arrange
|
||
var messageId = 123;
|
||
var userId = 0L;
|
||
var username = "testuser";
|
||
|
||
// Act
|
||
var result = ReplyInfo.Create(messageId, userId, username);
|
||
|
||
// Assert
|
||
result.Should().NotBeNull(); // 0 is a valid user ID
|
||
result!.MessageId.Should().Be(messageId);
|
||
result.UserId.Should().Be(0L);
|
||
result.Username.Should().Be(username);
|
||
}
|
||
|
||
[Fact]
|
||
public void Create_ShouldReturnNull_WhenMessageIdIsNegative()
|
||
{
|
||
// Arrange
|
||
var messageId = -1;
|
||
var userId = 456L;
|
||
var username = "testuser";
|
||
|
||
// Act
|
||
var result = ReplyInfo.Create(messageId, userId, username);
|
||
|
||
// Assert
|
||
result.Should().NotBeNull(); // Negative values are still valid
|
||
result!.MessageId.Should().Be(-1);
|
||
result.UserId.Should().Be(userId);
|
||
result.Username.Should().Be(username);
|
||
}
|
||
|
||
[Fact]
|
||
public void Create_ShouldReturnNull_WhenUserIdIsNegative()
|
||
{
|
||
// Arrange
|
||
var messageId = 123;
|
||
var userId = -1L;
|
||
var username = "testuser";
|
||
|
||
// Act
|
||
var result = ReplyInfo.Create(messageId, userId, username);
|
||
|
||
// Assert
|
||
result.Should().NotBeNull(); // Negative values are still valid
|
||
result!.MessageId.Should().Be(messageId);
|
||
result.UserId.Should().Be(-1L);
|
||
result.Username.Should().Be(username);
|
||
}
|
||
|
||
[Fact]
|
||
public void Create_ShouldHandleVeryLongUsername()
|
||
{
|
||
// Arrange
|
||
var messageId = 123;
|
||
var userId = 456L;
|
||
var username = new string('a', 1000); // Very long username
|
||
|
||
// Act
|
||
var result = ReplyInfo.Create(messageId, userId, username);
|
||
|
||
// Assert
|
||
result.Should().NotBeNull();
|
||
result!.MessageId.Should().Be(messageId);
|
||
result.UserId.Should().Be(userId);
|
||
result.Username.Should().Be(username);
|
||
result.Username.Should().HaveLength(1000);
|
||
}
|
||
|
||
[Fact]
|
||
public void Create_ShouldHandleUsernameWithSpecialCharacters()
|
||
{
|
||
// Arrange
|
||
var messageId = 123;
|
||
var userId = 456L;
|
||
var username = "user@domain.com!@#$%^&*()_+-=[]{}|;':\",./<>?";
|
||
|
||
// Act
|
||
var result = ReplyInfo.Create(messageId, userId, username);
|
||
|
||
// Assert
|
||
result.Should().NotBeNull();
|
||
result!.MessageId.Should().Be(messageId);
|
||
result.UserId.Should().Be(userId);
|
||
result.Username.Should().Be(username);
|
||
}
|
||
|
||
[Fact]
|
||
public void Create_ShouldHandleUsernameWithUnicodeCharacters()
|
||
{
|
||
// Arrange
|
||
var messageId = 123;
|
||
var userId = 456L;
|
||
var username = "пользователь_用户_ユーザー_مستخدم";
|
||
|
||
// Act
|
||
var result = ReplyInfo.Create(messageId, userId, username);
|
||
|
||
// Assert
|
||
result.Should().NotBeNull();
|
||
result!.MessageId.Should().Be(messageId);
|
||
result.UserId.Should().Be(userId);
|
||
result.Username.Should().Be(username);
|
||
}
|
||
|
||
[Fact]
|
||
public void Create_ShouldHandleUsernameWithWhitespace()
|
||
{
|
||
// Arrange
|
||
var messageId = 123;
|
||
var userId = 456L;
|
||
var username = " user with spaces ";
|
||
|
||
// Act
|
||
var result = ReplyInfo.Create(messageId, userId, username);
|
||
|
||
// Assert
|
||
result.Should().NotBeNull();
|
||
result!.MessageId.Should().Be(messageId);
|
||
result.UserId.Should().Be(userId);
|
||
result.Username.Should().Be(username); // Username is preserved as-is
|
||
}
|
||
|
||
[Fact]
|
||
public void Create_ShouldHandleUsernameWithNewlines()
|
||
{
|
||
// Arrange
|
||
var messageId = 123;
|
||
var userId = 456L;
|
||
var username = "user\nwith\nnewlines";
|
||
|
||
// Act
|
||
var result = ReplyInfo.Create(messageId, userId, username);
|
||
|
||
// Assert
|
||
result.Should().NotBeNull();
|
||
result!.MessageId.Should().Be(messageId);
|
||
result.UserId.Should().Be(userId);
|
||
result.Username.Should().Be(username);
|
||
}
|
||
|
||
[Fact]
|
||
public void Create_ShouldHandleUsernameWithTabs()
|
||
{
|
||
// Arrange
|
||
var messageId = 123;
|
||
var userId = 456L;
|
||
var username = "user\twith\ttabs";
|
||
|
||
// Act
|
||
var result = ReplyInfo.Create(messageId, userId, username);
|
||
|
||
// Assert
|
||
result.Should().NotBeNull();
|
||
result!.MessageId.Should().Be(messageId);
|
||
result.UserId.Should().Be(userId);
|
||
result.Username.Should().Be(username);
|
||
}
|
||
|
||
[Theory]
|
||
[InlineData(0)]
|
||
[InlineData(1)]
|
||
[InlineData(100)]
|
||
[InlineData(int.MaxValue)]
|
||
[InlineData(int.MinValue)]
|
||
public void Create_ShouldHandleVariousMessageIds(int messageId)
|
||
{
|
||
// Arrange
|
||
var userId = 456L;
|
||
var username = "testuser";
|
||
|
||
// Act
|
||
var result = ReplyInfo.Create(messageId, userId, username);
|
||
|
||
// Assert
|
||
result.Should().NotBeNull();
|
||
result!.MessageId.Should().Be(messageId);
|
||
result.UserId.Should().Be(userId);
|
||
result.Username.Should().Be(username);
|
||
}
|
||
|
||
[Theory]
|
||
[InlineData(0L)]
|
||
[InlineData(1L)]
|
||
[InlineData(100L)]
|
||
[InlineData(long.MaxValue)]
|
||
[InlineData(long.MinValue)]
|
||
public void Create_ShouldHandleVariousUserIds(long userId)
|
||
{
|
||
// Arrange
|
||
var messageId = 123;
|
||
var username = "testuser";
|
||
|
||
// Act
|
||
var result = ReplyInfo.Create(messageId, userId, username);
|
||
|
||
// Assert
|
||
result.Should().NotBeNull();
|
||
result!.MessageId.Should().Be(messageId);
|
||
result.UserId.Should().Be(userId);
|
||
result.Username.Should().Be(username);
|
||
}
|
||
|
||
[Fact]
|
||
public void ReplyInfo_ShouldBeMutable()
|
||
{
|
||
// Arrange
|
||
var replyInfo = new ReplyInfo
|
||
{
|
||
MessageId = 123,
|
||
UserId = 456L,
|
||
Username = "testuser",
|
||
};
|
||
|
||
// Act
|
||
replyInfo.MessageId = 789;
|
||
replyInfo.UserId = 101112L;
|
||
replyInfo.Username = "newuser";
|
||
|
||
// Assert
|
||
replyInfo.MessageId.Should().Be(789);
|
||
replyInfo.UserId.Should().Be(101112L);
|
||
replyInfo.Username.Should().Be("newuser");
|
||
}
|
||
|
||
[Fact]
|
||
public void ReplyInfo_ShouldAllowSettingUsernameToNull()
|
||
{
|
||
// Arrange
|
||
var replyInfo = new ReplyInfo
|
||
{
|
||
MessageId = 123,
|
||
UserId = 456L,
|
||
Username = "testuser",
|
||
};
|
||
|
||
// Act
|
||
replyInfo.Username = null;
|
||
|
||
// Assert
|
||
replyInfo.Username.Should().BeNull();
|
||
}
|
||
|
||
[Fact]
|
||
public void ReplyInfo_ShouldAllowSettingUsernameToEmpty()
|
||
{
|
||
// Arrange
|
||
var replyInfo = new ReplyInfo
|
||
{
|
||
MessageId = 123,
|
||
UserId = 456L,
|
||
Username = "testuser",
|
||
};
|
||
|
||
// Act
|
||
replyInfo.Username = string.Empty;
|
||
|
||
// Assert
|
||
replyInfo.Username.Should().BeEmpty();
|
||
}
|
||
}
|