using ChatBot.Services.Telegram.Services;
using FluentAssertions;
using Microsoft.Extensions.Logging;
using Moq;
using Telegram.Bot;
namespace ChatBot.Tests.Services.Telegram;
///
/// Базовые тесты для TelegramBotService
/// Полное тестирование затруднено из-за extension методов Telegram.Bot
///
public class TelegramBotServiceBasicTests
{
[Fact]
public void Constructor_ShouldCreateInstance()
{
// Arrange
var loggerMock = new Mock>();
var botClientMock = new Mock();
var serviceProviderMock = new Mock();
// Act
var service = new TelegramBotService(
loggerMock.Object,
botClientMock.Object,
serviceProviderMock.Object
);
// Assert
service.Should().NotBeNull();
}
[Fact]
public async Task StopAsync_ShouldComplete()
{
// Arrange
var loggerMock = new Mock>();
var botClientMock = new Mock();
var serviceProviderMock = new Mock();
var service = new TelegramBotService(
loggerMock.Object,
botClientMock.Object,
serviceProviderMock.Object
);
// Act
var act = async () => await service.StopAsync(CancellationToken.None);
// Assert
await act.Should().NotThrowAsync();
}
[Fact]
public async Task StopAsync_ShouldLog()
{
// Arrange
var loggerMock = new Mock>();
var botClientMock = new Mock();
var serviceProviderMock = new Mock();
var service = new TelegramBotService(
loggerMock.Object,
botClientMock.Object,
serviceProviderMock.Object
);
// Act
await service.StopAsync(CancellationToken.None);
// Assert
loggerMock.Verify(
x => x.Log(
LogLevel.Information,
It.IsAny(),
It.Is((v, t) => v.ToString()!.Contains("Stopping Telegram bot service")),
It.IsAny(),
It.IsAny>()
),
Times.Once
);
}
}