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

87 lines
2.8 KiB
C#

using ChatBot.Services;
using ChatBot.Services.Telegram.Commands;
using ChatBot.Tests.TestUtilities;
using FluentAssertions;
using Moq;
namespace ChatBot.Tests.Telegram.Commands;
public class ClearCommandTests : UnitTestBase
{
private readonly Mock<ChatService> _chatServiceMock;
private readonly Mock<ModelService> _modelServiceMock;
private readonly ClearCommand _clearCommand;
public ClearCommandTests()
{
_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
);
_modelServiceMock = new Mock<ModelService>(
TestDataBuilder.Mocks.CreateLoggerMock<ModelService>().Object,
TestDataBuilder
.Mocks.CreateOptionsMock(TestDataBuilder.Configurations.CreateOllamaSettings())
.Object
);
_clearCommand = new ClearCommand(_chatServiceMock.Object, _modelServiceMock.Object);
}
[Fact]
public async Task ExecuteAsync_ShouldClearSession_WhenSessionExists()
{
// Arrange
var chatId = 12345L;
_chatServiceMock.Setup(x => x.ClearHistoryAsync(chatId)).Returns(Task.CompletedTask);
var context = new TelegramCommandContext
{
ChatId = chatId,
Username = "testuser",
MessageText = "/clear",
ChatType = "private",
ChatTitle = "Test Chat",
};
// Act
var result = await _clearCommand.ExecuteAsync(context);
// Assert
result.Should().NotBeNull();
result.Should().Contain("очищена");
_chatServiceMock.Verify(x => x.ClearHistoryAsync(chatId), Times.Once);
}
[Fact]
public async Task ExecuteAsync_ShouldReturnMessage_WhenSessionDoesNotExist()
{
// Arrange
var chatId = 12345L;
_chatServiceMock
.Setup(x => x.ClearHistoryAsync(chatId))
.ThrowsAsync(new InvalidOperationException("Session not found"));
var context = new TelegramCommandContext
{
ChatId = chatId,
Username = "testuser",
MessageText = "/clear",
ChatType = "private",
ChatTitle = "Test Chat",
};
// Act
var result = await _clearCommand.ExecuteAsync(context);
// Assert
result.Should().NotBeNull();
result.Should().Contain("очищена");
_chatServiceMock.Verify(x => x.ClearHistoryAsync(chatId), Times.Once);
}
}