From a17eaec03df4c61b835de1d29470ab7629ff5ff7 Mon Sep 17 00:00:00 2001 From: dudu Date: Mon, 6 Feb 2023 17:35:53 +0800 Subject: [PATCH 1/3] refactor: refactor Subscribe extensions --- .../EndPointExtensions.cs | 29 +++++++++++++------ .../DaprTests.cs | 22 +++++++++++++- 2 files changed, 41 insertions(+), 10 deletions(-) diff --git a/src/Cnblogs.Architecture.Ddd.EventBus.Dapr/EndPointExtensions.cs b/src/Cnblogs.Architecture.Ddd.EventBus.Dapr/EndPointExtensions.cs index b22b860..65212a2 100644 --- a/src/Cnblogs.Architecture.Ddd.EventBus.Dapr/EndPointExtensions.cs +++ b/src/Cnblogs.Architecture.Ddd.EventBus.Dapr/EndPointExtensions.cs @@ -63,11 +63,7 @@ public static IEndpointConventionBuilder Subscribe( string appName) where TEvent : IntegrationEvent { - var daprOptions = builder.ServiceProvider.GetRequiredService>().Value; - EnsureDaprSubscribeHandlerMapped(builder, daprOptions); - EnsureEventBusRegistered(builder, daprOptions); - - var result = builder + var result = builder.EnsureProvision() .MapPost(route, (TEvent receivedEvent, IEventBus eventBus) => eventBus.ReceiveAsync(receivedEvent)) .WithTopic(DaprOptions.PubSubName, DaprUtils.GetDaprTopicName(appName)); return result; @@ -80,6 +76,8 @@ public static IEndpointConventionBuilder Subscribe( /// public static void Subscribe(this IEndpointRouteBuilder builder, params Assembly[] assemblies) { + builder.EnsureProvision(); + var method = typeof(EndPointExtensions).GetMethod( nameof(Subscribe), new[] { typeof(IEndpointRouteBuilder), typeof(string) })!; @@ -100,11 +98,11 @@ public static void Subscribe(this IEndpointRouteBuilder builder, params Assembly } } - private static void EnsureEventBusRegistered(IEndpointRouteBuilder builder, DaprOptions daprOptions) + private static DaprOptions EnsureEventBusRegistered(this DaprOptions daprOptions, IEndpointRouteBuilder builder) { if (daprOptions.IsEventBusRegistered) { - return; + return daprOptions; } var serviceCheck = builder.ServiceProvider.GetRequiredService(); @@ -115,13 +113,14 @@ private static void EnsureEventBusRegistered(IEndpointRouteBuilder builder, Dapr } daprOptions.IsEventBusRegistered = true; + return daprOptions; } - private static void EnsureDaprSubscribeHandlerMapped(IEndpointRouteBuilder builder, DaprOptions daprOptions) + private static DaprOptions EnsureDaprSubscribeHandlerMapped(this DaprOptions daprOptions, IEndpointRouteBuilder builder) { if (daprOptions.IsDaprSubscribeHandlerMapped) { - return; + return daprOptions; } if (builder is IApplicationBuilder app) @@ -131,5 +130,17 @@ private static void EnsureDaprSubscribeHandlerMapped(IEndpointRouteBuilder build builder.MapSubscribeHandler(); daprOptions.IsDaprSubscribeHandlerMapped = true; + return daprOptions; + } + + private static DaprOptions GetDaprOptions(this IEndpointRouteBuilder builder) + => builder.ServiceProvider.GetRequiredService>().Value; + + private static IEndpointRouteBuilder EnsureProvision(this IEndpointRouteBuilder builder) + { + builder.GetDaprOptions() + .EnsureDaprSubscribeHandlerMapped(builder) + .EnsureEventBusRegistered(builder); + return builder; } } \ No newline at end of file diff --git a/test/Cnblogs.Architecture.IntegrationTests/DaprTests.cs b/test/Cnblogs.Architecture.IntegrationTests/DaprTests.cs index 714af76..7b37c75 100644 --- a/test/Cnblogs.Architecture.IntegrationTests/DaprTests.cs +++ b/test/Cnblogs.Architecture.IntegrationTests/DaprTests.cs @@ -34,7 +34,27 @@ public async Task Dapr_SubscribeEndpoint_OkAsync() // Assert response.StatusCode.Should().Be(HttpStatusCode.OK); var responseText = await response.Content.ReadAsStringAsync(); - responseText.Should().Contain("pubsub"); + responseText.Should().Contain(nameof(TestIntegrationEvent)); + } + + [Fact] + public async Task Dapr_Subscribe_Without_Any_Assembly_OkAsync() + { + // Arrange + var builder = WebApplication.CreateBuilder(); + builder.Services.AddDaprEventBus(nameof(DaprTests)); + builder.WebHost.UseTestServer(); + + var app = builder.Build(); + app.Subscribe(); + await app.StartAsync(); + var httpClient = app.GetTestClient(); + + // Act + var response = await httpClient.GetAsync("/dapr/subscribe"); + + // Assert + response.StatusCode.Should().Be(HttpStatusCode.OK); } [Fact] From b35816ce3cd69527184475075314a4d809c00f6f Mon Sep 17 00:00:00 2001 From: dudu Date: Mon, 6 Feb 2023 18:40:30 +0800 Subject: [PATCH 2/3] refactor: fix test case naming convention MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: 沈星繁 --- test/Cnblogs.Architecture.IntegrationTests/DaprTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Cnblogs.Architecture.IntegrationTests/DaprTests.cs b/test/Cnblogs.Architecture.IntegrationTests/DaprTests.cs index 7b37c75..e0dced1 100644 --- a/test/Cnblogs.Architecture.IntegrationTests/DaprTests.cs +++ b/test/Cnblogs.Architecture.IntegrationTests/DaprTests.cs @@ -38,7 +38,7 @@ public async Task Dapr_SubscribeEndpoint_OkAsync() } [Fact] - public async Task Dapr_Subscribe_Without_Any_Assembly_OkAsync() + public async Task Dapr_SubscribeWithoutAnyAssembly_OkAsync() { // Arrange var builder = WebApplication.CreateBuilder(); From 6d8b4bcd44988265c0c2517782e269435502e155 Mon Sep 17 00:00:00 2001 From: dudu Date: Mon, 6 Feb 2023 18:49:19 +0800 Subject: [PATCH 3/3] refactor: changes for code review --- .../EndPointExtensions.cs | 27 ++++++++++--------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/src/Cnblogs.Architecture.Ddd.EventBus.Dapr/EndPointExtensions.cs b/src/Cnblogs.Architecture.Ddd.EventBus.Dapr/EndPointExtensions.cs index 65212a2..73a2d17 100644 --- a/src/Cnblogs.Architecture.Ddd.EventBus.Dapr/EndPointExtensions.cs +++ b/src/Cnblogs.Architecture.Ddd.EventBus.Dapr/EndPointExtensions.cs @@ -63,7 +63,9 @@ public static IEndpointConventionBuilder Subscribe( string appName) where TEvent : IntegrationEvent { - var result = builder.EnsureProvision() + builder.EnsureDaprEventBus(); + + var result = builder .MapPost(route, (TEvent receivedEvent, IEventBus eventBus) => eventBus.ReceiveAsync(receivedEvent)) .WithTopic(DaprOptions.PubSubName, DaprUtils.GetDaprTopicName(appName)); return result; @@ -76,7 +78,7 @@ public static IEndpointConventionBuilder Subscribe( /// public static void Subscribe(this IEndpointRouteBuilder builder, params Assembly[] assemblies) { - builder.EnsureProvision(); + builder.EnsureDaprEventBus(); var method = typeof(EndPointExtensions).GetMethod( nameof(Subscribe), @@ -98,11 +100,11 @@ public static void Subscribe(this IEndpointRouteBuilder builder, params Assembly } } - private static DaprOptions EnsureEventBusRegistered(this DaprOptions daprOptions, IEndpointRouteBuilder builder) + private static void EnsureEventBusRegistered(this IEndpointRouteBuilder builder, DaprOptions daprOptions) { if (daprOptions.IsEventBusRegistered) { - return daprOptions; + return; } var serviceCheck = builder.ServiceProvider.GetRequiredService(); @@ -113,14 +115,14 @@ private static DaprOptions EnsureEventBusRegistered(this DaprOptions daprOptions } daprOptions.IsEventBusRegistered = true; - return daprOptions; + return; } - private static DaprOptions EnsureDaprSubscribeHandlerMapped(this DaprOptions daprOptions, IEndpointRouteBuilder builder) + private static void EnsureDaprSubscribeHandlerMapped(this IEndpointRouteBuilder builder, DaprOptions daprOptions) { if (daprOptions.IsDaprSubscribeHandlerMapped) { - return daprOptions; + return; } if (builder is IApplicationBuilder app) @@ -130,17 +132,16 @@ private static DaprOptions EnsureDaprSubscribeHandlerMapped(this DaprOptions dap builder.MapSubscribeHandler(); daprOptions.IsDaprSubscribeHandlerMapped = true; - return daprOptions; + return; } private static DaprOptions GetDaprOptions(this IEndpointRouteBuilder builder) => builder.ServiceProvider.GetRequiredService>().Value; - private static IEndpointRouteBuilder EnsureProvision(this IEndpointRouteBuilder builder) + private static void EnsureDaprEventBus(this IEndpointRouteBuilder builder) { - builder.GetDaprOptions() - .EnsureDaprSubscribeHandlerMapped(builder) - .EnsureEventBusRegistered(builder); - return builder; + var options = builder.GetDaprOptions(); + builder.EnsureDaprSubscribeHandlerMapped(options); + builder.EnsureEventBusRegistered(options); } } \ No newline at end of file