Add more tests
This commit is contained in:
441
ChatBot.Tests/Telegram/Commands/ReplyInfoTests.cs
Normal file
441
ChatBot.Tests/Telegram/Commands/ReplyInfoTests.cs
Normal file
@@ -0,0 +1,441 @@
|
||||
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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user