From 5e04ff1a428ca64c40109d77e870e08b07020494 Mon Sep 17 00:00:00 2001 From: Stef Heyenrath Date: Fri, 4 Oct 2024 19:30:47 +0200 Subject: [PATCH] Add an architecture diagram for Aspire project (#1174) * Add an architecture diagram for Aspire project * . * "WireMock.Net : " + * . --- examples-Aspire/AspireApp1.AppHost/Program.cs | 44 +++++++++++--- .../WeatherForecastApiMock.cs | 2 +- .../873d495f-940e-4b86-a1f4-4f0fc7be8b8b.json | 10 ++-- src/WireMock.Net.Aspire/doc/architecture.md | 59 +++++++++++++++++++ 4 files changed, 101 insertions(+), 14 deletions(-) create mode 100644 src/WireMock.Net.Aspire/doc/architecture.md diff --git a/examples-Aspire/AspireApp1.AppHost/Program.cs b/examples-Aspire/AspireApp1.AppHost/Program.cs index 83d60feb..700f01ac 100644 --- a/examples-Aspire/AspireApp1.AppHost/Program.cs +++ b/examples-Aspire/AspireApp1.AppHost/Program.cs @@ -2,20 +2,48 @@ using AspireApp1.AppHost; var builder = DistributedApplication.CreateBuilder(args); -//IResourceBuilder apiService = builder.AddProject("apiservice"); +IResourceBuilder apiService = builder.AddProject("apiservice"); var mappingsPath = Path.Combine(Directory.GetCurrentDirectory(), "WireMockMappings"); -Console.WriteLine($"MappingsPath: {mappingsPath}"); +//IResourceBuilder apiService = builder +// .AddWireMock("apiservice", WireMockServerArguments.DefaultPort) +// .WithMappingsPath(mappingsPath) +// .WithReadStaticMappings() +// .WithApiMappingBuilder(WeatherForecastApiMock.BuildAsync); -var wiremock = builder - .AddWireMock("apiservice", WireMockServerArguments.DefaultPort) - .WithMappingsPath(mappingsPath) - .WithReadStaticMappings() - .WithApiMappingBuilder(WeatherForecastApiMock.BuildAsync); +//var apiServiceUsedForDocs = builder +// .AddWireMock("apiservice1", WireMockServerArguments.DefaultPort) +// .WithApiMappingBuilder(adminApiBuilder => +// { +// var summaries = new[] +// { +// "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" +// }; + +// adminApiBuilder.Given(b => b +// .WithRequest(request => request +// .UsingGet() +// .WithPath("/weatherforecast2") +// ) +// .WithResponse(response => response +// .WithHeaders(h => h.Add("Content-Type", "application/json")) +// .WithBodyAsJson(() => Enumerable.Range(1, 5).Select(index => +// new WeatherForecast +// ( +// DateOnly.FromDateTime(DateTime.Now.AddDays(index)), +// Random.Shared.Next(-20, 55), +// "WireMock.Net : " + summaries[Random.Shared.Next(summaries.Length)] +// )) +// .ToArray()) +// ) +// ); + +// return Task.CompletedTask; +// }); builder.AddProject("webfrontend") .WithExternalHttpEndpoints() - .WithReference(wiremock); + .WithReference(apiService); builder.Build().Run(); \ No newline at end of file diff --git a/examples-Aspire/AspireApp1.AppHost/WeatherForecastApiMock.cs b/examples-Aspire/AspireApp1.AppHost/WeatherForecastApiMock.cs index bcda9855..056ccf3a 100644 --- a/examples-Aspire/AspireApp1.AppHost/WeatherForecastApiMock.cs +++ b/examples-Aspire/AspireApp1.AppHost/WeatherForecastApiMock.cs @@ -23,7 +23,7 @@ internal class WeatherForecastApiMock ( DateOnly.FromDateTime(DateTime.Now.AddDays(index)), Random.Shared.Next(-20, 55), - summaries[Random.Shared.Next(summaries.Length)] + "WireMock.Net 2 : " + summaries[Random.Shared.Next(summaries.Length)] )) .ToArray()) ) diff --git a/examples-Aspire/AspireApp1.AppHost/WireMockMappings/873d495f-940e-4b86-a1f4-4f0fc7be8b8b.json b/examples-Aspire/AspireApp1.AppHost/WireMockMappings/873d495f-940e-4b86-a1f4-4f0fc7be8b8b.json index dee32555..c51a9cd0 100644 --- a/examples-Aspire/AspireApp1.AppHost/WireMockMappings/873d495f-940e-4b86-a1f4-4f0fc7be8b8b.json +++ b/examples-Aspire/AspireApp1.AppHost/WireMockMappings/873d495f-940e-4b86-a1f4-4f0fc7be8b8b.json @@ -11,27 +11,27 @@ { "date": "2024-05-24", "temperatureC": -17, - "summary": "Balmy" + "summary": "WireMock.Net 1 : Balmy" }, { "date": "2024-05-25", "temperatureC": -13, - "summary": "Mild" + "summary": "WireMock.Net 1 : Mild" }, { "date": "2024-05-26", "temperatureC": 31, - "summary": "Bracing" + "summary": "WireMock.Net 1 : Bracing" }, { "date": "2024-05-27", "temperatureC": 6, - "summary": "Hot" + "summary": "WireMock.Net 1 : Hot" }, { "date": "2024-05-28", "temperatureC": -2, - "summary": "Mild" + "summary": "WireMock.Net 1 : Mild" } ], "Headers": { diff --git a/src/WireMock.Net.Aspire/doc/architecture.md b/src/WireMock.Net.Aspire/doc/architecture.md new file mode 100644 index 00000000..78d79ac3 --- /dev/null +++ b/src/WireMock.Net.Aspire/doc/architecture.md @@ -0,0 +1,59 @@ +overview +```mermaid +classDiagram + class WireMockServerResource { + } + + class ContainerResource { + } + + class IResourceWithServiceDiscovery { + } + + class IResourceWithEndpoints { + } + + class WireMockServerArguments { + } + + class EndpointReference { + } + + class AdminApiMappingBuilder { + } + + class IWireMockAdminApi { + } + + class MappingModelBuilder { + } + + class WireMockServerLifecycleHook { + } + + class ResourceLoggerService { + } + + class DistributedApplicationModel { + } + + class IDistributedApplicationLifecycleHook { + } + + WireMockServerResource --> ContainerResource : Inherits + WireMockServerResource --> IResourceWithServiceDiscovery : Implements + WireMockServerResource --> WireMockServerArguments : Uses + WireMockServerResource --> EndpointReference : Returns + WireMockServerArguments --> AdminApiMappingBuilder : Uses + AdminApiMappingBuilder --> MappingModelBuilder : Uses + AdminApiMappingBuilder --> IWireMockAdminApi : Uses + + IResourceWithServiceDiscovery --> IResourceWithEndpoints : Inherits + WireMockServerLifecycleHook --> IDistributedApplicationLifecycleHook : Implements + WireMockServerLifecycleHook --> ResourceLoggerService : Uses + WireMockServerLifecycleHook --> DistributedApplicationModel : Uses + WireMockServerLifecycleHook --> WireMockServerResource : Uses + WireMockServerLifecycleHook --> IWireMockAdminApi : Uses + + +``` \ No newline at end of file