using Guestbooky.Application.UseCases.CountGuestbookMessages;
using Guestbooky.Domain.Abstractions.Repositories;
using Moq;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Guestbooky.UnitTests.Application.UseCases;

public class CountGuestbookMessagesQueryHandlerTests
{
    private readonly Mock<IGuestbookMessageRepository> _repositoryMock;
    private readonly CountGuestbookMessagesQueryHandler _handler;

    public CountGuestbookMessagesQueryHandlerTests()
    {
        _repositoryMock = new Mock<IGuestbookMessageRepository>();
        _handler = new CountGuestbookMessagesQueryHandler(_repositoryMock.Object);
    }

    [Fact]
    public async Task Handle_ReturnsCorrectCount()
    {
        // Arrange
        const long expectedCount = 42;
        _repositoryMock.Setup(x => x.CountAsync(It.IsAny<CancellationToken>())).ReturnsAsync(expectedCount);

        var query = new CountGuestbookMessagesQuery();

        // Act
        var result = await _handler.Handle(query, CancellationToken.None);

        // Assert
        Assert.Equal(expectedCount, result.Amount);
        _repositoryMock.Verify(x => x.CountAsync(It.IsAny<CancellationToken>()), Times.Once);
    }
}