100 lines
3.0 KiB
C#
100 lines
3.0 KiB
C#
using ChatBot.Services.HealthChecks;
|
|
using ChatBot.Services.Interfaces;
|
|
using ChatBot.Tests.TestUtilities;
|
|
using FluentAssertions;
|
|
using Microsoft.Extensions.Diagnostics.HealthChecks;
|
|
using Microsoft.Extensions.Logging;
|
|
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);
|
|
}
|
|
}
|