using System; using System.Threading.Tasks; using Shouldly; using Volo.Abp.Domain.Entities; using Volo.Abp.Domain.Entities.Events; using Volo.Abp.Domain.Entities.Events.Distributed; using Volo.Abp.EventBus.Distributed; using Volo.Abp.EventBus.Local; using Xunit; namespace Volo.Abp.EventBus; public class EventHandlerInvoker_Tests : EventBusTestBase { private readonly IEventHandlerInvoker _eventHandlerInvoker; public EventHandlerInvoker_Tests() { _eventHandlerInvoker = GetRequiredService(); } [Fact] public async Task Should_Invoke_LocalEventHandler_With_MyEventData() { var localHandler = new MyLocalEventHandler(); var eventData = new MyEventData(); await _eventHandlerInvoker.InvokeAsync(localHandler, eventData, eventData.GetType()); localHandler.MyEventDataCount.ShouldBe(2); localHandler.EntityChangedEventDataCount.ShouldBe(0); localHandler.EntityChangedEventDataCount.ShouldBe(0); } [Fact] public async Task Should_Invoke_LocalEventHandler_Created_And_Changed_Once() { var localHandler = new MyLocalEventHandler(); var eventData = new EntityCreatedEventData(new MyEntity()); await _eventHandlerInvoker.InvokeAsync(localHandler, eventData, eventData.GetType()); await _eventHandlerInvoker.InvokeAsync(localHandler, eventData, typeof(EntityChangedEventData)); localHandler.MyEventDataCount.ShouldBe(0); localHandler.EntityChangedEventDataCount.ShouldBe(1); localHandler.EntityChangedEventDataCount.ShouldBe(1); } [Fact] public async Task Should_Invoke_DistributedEventHandler_With_MyEventData() { var localHandler = new MyDistributedEventHandler(); var eventData = new MyEventData(); await _eventHandlerInvoker.InvokeAsync(localHandler, eventData, eventData.GetType()); localHandler.MyEventDataCount.ShouldBe(1); localHandler.EntityCreatedCount.ShouldBe(0); } [Fact] public async Task Should_Invoke_DistributedEventHandler_With_EntityCreatedEto() { var localHandler = new MyDistributedEventHandler(); var eventData = new EntityCreatedEto(new MyEntity()); await _eventHandlerInvoker.InvokeAsync(localHandler, eventData, eventData.GetType()); localHandler.MyEventDataCount.ShouldBe(0); localHandler.EntityCreatedCount.ShouldBe(1); } public class MyEventData { } public class MyEntity : Entity { } public class MyDistributedEventHandler : IDistributedEventHandler, IDistributedEventHandler> { public int MyEventDataCount { get; set; } public int EntityCreatedCount { get; set; } public Task HandleEventAsync(MyEventData eventData) { MyEventDataCount++; return Task.CompletedTask; } public Task HandleEventAsync(EntityCreatedEto eventData) { EntityCreatedCount++; return Task.CompletedTask; } } public class MyLocalEventHandler : ILocalEventHandler, IDistributedEventHandler, IDistributedEventHandler>, IDistributedEventHandler> { public int MyEventDataCount { get; set; } public int EntityCreatedEventDataCount { get; set; } public int EntityChangedEventDataCount { get; set; } public Task HandleEventAsync(MyEventData eventData) { MyEventDataCount++; return Task.CompletedTask; } public Task HandleEventAsync(EntityCreatedEventData eventData) { EntityCreatedEventDataCount++; return Task.CompletedTask; } public Task HandleEventAsync(EntityChangedEventData eventData) { EntityChangedEventDataCount++; return Task.CompletedTask; } } }