Files
ChatBot/ChatBot.Tests/Telegram/Commands/HelpCommandTests.cs
Leonid Pershin b816eb5aaf clear deps
2025-10-17 06:29:23 +03:00

107 lines
3.5 KiB
C#
Raw Permalink 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;
using ChatBot.Services.Telegram.Commands;
using ChatBot.Services.Telegram.Interfaces;
using ChatBot.Tests.TestUtilities;
using FluentAssertions;
using Microsoft.Extensions.Logging;
using Moq;
namespace ChatBot.Tests.Telegram.Commands;
public class HelpCommandTests : UnitTestBase
{
private readonly HelpCommand _helpCommand;
public HelpCommandTests()
{
var chatServiceMock = new Mock<ChatService>(
TestDataBuilder.Mocks.CreateLoggerMock<ChatService>().Object,
TestDataBuilder.Mocks.CreateAIServiceMock().Object,
TestDataBuilder.Mocks.CreateSessionStorageMock().Object,
TestDataBuilder
.Mocks.CreateOptionsMock(TestDataBuilder.Configurations.CreateAISettings())
.Object,
TestDataBuilder.Mocks.CreateCompressionServiceMock().Object
);
var modelServiceMock = new Mock<ModelService>(
TestDataBuilder.Mocks.CreateLoggerMock<ModelService>().Object,
TestDataBuilder
.Mocks.CreateOptionsMock(TestDataBuilder.Configurations.CreateOllamaSettings())
.Object
);
var commandRegistryMock = new Mock<CommandRegistry>(
Mock.Of<ILogger<CommandRegistry>>(),
new List<ITelegramCommand>()
);
commandRegistryMock
.Setup(x => x.GetCommandsWithDescriptions())
.Returns(
new List<(string, string)>
{
("/start", "Начать работу с ботом"),
("/help", "Показать справку по всем командам"),
("/clear", "Очистить историю чата"),
("/settings", "Показать настройки чата"),
("/status", "Показать статус системы и API"),
}
);
var serviceProviderMock = new Mock<IServiceProvider>();
serviceProviderMock
.Setup(x => x.GetService(typeof(CommandRegistry)))
.Returns(commandRegistryMock.Object);
_helpCommand = new HelpCommand(
chatServiceMock.Object,
modelServiceMock.Object,
serviceProviderMock.Object
);
}
[Fact]
public async Task ExecuteAsync_ShouldReturnHelpMessage()
{
// Arrange
var context = new TelegramCommandContext
{
ChatId = 12345,
Username = "testuser",
MessageText = "/help",
ChatType = "private",
ChatTitle = "Test Chat",
};
// Act
var result = await _helpCommand.ExecuteAsync(context);
// Assert
result.Should().NotBeNull();
result.Should().Contain("Доступные");
result.Should().Contain("/start");
result.Should().Contain("/help");
}
[Fact]
public async Task ExecuteAsync_ShouldReturnCommandList()
{
// Arrange
var context = new TelegramCommandContext
{
ChatId = 12345,
Username = "testuser",
MessageText = "/help",
ChatType = "private",
ChatTitle = "Test Chat",
};
// Act
var result = await _helpCommand.ExecuteAsync(context);
// Assert
result.Should().NotBeNull();
result.Should().Contain("/status");
result.Should().Contain("/clear");
result.Should().Contain("/settings");
}
}