Files
ChatBot/ChatBot.Tests/Telegram/Commands/HelpCommandTests.cs
Leonid Pershin 03eb0f22a2 add tests
2025-10-17 05:47:18 +03:00

109 lines
3.5 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.Models.Configuration;
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;
using Telegram.Bot.Types;
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");
}
}