From 60c5464fa6ad15d57d4f54a14b3e32f86572a572 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Mon, 10 Jan 2022 15:01:27 +0800 Subject: [PATCH] Add unit test --- .../Abp/EventBus/EventHandlerInvoker_Tests.cs | 127 ++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 framework/test/Volo.Abp.EventBus.Tests/Volo/Abp/EventBus/EventHandlerInvoker_Tests.cs diff --git a/framework/test/Volo.Abp.EventBus.Tests/Volo/Abp/EventBus/EventHandlerInvoker_Tests.cs b/framework/test/Volo.Abp.EventBus.Tests/Volo/Abp/EventBus/EventHandlerInvoker_Tests.cs new file mode 100644 index 0000000000..eb02114dc6 --- /dev/null +++ b/framework/test/Volo.Abp.EventBus.Tests/Volo/Abp/EventBus/EventHandlerInvoker_Tests.cs @@ -0,0 +1,127 @@ +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(1); + 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> + { + 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; + } + } +}