using Microsoft.AspNetCore.Mvc.Testing; using Microsoft.Extensions.Hosting; namespace Ordering.FunctionalTests; public class OrderingScenarioBase { private class OrderingApplication : WebApplicationFactory<Program> { public TestServer CreateServer() { return Server; } protected override IHost CreateHost(IHostBuilder builder) { builder.ConfigureServices(services => { services.AddSingleton<IStartupFilter, AuthStartupFilter>(); }); builder.ConfigureAppConfiguration(c => { var directory = Path.GetDirectoryName(typeof(OrderingScenarioBase).Assembly.Location)!; c.AddJsonFile(Path.Combine(directory, "appsettings.Ordering.json"), optional: false); }); return base.CreateHost(builder); } } public TestServer CreateServer() { var factory = new OrderingApplication(); return factory.CreateServer(); } public static class Get { public static string Orders = "api/v1/orders"; public static string OrderBy(int id) { return $"api/v1/orders/{id}"; } } public static class Put { public static string CancelOrder = "api/v1/orders/cancel"; public static string ShipOrder = "api/v1/orders/ship"; public static string CompleteOrder = "api/v1/orders/complete"; } private class AuthStartupFilter : IStartupFilter { public Action<IApplicationBuilder> Configure(Action<IApplicationBuilder> next) { return app => { app.UseMiddleware<AutoAuthorizeMiddleware>(); next(app); }; } } }