using Bit.Core.Models.Data;
using Bit.Core.Services;
using Bit.Test.Common.AutoFixture;
using Bit.Test.Common.AutoFixture.Attributes;
using Bit.Test.Common.Helpers;
using NSubstitute;
using Xunit;

namespace Bit.Core.Test.Services;

[SutProviderCustomize]
public class EventRepositoryHandlerTests
{
    [Theory, BitAutoData]
    public async Task HandleEventAsync_WritesEventToIEventWriteService(
        EventMessage eventMessage,
        SutProvider<EventRepositoryHandler> sutProvider)
    {
        await sutProvider.Sut.HandleEventAsync(eventMessage);
        await sutProvider.GetDependency<IEventWriteService>().Received(1).CreateAsync(
            Arg.Is(AssertHelper.AssertPropertyEqual<IEvent>(eventMessage))
        );
    }

    [Theory, BitAutoData]
    public async Task HandleManyEventAsync_WritesEventsToIEventWriteService(
        IEnumerable<EventMessage> eventMessages,
        SutProvider<EventRepositoryHandler> sutProvider)
    {
        await sutProvider.Sut.HandleManyEventsAsync(eventMessages);
        await sutProvider.GetDependency<IEventWriteService>().Received(1).CreateManyAsync(
            Arg.Is(AssertHelper.AssertPropertyEqual<IEvent>(eventMessages))
        );
    }
}