* Moved source code projects directory to 'src'

* Updatedt Solution format
This commit is contained in:
2026-03-06 21:12:21 +04:00
parent a18eab0f31
commit f1927cdda0
194 changed files with 10 additions and 83 deletions
@@ -0,0 +1,83 @@
using FluentAssertions;
using Moq;
using Telegram.Bot.Types;
using Telegrator.Handlers;
using Xunit;
namespace Telegrator.Tests.Handlers
{
/// <summary>
/// Тесты для обработчиков обновлений.
///
/// ПАРАДИГМЫ ТЕСТИРОВАНИЯ:
/// 1. Mocking - создание моков для изоляции зависимостей
/// 2. Dependency Injection - тестирование через интерфейсы
/// 3. Test Doubles - использование заглушек вместо реальных объектов
/// 4. Behavior Verification - проверка поведения, а не только результата
/// 5. Exception Testing - тестирование исключений
/// </summary>
public class HandlerTests
{
/*s
/// <summary>
/// Тест для базового обработчика обновлений.
///
/// ПРИНЦИП: Тестируем абстрактный класс через конкретную реализацию
/// </summary>
[Fact]
public async Task UpdateHandlerBase_ShouldExecuteAndMarkLifetimeAsEnded()
{
// Arrange
var mockContainer = new Mock<IAbstractHandlerContainer<Message>>();
var testHandler = new TestUpdateHandler();
// Act
await testHandler.Execute(mockContainer.Object);
// Assert
testHandler.WasExecuted.Should().BeTrue();
testHandler.LifetimeToken.IsEnded.Should().BeTrue();
}
*/
/// <summary>
/// Тест для проверки токена жизненного цикла.
///
/// ПРИНЦИП: Тестируем состояние объектов
/// </summary>
[Fact]
public void HandlerLifetimeToken_ShouldTrackLifetimeCorrectly()
{
// Arrange
var handler = new TestUpdateHandler();
// Act & Assert
handler.LifetimeToken.IsEnded.Should().BeFalse();
// Act
handler.LifetimeToken.LifetimeEnded();
// Assert
handler.LifetimeToken.IsEnded.Should().BeTrue();
}
/// <summary>
/// Тест для проверки отмены операции.
///
/// ПРИНЦИП: Тестируем асинхронные операции и отмену
/// </summary>
[Fact]
public async Task UpdateHandlerBase_ShouldHandleCancellation()
{
// Arrange
var mockContainer = new Mock<IHandlerContainer<Message>>();
var testHandler = new TestUpdateHandler();
var cancellationTokenSource = new CancellationTokenSource();
cancellationTokenSource.Cancel(); // Отменяем сразу
// Act & Assert
await testHandler.Invoking(h => h.Execute(mockContainer.Object, cancellationTokenSource.Token))
.Should().ThrowAsync<OperationCanceledException>();
}
}
}