using Microsoft.AspNetCore.Mvc.Testing; using Microsoft.Extensions.Hosting; namespace Ordering.FunctionalTests; public class OrderingScenarioBase { private class OrderingApplication : WebApplicationFactory { public TestServer CreateServer() { return Server; } protected override IHost CreateHost(IHostBuilder builder) { builder.ConfigureServices(services => { services.AddSingleton(); }); 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 Configure(Action next) { return app => { app.UseMiddleware(); next(app); }; } } }