using FluentAssertions;
using Knot.Modules.Profiles.Application.Profiles.UpdateProfile;
using Knot.Modules.Profiles.Domain;
using Knot.Shared.Kernel;
using NSubstitute;
using Xunit;
using System;
using System.Threading;
using System.Threading.Tasks;
using Knot.Modules.Profiles.Application.Abstractions;

namespace Knot.Modules.Profiles.UnitTests;

public class UpdateProfileCommandHandlerTests
{
    private readonly IProfileRepository _profileRepository;
    private readonly UpdateProfileCommandHandler _handler;

    public UpdateProfileCommandHandlerTests()
    {
        _profileRepository = Substitute.For<IProfileRepository>();
        _handler = new UpdateProfileCommandHandler(_profileRepository);
    }

    [Fact]
    public async Task Handle_ShouldReturnError_WhenProfileNotFound()
    {
        // Arrange
        var command = new UpdateProfileCommand(Guid.NewGuid(), "FirstName", "Bio", null);
        _profileRepository.GetByIdAsync(command.UserId, Arg.Any<CancellationToken>()).Returns((ProfileDocument?)null);

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

        // Assert
        result.IsFailure.Should().BeTrue();
    }
}
