using ChatBot.Models.Configuration; using ChatBot.Services; using ChatBot.Services.Interfaces; using ChatBot.Services.Telegram.Commands; using ChatBot.Tests.TestUtilities; using FluentAssertions; using Moq; namespace ChatBot.Tests.Telegram.Commands; public class SettingsCommandTests : UnitTestBase { private readonly Mock _chatServiceMock; private readonly SettingsCommand _settingsCommand; public SettingsCommandTests() { _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 aiSettingsMock = TestDataBuilder.Mocks.CreateOptionsMock(new AISettings()); _settingsCommand = new SettingsCommand( _chatServiceMock.Object, modelServiceMock.Object, aiSettingsMock.Object ); } [Fact] public async Task ExecuteAsync_ShouldReturnSettings_WhenSessionExists() { // Arrange var chatId = 12345L; var session = TestDataBuilder.ChatSessions.CreateBasicSession(chatId); _chatServiceMock.Setup(x => x.GetSessionAsync(chatId)).ReturnsAsync(session); var context = new TelegramCommandContext { ChatId = chatId, Username = "testuser", MessageText = "/settings", ChatType = "private", ChatTitle = "Test Chat", }; // Act var result = await _settingsCommand.ExecuteAsync(context); // Assert result.Should().NotBeNull(); result.Should().Contain("Настройки"); result.Should().Contain("Модель"); } [Fact] public async Task ExecuteAsync_ShouldReturnDefaultSettings_WhenSessionDoesNotExist() { // Arrange var chatId = 12345L; _chatServiceMock .Setup(x => x.GetSessionAsync(chatId)) .ReturnsAsync((ChatBot.Models.ChatSession?)null); var context = new TelegramCommandContext { ChatId = chatId, Username = "testuser", MessageText = "/settings", ChatType = "private", ChatTitle = "Test Chat", }; // Act var result = await _settingsCommand.ExecuteAsync(context); // Assert result.Should().NotBeNull(); result.Should().Contain("Сессия"); result.Should().Contain("найдена"); } }