add tests

This commit is contained in:
Leonid Pershin
2025-10-17 05:47:18 +03:00
parent f7e3024e7e
commit 03eb0f22a2
41 changed files with 4001 additions and 30 deletions

View File

@@ -0,0 +1,101 @@
using ChatBot.Models.Configuration;
using ChatBot.Services.HealthChecks;
using ChatBot.Services.Interfaces;
using ChatBot.Tests.TestUtilities;
using FluentAssertions;
using Microsoft.Extensions.Diagnostics.HealthChecks;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using Moq;
using Telegram.Bot.Types;
namespace ChatBot.Tests.Services.HealthChecks;
public class TelegramBotHealthCheckTests : UnitTestBase
{
private readonly Mock<ILogger<TelegramBotHealthCheck>> _loggerMock;
private readonly Mock<ITelegramBotClientWrapper> _telegramBotClientWrapperMock;
private readonly TelegramBotHealthCheck _healthCheck;
public TelegramBotHealthCheckTests()
{
_loggerMock = TestDataBuilder.Mocks.CreateLoggerMock<TelegramBotHealthCheck>();
_telegramBotClientWrapperMock = new Mock<ITelegramBotClientWrapper>();
_healthCheck = new TelegramBotHealthCheck(
_telegramBotClientWrapperMock.Object,
_loggerMock.Object
);
}
[Fact]
public async Task CheckHealthAsync_ShouldReturnHealthy_WhenTelegramResponds()
{
// Arrange
var botInfo = TestDataBuilder.Mocks.CreateTelegramBot();
_telegramBotClientWrapperMock
.Setup(x => x.GetMeAsync(It.IsAny<CancellationToken>()))
.ReturnsAsync(botInfo);
// Act
var context = new HealthCheckContext();
var result = await _healthCheck.CheckHealthAsync(context);
// Assert
result.Status.Should().Be(HealthStatus.Healthy);
}
[Fact]
public async Task CheckHealthAsync_ShouldReturnUnhealthy_WhenTelegramThrowsException()
{
// Arrange
_telegramBotClientWrapperMock
.Setup(x => x.GetMeAsync(It.IsAny<CancellationToken>()))
.ThrowsAsync(new Exception("Telegram unavailable"));
// Act
var context = new HealthCheckContext();
var result = await _healthCheck.CheckHealthAsync(context);
// Assert
result.Status.Should().Be(HealthStatus.Unhealthy);
}
[Fact]
public async Task CheckHealthAsync_ShouldReturnUnhealthy_WhenTelegramReturnsNull()
{
// Arrange
_telegramBotClientWrapperMock
.Setup(x => x.GetMeAsync(It.IsAny<CancellationToken>()))
.ReturnsAsync((User)null!);
// Act
var context = new HealthCheckContext();
var result = await _healthCheck.CheckHealthAsync(context);
// Assert
result.Status.Should().Be(HealthStatus.Unhealthy);
}
[Fact]
public async Task CheckHealthAsync_ShouldReturnUnhealthy_WhenTelegramReturnsInvalidBot()
{
// Arrange
var invalidBot = new User
{
Id = 0, // Invalid bot ID
Username = null,
};
_telegramBotClientWrapperMock
.Setup(x => x.GetMeAsync(It.IsAny<CancellationToken>()))
.ReturnsAsync(invalidBot);
// Act
var context = new HealthCheckContext();
var result = await _healthCheck.CheckHealthAsync(context);
// Assert
result.Status.Should().Be(HealthStatus.Unhealthy);
}
}