Files
ChatBot/ChatBot.Tests/Telegram/Commands/ReplyInfoTests.cs
Leonid Pershin c9eac74e35
Some checks failed
SonarQube / Build and analyze (push) Failing after 3m2s
Unit Tests / Run Tests (push) Failing after 2m23s
Add more tests
2025-10-20 08:20:55 +03:00

442 lines
11 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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();
}
}