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( TestDataBuilder.Mocks.CreateLoggerMock().Object, TestDataBuilder.Mocks.CreateAIServiceMock().Object, TestDataBuilder.Mocks.CreateSessionStorageMock().Object, TestDataBuilder .Mocks.CreateOptionsMock(TestDataBuilder.Configurations.CreateAISettings()) .Object, TestDataBuilder.Mocks.CreateCompressionServiceMock().Object ); var modelServiceMock = new Mock( TestDataBuilder.Mocks.CreateLoggerMock().Object, TestDataBuilder .Mocks.CreateOptionsMock(TestDataBuilder.Configurations.CreateOllamaSettings()) .Object ); var commandRegistryMock = new Mock( Mock.Of>(), new List() ); commandRegistryMock .Setup(x => x.GetCommandsWithDescriptions()) .Returns( new List<(string, string)> { ("/start", "Начать работу с ботом"), ("/help", "Показать справку по всем командам"), ("/clear", "Очистить историю чата"), ("/settings", "Показать настройки чата"), ("/status", "Показать статус системы и API"), } ); var serviceProviderMock = new Mock(); 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"); } }