Add more tests
Some checks failed
SonarQube / Build and analyze (push) Failing after 3m2s
Unit Tests / Run Tests (push) Failing after 2m23s

This commit is contained in:
Leonid Pershin
2025-10-20 08:20:55 +03:00
parent 1647fe19d3
commit c9eac74e35
12 changed files with 3873 additions and 11 deletions

View File

@@ -0,0 +1,20 @@
using Telegram.Bot.Types;
namespace ChatBot.Services.Telegram.Interfaces
{
/// <summary>
/// Wrapper interface for Telegram Bot Client SendMessage functionality to enable mocking
/// </summary>
public interface ITelegramMessageSenderWrapper
{
/// <summary>
/// Sends a message to a chat
/// </summary>
Task<Message> SendMessageAsync(
long chatId,
string text,
int replyToMessageId,
CancellationToken cancellationToken = default
);
}
}

View File

@@ -10,10 +10,15 @@ namespace ChatBot.Services.Telegram.Services
public class TelegramMessageSender : ITelegramMessageSender
{
private readonly ILogger<TelegramMessageSender> _logger;
private readonly ITelegramMessageSenderWrapper _messageSenderWrapper;
public TelegramMessageSender(ILogger<TelegramMessageSender> logger)
public TelegramMessageSender(
ILogger<TelegramMessageSender> logger,
ITelegramMessageSenderWrapper messageSenderWrapper
)
{
_logger = logger;
_messageSenderWrapper = messageSenderWrapper;
}
/// <summary>
@@ -28,14 +33,20 @@ namespace ChatBot.Services.Telegram.Services
int maxRetries = 3
)
{
// Ensure maxRetries is at least 1
if (maxRetries < 1)
{
maxRetries = 3;
}
for (int attempt = 1; attempt <= maxRetries; attempt++)
{
try
{
await botClient.SendMessage(
await _messageSenderWrapper.SendMessageAsync(
chatId: chatId,
text: text,
replyParameters: replyToMessageId,
replyToMessageId: replyToMessageId,
cancellationToken: cancellationToken
);
return; // Success, exit the method

View File

@@ -0,0 +1,34 @@
using ChatBot.Services.Telegram.Interfaces;
using Telegram.Bot;
using Telegram.Bot.Types;
namespace ChatBot.Services.Telegram.Services
{
/// <summary>
/// Wrapper implementation for Telegram Bot Client SendMessage functionality
/// </summary>
public class TelegramMessageSenderWrapper : ITelegramMessageSenderWrapper
{
private readonly ITelegramBotClient _botClient;
public TelegramMessageSenderWrapper(ITelegramBotClient botClient)
{
_botClient = botClient;
}
public async Task<Message> SendMessageAsync(
long chatId,
string text,
int replyToMessageId,
CancellationToken cancellationToken = default
)
{
return await _botClient.SendMessage(
chatId: chatId,
text: text,
replyParameters: replyToMessageId,
cancellationToken: cancellationToken
);
}
}
}